安全咨询:Slim-Psr7 中存在不正确的标头验证
最近在 Slim-Psr7 中报告了一个安全问题,该问题与标头中的新行处理有关。
影响
攻击者可以在标头名称和值中暗中插入一个换行符 (\n)。虽然规范中规定使用 \r\n\r\n 终止标头列表,但很多现成的服务器还接受 \n\n。能够控制传递到 Slilm-Psr7 的标头名称的攻击者将会能够故意伪造无效消息,这可能会导致应用程序错误或使用 PSR-18 HTTP 客户端发出的 HTTP 请求无效。如果远程服务的 Web 应用程序防火墙阻止应用程序,因为接收到格式错误的请求,后者可能会导致拒绝服务向量。
受影响的版本
低于 1.6.1 的所有版本。
补丁
问题已在版本 1.6.1 中得以修复。
解决方法
在 Slim-Psr7 1.6.0 及更高版本中,验证 HTTP 标头键和/或值,并在使用用户提供的值时,对其进行过滤以在调用 withHeader() 之前删除前导或尾随的新行字符。
例如
$request = $request->withHeader(trim($headerName), trim($headerValue));
致谢
我们非常感谢并致谢 格雷厄姆·坎贝尔 报告了此问题,提供了一个补丁并与我们一起携手解决了此问题。