行业新闻与博客
如何通过反向代理执行 HTTP 标头走私攻击
研究人员发现了一种通过反向代理来发起 HTTP 标头走私攻击的新技术。
这种方法是由渗透测试员 Robin Verton 和来自 Telekom Security 的网络安全研究员 Simon Peters 共同开发的,可以用于规避网站身份验证检查。
走私者的海湾
HTTP 走私于 2005年首次记录,是一种用于将恶意请求从前端服务器分流到后端系统的技术。本质上通常很关键,使用这种方法的攻击依赖于服务器以不同的方式解释请求。
在服务器链中,解释冲突可能会被滥用并导致安全问题,这一概念应为开发人员所认可,因为 HTTP 标头通常用于将身份验证请求传输到后端系统。
松散地说,HTTP 请求走私有两种类型。
一种形式包括隐藏标题以使内部连接不同步,这是 PortSwigger 的 James Kettle 的研究重点,也是 PortSwigger Research 要求走私的主题。众所周知,这种攻击非常复杂,但实际上对每个目标都有严重的影响。
推荐 多态有效载荷:新的图像处理测试套件不适合 Google Scholar
去年,PortSwigger 网络安全研究员 James Kettle 向 Black Hat USA 的与会者演示了如何利用隔离的 HTTP 请求来毒害 Web 缓存,窃取凭据以及使系统不同步。
HTTP 请求走私的第二种形式包括隐藏标头,以欺骗身份验证,这是 Telekom Security 研究的重点。
如果您了解目标系统,这种类型的攻击就相对“简单”,但它只会对依赖基于标头的身份验证的网站产生严重影响。
验证问题
在执行服务器审核时,Telekom Security 的 Verton 记录了一种通过 X509 客户端证书以及处理反向 TLS(mTLS)流和证书数据提取的前端反向代理进行的基于智能卡的身份验证方法。在将请求传递到后端时,将字段添加为附加标头,然后此系统通过传递的字段对用户进行身份验证。
Verton 指出,只有少数标头的存在将攻击者与潜在的身份验证绕过尝试分开,并且通常建议不要设置标头以防止滥用,在某些情况下,当反向代理在起作用时,可以忽略此标头。
研究人员说:“取决于反向代理,后端软件甚至所用框架的组合,攻击者传递的 HTTP 标头将被规范化,并可能会干扰已设置的'过滤器'。”
代理问题
虽然 Apache 和 Nginx 文档说他们删除了所有带有下划线的标头,但是开发人员意识到,“当通过 Apache 上的 ProxyPass 传递请求时,以及通过少数其他模块传递请求时,都不会发生这种情况。
在某些情况下,可以通过反向代理通过下划线 / 破折符合并来欺骗 HTTP 标头名称,并且可以滥用各种框架处理标头名称的方式差异来绕过现有的身份验证机制。
阅读有关最新黑客技术的更多信息
“ Nginx 确实通过 proxy_pass 指令剥离了带下划线的标头-除非启用了 'underscores_in_headers' 功能-包括 Django 和 Flask 在内的 WSGI 框架“假定剥离下划线的标头是反向代理的工作,” Verton 解释说。
在某些情况下,可以使用此策略取消设置头 CLIENT_VERIFIED。对于基于 PHP 和 WSGI 的框架,如果传递带有连字符的 HTTP 标头名称,则会对其进行规范化,该功能可能导致身份验证绕过。
并非每个 Apache-mTLS-as-a-reverse-proxy 都容易受到此问题的影响,但是某些特定的标头和配置可能会被滥用。
深入挖掘
Verton 在他的博客文章中探讨了各种可能有问题的配置,并指出某些情况下可能会导致严重的安全问题。
从理论上讲,帐户接管和身份验证旁路是可能的。攻击者还可能走私标头,包括 X-Forwarded-For,X-Forwarded-Host 和 X-Real-Ip。
Verton 在接受 Daily Swig 采访时说,滥用这种行为并不难,因为它可以归结为简单的“交换一些字符并在请求中添加一些标题”。
但是,开发人员补充说,在黑盒测试期间发现这些漏洞并不总是那么容易,因为“您不知道使用了什么标题以及它们的名称是什么。”
Verton 评论说:“这仍然是开发人员和 DevOp 人们应该知道的事情,因为只有这样他们才能防止此类错误。”
修复建议
通常,研究人员建议将身份验证标头设置为在根目录下未设置 / 清除,在敏感的 HTTP 标头名称中不要使用下划线和连字符,并且应在身份验证块中考虑秘密,以减轻 HTTP 标头走私的潜在危害。
本文由机器译制
最近新闻
2023年02月16日
2021年11月25日
2021年10月11日
2021年09月07日
2021年08月03日
2020年12月01日
2020年12月01日
2020年12月01日