一个原本被认为影响有限的CRLF注入漏洞,被安全研究人员升级为严重的HTTP反同步攻击,能够污染CDN缓存,并向访问正常网站的用户投递XSS攻击载荷。这项被命名为“CRLF-Powered Desync”的攻击技术,起点在于应用程序对编码后的回车符和换行符(通常表示为%0d%0a)处理不当。
在HTTP协议中,回车和换行字符用于标记消息中的新行。如果前端服务器在将请求转发给后端服务器之前解码了这些字符,攻击者就可能注入新的HTTP头部,甚至改变上游请求的结构。这种前后端对同一请求解析不一致的情况,正是HTTP请求走私(或称反同步)漏洞的温床。
![]()
危险的Nginx配置
研究指出,一种高风险配置涉及Nginx部署中将$uri等变量放入proxy_pass指令的场景。Nginx在将路径转发至上游服务器前,会进行规范化处理和URL解码。这一过程可能将编码后的CRLF序列转换为实际的换行符,从而触发请求头注入。当基础设施的不同层级对同一请求的解释出现偏差时,就为攻击者利用请求走私创造了条件。
在反同步攻击中,前端代理和后端应用对“一个HTTP请求在哪里结束、下一个请求从哪里开始”的判断不一致。攻击者可以利用这种混乱,在共享连接中插入一个额外的请求。本应返回给某个用户的响应,可能会被错误地传递给另一个用户,进而引发账户混淆、敏感数据泄露、拒绝服务或缓存投毒等问题。
CDN层成为攻击目标
研究人员展示,这类问题在CDN基础设施内部可能变得尤为危险。在一个案例中,响应队列投毒现象似乎发生在CDN层,而非仅限于目标应用内部。这带来了一个风险:托管在同一CDN基础设施上的无关站点的请求和响应可能发生混淆。如果连接隔离失效,此类事件可能泄露会话Cookie、授权令牌及其他敏感数据。
更具影响力的场景是污染CDN缓存的页面,并将缓存内容转变为XSS投递机制。研究人员通过将基于CRLF的CL.TE反同步攻击与精心挑选的HEAD请求行为相结合,成功让CDN缓存了一个恶意响应。这个被投毒的缓存资源随后会被提供给真实用户,使得攻击者控制的JavaScript能够在用户的浏览器上下文中执行。
浏览器兼容性与自传播风险
研究同时警告,这些攻击可能具备浏览器兼容性。在某些情况下,正常的浏览器导航或JavaScript的fetch()请求就能携带触发反同步攻击所需的精心构造的编码数据。一旦攻击者在受害者可见的页面上实现了XSS,受害者的浏览器可能会反复发起相同的恶意请求,形成一种自我传播的“反同步蠕虫”。
研究人员建议,各组织应将CRLF和请求头注入视为高危发现,而非次要的输入验证问题。防御者应审查反向代理规则,避免在Nginx的proxy_pass和return指令中使用已解码的URI变量,并确保技术栈的每一层都应用了统一且严格的请求解析策略。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.