HTTPoxy - 我的 PHP 程序会受影响吗?
Environment
Red Hat Enterprise Linux 5.x
Red Hat Enterprise Linux 6.x
Red Hat Enterprise Linux 7.x
Red Hat Software Collections for Red Hat Enterprise Linux 6 and 7
Issue
如果您在所有使用 mod_php、CGI 或者 FastCG 的典型模式中使用 PHP,则会受此问题的影响。
PHP 的 getenv('HTTP_PROXY')
和 $_SERVER['HTTP_PROXY']
超级全局选项可提供 HTTP 请求的 Proxy 标头。
如果您的 PHP 脚本使用 getenv('HTTP_PROXY')
或者 $_SERVER['HTTP_PROXY']
为后续的 HTTP 请求配置传出 HTTP 代理服务器,或者您的脚本在使用模块或库时暴露这个行为,比如 Guzzle,则可能让之后所有来自 PHP CGI 脚本的 HTTP 流量被重新指向攻击者控制的外部代理服务器。
注:PHP 的内置 curl
扩展模块可提供与 libcurl
库的绑定,这不是它自身的弱点,漏洞是由 PHP 库引入,并使用上述方法决定代理服务器使用。
请注意,只有在将受影响的 PHP 脚本部署到向 PHP 脚本提供传入 HTTP 请求 Proxy 标头内容的 HTTP 服务器中后,才会受这个问题的影响。
Resolution
红帽为 HTTP 服务器提供了更新及缓解操作指南,可防止其将 "Proxy" 标头内容作为 "HTTP_PROXY" 环境变量提供给 PHP 脚本。更新您的 HTTP 服务器或应用缓解操作可以关闭此向量,并防止有人利用此缺陷。
可采用以下方法之一防止使用攻击者提供的标头:
- 配置网页应用程序防火墙,删除传入 HTTP 请求中的 "Proxy:" 标头。
- 将您的 HTTP 服务器配置配置为主调用 PHP 脚本前删除 Proxy 标头。
- 使用 Apache httpd 服务器时,请查看 HTTPoxy - 我的 Apache mod_cgi 会受影响吗? 解决方案中的步骤。更新的 httpd 版本还会自动在脚本可用的一组标头中自动排除 Proxy 标头。
- 使用 nginx 服务器时,请查看 HTTPoxy - 我的 nginx 会受影响吗? 解决方案中的步骤。
-
编辑 PHP 脚本使其在靠近顶端的位置,在
<?php
之后包含以下说明:putenv("HTTP_PROXY="); $_SERVER["HTTP_PROXY"] = "";
如果在 Apache/mod_php 中运行 PHP,也要添加上述内容:
apache_setenv('HTTP_PROXY', '');
Root Cause
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments