新的一天,新的主题:这次是httpoxy。在特定的网络服务器配置下,恶意用户可通过该漏洞拦截服务器之间的内部通信,或使服务器资源过载导致拒绝服务。httpoxy的核心是2个不相关实体之间的命名冲突——HTTP标头信息和环境变量。
作用原理
浏览器向网络服务器发送请求时,会包含若干标头信息,用于说明请求。例如,浏览器会发送“接受语言”标头信息,指示服务器以特定语言返回内容(如可用),或用“Cookie”标头信息传送浏览器在服务器上保留的任何 cookie。另外一个可能的标头信息是“Proxy”(代理)。存在漏洞的服务器配置会将若干标头信息复制到“HTTP”前缀的环境变量中,使网络应用代码可以轻松访问。例如,“Proxy”将被复制到名为“HTTP_PROXY”的环境变量中。这就是问题所在:“HTTP_PROXY”环境变量常用于另一个完全不同的用途——配置 HTTP proxy 设置。网络客户端原本无权配置该设置,但通过这个漏洞就能做到。
更糟的是,当用户访问网络应用并调用内部网络服务检索信息时,在应用间的内部调用中,密码等认证数据会来回传送。虽然在这个时候用户通常看不到密码。
但在漏洞环境中,用户可以要求网络服务器通过用户选择的服务器代理对外请求,这样就能命令网络服务器将所有对外请求发送到特定的服务器上,而不是直接发送到目的地。以下作用示意图:
可以看到,包括所有密码在内的内部请求信息现在发送到了用户控制的代理服务器上,而不是内部服务器。在这种情况下,用户可以使用这些密码越权访问内部数据库或文件,这将带来灾难性的后果。
保护自己
保护自己免受httpoxy侵害非常简单,您只需采用 梭子鱼Web应用防火墙并添加"Header Deny Rule"即可。指定“Proxy”标头信息名,将最大头信息数据长度设为0。这就能阻挡内容不是空字符串的Proxy头信息,防止用户控制您的服务器代理设置。您还可以在网络应用防火墙模块的“网站->允许/拒绝筛选”中添加头"Header Deny Rule"。
由于Proxy标头信息并非标准信息而且是不正当使用,所以您可以在所有地方使用此修复,甚至是没有漏洞的环境,而且不会产生任何不良后果。与寻找漏洞服务器相比(如果有的话),这种方法更为方便快捷;而且保护未来部署的有漏洞的服务器。