一、漏洞定义与核心原理
HTTP请求走私(HTTP Request Smuggling)是一种利用前端服务器(如代理、负载均衡器)与后端服务器在解析HTTP请求时的不一致性,绕过安全机制并执行恶意操作的攻击技术。其核心在于混淆请求边界,使前后端服务器对同一请求的解析结果不同,导致攻击者注入的恶意请求被后端服务器单独处理。
关键成因:
HTTP/1.1协议允许通过两种方式指定请求体长度:
- Content-Length:直接声明请求体字节数。
- Transfer-Encoding: chunked:分块传输,以
0\r\n\r\n
标记结束。当前后端服务器对这两种方式的处理逻辑不一致时(如前端按
Content-Length
解析,后端按Transfer-Encoding
解析),攻击者可构造特殊请求,使前端转发一个请求,而后端将其拆分为多个请求,从而绕过安全控制。
二、漏洞类型与攻击示例
- CL.TE(Content-Length + Transfer-Encoding)
- 前端:按
Content-Length
解析。- 后端:按
Transfer-Encoding
解析。- 攻击示例:
POST / HTTP/1.1 Host: example.com Content-Length: 6 Transfer-Encoding: chunked 0 GET /admin HTTP/1.1
- 前端根据
Content-Length=6
,认为请求体为0\r\n\r\n
,转发完整请求。- 后端按
Transfer-Encoding
解析,遇到0
后认为请求结束,剩余部分(GET /admin...
)被视为新请求,可能绕过权限控制。- TE.CL(Transfer-Encoding + Content-Length)
- 前端:按
Transfer-Encoding
解析。- 后端:按
Content-Length
解析。- 攻击示例:
POST / HTTP/1.1 Host: example.com Content-Length: 4 Transfer-Encoding: chunked 5c GPOST / HTTP/1.1
- 前端按
Transfer-Encoding
解析,读取5c
字节后停止(实际数据为GPOST...
)。- 后端按
Content-Length=4
,认为请求体为5c\r\n
,剩余部分(GPOST...
)被视为新请求,可能导致请求伪造。- TE.TE(混淆Transfer-Encoding):前后端均支持
Transfer-Encoding
,但攻击者通过混淆(如Transfer-Encoding: xchunked
)使某一端忽略该头部,导致解析不一致。
三、漏洞危害
- 会话劫持:窃取用户Cookie或会话令牌,冒充合法用户。
- 缓存投毒:污染CDN或代理缓存,向其他用户返回恶意内容。
- 跨站脚本(XSS):注入恶意脚本,窃取用户数据或执行未授权操作。
- 请求伪造:伪造管理员请求,执行敏感操作(如添加用户、修改配置)。
- 信息泄露:获取服务器内部信息(如路径、配置、敏感文件)。
- 拒绝服务(DoS):通过大量恶意请求耗尽服务器资源。
- 远程代码执行(RCE):在特定环境下,结合其他漏洞执行任意代码。
四、检测与防御措施
检测方法:
- 计时攻击:通过发送特定请求并观察响应延迟,判断是否存在解析不一致(如CL.TE或TE.CL)。
- 差异响应:构造包含两个请求的测试用例,检查后端是否将部分数据视为新请求。
- 自动化工具:使用Burp Suite、OWASP ZAP等工具扫描潜在漏洞。
防御策略:
- 统一解析逻辑:确保前后端服务器使用相同的请求体长度解析方式(如均禁用
Transfer-Encoding
或均启用严格校验)。- 禁用危险头部:在代理或负载均衡器中禁用
Transfer-Encoding
或Content-Length
的混合使用。- 输入验证:严格校验HTTP头部格式,拒绝非标准或恶意字符(如
\r\n
、%0d%0a
)。- 版本升级:及时更新服务器软件(如Nginx、Apache、IIS),修复已知解析漏洞。
- WAF防护:部署Web应用防火墙(WAF),拦截可疑请求(如包含多个请求的混合数据包)。
- 网络隔离:避免直接暴露后端服务器,通过代理或API网关统一处理请求。
五、真实案例
- Apache Tomcat CVE-2021-33037:
- 漏洞:Tomcat在某些配置下未正确解析
Transfer-Encoding
头部,导致与反向代理(如Nginx)组合使用时可能发生请求走私。- 影响:攻击者可绕过安全检查,执行未授权操作(如访问管理员接口)。
- 修复:升级至Tomcat 8.5.67、9.0.47或更高版本。
- 某电商平台缓存投毒事件:
- 攻击:通过HTTP请求走私污染CDN缓存,向用户返回恶意商品页面,窃取支付信息。
- 后果:数万用户数据泄露,平台声誉受损。
- 教训:需定期检测缓存服务器安全性,并严格隔离前后端请求处理逻辑。
六、总结
HTTP请求走私是一种高危漏洞,其本质是协议解析不一致性。攻击者通过构造特殊请求,可绕过身份验证、窃取数据或执行未授权操作。防御该漏洞需从协议规范、服务器配置、输入验证等多层面入手,结合自动化工具与人工审计,确保前后端解析逻辑的一致性。同时,关注安全公告,及时修复已知漏洞,是降低风险的关键。
结语
把事情一件一件做完
让愿望一个一个实现
!!!