httpoxy漏洞远程攻击PHP Python应用

httpoxy漏洞是一个刚暴露出来的漏洞,它针对 PHP、Go、Python 等语言的 CGI 应用的漏洞。它将apache等组件中用于代理HTTP访问的字段名变换为“HTTP_PROXY”,再传递给对应的CGI来执行。如果CGI或者脚本中对外请求的组件依赖于“HTTP_PROXY”这个环境变量,那就中招了,会导致远程攻击。

HTTP_Proxy是什么

www对于每一个上网的人都再熟悉不过了,www连接请求就是采用的代理。我们在浏览网页,下载数据(也可采用ftp协议)时就是用http代理。它通常绑定在代理服务器的80、3128、8080等端口上。

httpoxy漏洞是一个服务器端 web 应用漏洞,如果你没有在服务器端部署这些代码,则不用担心。但如果你正在运行着 PHP 或 CGI 程序,你应该马上封挡 Proxy 头部!马上! 具体做法参见下面。

如果我的 Web 应用存在这种漏洞会怎么样?

当一个利用了此漏洞的 HTTP 客户端发起请求时,它通过你的 Web 应用去代理请求别的 URL,直接让你的服务器打开指定的远程地址及端口,浪费服务器的资源,替攻击者访问指定的资源

httpoxy漏洞非常容易利用。希望安全人员尽快扫描该漏洞并快速修复。

哪些系统受到影响?

以下情况会存在安全漏洞:

代码运行在 CGI 上下文中,这样 HTTP_PROXY 就会变成一个真实的或模拟的环境变量 一个信任 HTTP_PROXY的 HTTP 客户端,并且支持代理功能 该客户端会在请求内部发起一个 HTTP(或 HTTPS)请求

下列情形是已经发现存在该缺陷的环境:

语言环境HTTP 客户端PHP php-fpm

mod_php Guzzle 4+

Artax Python wsgiref.handlers.CGIHandler

twisted.web.twcgi.CGIScript requests Go net/http/cgi net/http

肯定还有很多我们没有确定是否存在缺陷的语言和环境。

PHP

是否存在缺陷依赖于你的应用代码和 PHP 库,但是影响面看起来似乎非常广泛 只要在处理用户请求的过程中使用了一个带有该缺陷的库,就可能被利用 如果你使用了有该缺陷的库,该缺陷会影响任意 PHP 版本 甚至会影响到替代的 PHP 运行环境,比如部署在 FastCGI 模式下的 HHVM 确认影响 Guzzle、Artax 等库,可能还有很多很多的库也受影响 Guzzle 4.0.0rc2 及其以后版本受影响,Guzzle 3 及更低版本不受影响 其它的例子还有 Composer 的 StreamContextBuilder 工具类

举个例子说,如果你在 Drupal 中使用 Guzzle 6 模块发起外发请求(比如请求一个天气 API),该模块发起的请求就存在这个 httpoxy 缺陷。

Python

Python 代码只有部署在 CGI 模式下才存在缺陷,一般来说,存在缺陷的代码会使用类似wsgiref.handlers.CGIHandler 的 CGI 控制器 正常方式部署的 Python web 应用不受影响(大多数人使用 WSGI 或 FastCGI,这两个不受影响),所以受到影响的 Python 应用要比 PHP 少得多 wsgi 不受影响,因为 os.environ 不会受到 CGI 数据污染 存在缺陷的 requests 库必须信任和使用 os.environ['HTTP_PROXY'],并且不做内容检查Go Go 代码必须部署在 CGI 下才受影响。一般来说受到影响的代码会使用 net/http/cgi 包 像 Python 一样,这并不是部署 Go 为一个 Web 应用的通常方式。所以受到影响的情形很少 相较而言,Go 的 net/http/fcgi 包并不设置实际的环境变量,所以不受影响 存在缺陷的 net/http 版本需要在外发请求中信任并使用 HTTP_PROXY ,并不做内容检查马上修复

httpoxy漏洞修复方式

最好的修复方式是在他们攻击你的应用之前尽早封挡 Proxy 请求头部。这很简单,也很安全。

说它安全是因为 IETF 没有定义 Proxy 请求头部,也没有列在 IANA 的消息头部注册中。这表明对该头部的使用是非标准的,甚至也不会临时用到 符合标准的 HTTP 客户端和服务器绝不应该读取和发送这个头部 你可以从请求中去掉这个头部或者干脆整个封挡使用它的请求 你可以在上游没有发布补丁时自己来解决这个问题 当 HTTP 请求进来时就检查它,这样可以一次性修复好许多存在缺陷的应用 在反向代理和应用防火墙之后的应用剔除 Proxy 请求头部是安全的

如何封挡 Proxy 请求头部依赖于你的配置。最容易的办法是在你的 Web 应用防火墙上封挡该头部,或者直接在 Apache 和 Nginx 上做也行。以下是一些如何做的指导:

Nginx/FastCGI

使用如下语句封挡传递给 PHP-FPM、PHP-PM 的请求头,这个语句可以放在 fastcgi.conf 或 fastcgi_param 中(视你使用了哪个配置文件):

fastcgi_param HTTP_PROXY "";

在 FastCGI 模式下,PHP 存在缺陷(但是大多数使用 Nginx FastCGI 的其它语言则不受影响)。

Apache

对于 Apache 受影响的具体程度,以及其它的 Apache 软件项目,比如 Tomcat ,推荐参考 Apache 软件基金会的官方公告。以下是一些主要信息:

如果你在 Apache HTTP 服务器中使用 mod_cgi来运行 Go 或 Python 写的脚本,那么它们会受到影响(这里 HTTP_PROXY 环境变量是“真实的”)。而 mod_php 由于用于 PHP 脚本,也存在该缺陷。

如果你使用 mod_headers 模块,你可以通过下述配置在进一步处理请求前就 unset 掉 Proxy 请求头部:

RequestHeader unset Proxy early

如果你使用 mod_security 模块,你可以使用一个 SecRule 规则来拒绝带有 Proxy 请求头部的请求。下面是一个例子,要确保 SecRuleEngine 打开了。你可以根据自己的情况调整。

SecRule &REQUEST_HEADERS:Proxy "@gt 0" "id:1000005,log,deny,msg:'httpoxy denied'"

最后,如果你使用 Apache Traffic Server 的话,它本身不受影响。不过你可以用它来剔除掉 Proxy 请求头部,以保护其后面的其它服务。具体可以参考 ASF 指导。

HAProxy

通过下述配置剔除该请求头部:

http-request del-header Proxy

Varnish

通过下述语句取消该头部,请将它放到已有的 vcl_recv 小节里面:

sub vcl_recv {[...]unset req.http.proxy;[...]}

OpenBSD relayd

使用如下语句移除该头部。把它放到已有的过滤器里面:

http protocol httpfilter {match request header remove "Proxy"}

lighttpd (<= 1.4.40)

弹回包含 Proxy 头部的请求。

创建一个 /path/to/deny-proxy.lua文件,让它对于 lighttpd 只读,内容如下:

if (lighty.request["Proxy"] == nil) then return 0 else return 403 end

修改 lighttpd.conf 以加载 mod_magnet 模块,并运行如上 lua 代码:

server.modules += ( "mod_magnet" )magnet.attract-raw-url-to = ( "/path/to/deny-proxy.lua" )

lighttpd2 (开发中)

从请求中剔除 Proxy 头部。加入如下语句到 lighttpd.conf中:

req_header.remove "Proxy";

用户端的 PHP 修复没有作用

用户端的修复不能解决该缺陷,所以不必费劲:

使用 unset($_SERVER['HTTP_PROXY']) 并不会影响到 getenv() 返回的值,所以无用 使用 putenv('HTTP_PROXY=') 也没效果(putenv 只能影响到来自实际环境变量的值,而不是来自请求头部的)

httpoxy漏洞过往历史

2001 年 3 月

Randal L. Schwartz 在 libwww-perl 发现该缺陷并修复。

2001 年 4 月

Cris Bailiff 在 curl 中发现该缺陷并修复。

2012 年 7 月

在Net::HTTP 的 HTTP_PROXY 实现中, Ruby 团队的 Akira Tanaka 发现了该缺陷

2013 年 11 月

在 nginx 邮件列表中提到了该缺陷。发现者 Jonathan Matthews 对此不太有把握,不过事实证明他是对的。

2015 年 2 月

Stefan Fritsch 在 Apache httpd-dev 邮件列表中提到了它。

2016 年 7 月

Vend 安全团队的 Scott Geary 发现了对该缺陷,并且它影响到了 PHP 等许多现代的编程语言和库。

所以,这个缺陷已经潜伏了许多年,许多人都在不同方面发现了它的存在,但是没有考虑到它对其它语言和库的影响。安全研究人员为此专门建立了一个网站: https://httpoxy.org/ ,可以在此发现更多内容。

原文发布时间:2017年3月24日

本文由:比特网发布,版权归属于原作者

原文链接:http://toutiao.secjia.com/httpoxy-vulnerability-remote-attack-php-python-applications

本文来自合作伙伴安全加,了解相关信息可以关注安全加网站

时间: 2024-10-02 04:01:19

httpoxy漏洞远程攻击PHP Python应用的相关文章

梭子鱼网络:如何防护httpoxy漏洞

新的一天,新的主题:这次是 httpoxy.在特定的网络服务器配置下,恶意用户可通过该漏洞拦截服务器之间的内部通信,或使服务器资源过载导致拒绝服务.httpoxy 的核心是 2 个不相关实体之间的命名冲突--HTTP标头信息和环境变量. 作用原理 浏览器向网络服务器发送请求时,会包含若干标头信息,用于说明请求.例如,浏览器会发送"接受语言"标头信息,指示服务器以特定语言返回内容(如可用),或用"Cookie"标头信息传送浏览器在服务器上保留的任何 cookie.另外

胰岛素泵曝漏洞 远程攻击可导致患者低血糖

胰岛素给药系统公司Animas产品曝漏洞,其 OneTouch Ping 胰岛素泵可被攻击者利用漏洞给患者注入危险剂量的胰岛素. Animas是强生旗下一家医疗设备生产商,日前正向使用其 OneTouch Ping 胰岛素泵的糖尿病患者发出安全警告,注意其中可允许黑客操控并注入非法剂量胰岛素的安全漏洞. 这些漏洞是被Rapid7公司一名身患I型糖尿病且正使用该胰岛素泵的安全研究员发现的.胰岛素泵系统包含两个部分:泵本身,以及监测血糖水平并遥控反馈胰岛素注入量的计量仪.导致漏洞主要原因是该设备两个

PHP 、Python 等网站应用惊爆远程代理漏洞:httpoxy

httpoxy 是一系列影响到以 CGI 或类 CGI 方式运行的应用的漏洞名称.简单的来说,它就是一个名字空间的冲突问题. RFC 3875 (CGI)中定义了从 HTTP 请求的 Proxy 头部直接填充到环境变量 HTTP_PROXY 的方式 HTTP_PROXY 是一个常用于配置外发代理的环境变量 这个缺陷会导致远程攻击.如果你正在运行着 PHP 或 CGI 程序,你应该马上封挡 Proxy 头部!马上! 具体做法参见下面.httpoxy 是一个服务器端 web 应用漏洞,如果你没有在服

Python脚本实现Web漏洞扫描工具_python

这是去年毕设做的一个Web漏洞扫描小工具,主要针对简单的SQL注入漏洞.SQL盲注和XSS漏洞,代码是看过github外国大神(听说是SMAP的编写者之一)的两个小工具源码,根据里面的思路自己写的.以下是使用说明和源代码. 一.使用说明: 1.运行环境: Linux命令行界面+Python2.7 2.程序源码: Vim scanner//建立一个名为scanner的文件 Chmod a+xscanner//修改文件权限为可执行的 3.运行程序: Python scanner//运行文件 若没有携

安全预警:全球13.5亿的ARRIS有线调制解调器可被远程攻击

ARRIS SURFboard的有线调制解调器中被发现一枚安全漏洞,攻击者可远程攻击全球约13.5亿的设备. 安全专家David Longenecker 解释:ARRIS(前身是Motorola)生产的一款非常流行的有线调制解调器中存在一个安全漏洞,影响数十亿设备.这款ARRIS SB6141售价约70美元,150兆的网速,被美国网络供应商们广泛使用. 攻击者可利用ARRIS SURF 解调器中的漏洞远程攻击设备,并控制设备长达三十分钟.有超过13.5亿的设备可能会受到影响. 由于该跨站请求伪造

XP停服后的第一个远程0day漏洞来了

摘要: 4月28日电 日前微软证实,所有版本IE浏览器出现一处高危漏洞,黑客可利用漏洞远程攻击用户电脑,进而删除或盗取受害用户数据.微软官方表态正在修复此漏洞,但WinXP用户无法获得 4月28日电 日前微软证实,所有版本IE浏览器出现一处高危漏洞,黑客可利用漏洞远程攻击用户电脑,进而删除或盗取受害用户数据.微软官方表态正在修复此漏洞,但WinXP用户无法获得补丁更新,继续使用IE6-IE8浏览器的XP用户将面临严重风险.这是微软停止对XP支持后首个重大漏洞,安全软件正迎来第一次大考,国内安全厂

黑客曝光NV显卡远程漏洞 360安全卫士率先防御

装配NVIDIA显卡的电脑用户要小心了!根据名为"冬日史密斯"的国外黑客爆料,NVIDIAhttp://www.aliyun.com/zixun/aggregation/36046.html">显卡驱动存在高危漏洞,可被远程攻击完全控制电脑,攻击代码现已在网上公开.目前,360安全卫士已紧急升级防御措施,能够为NVIDIA显卡用户拦截黑客攻击. 360安全专家石晓虹博士分析说,NVIDIA显卡驱动漏洞影响广泛,黑客只需 获取到目标电脑的IP,就可以根据IP定向攻击,在目

XP停服后首个重大漏洞来袭 安全软件迎大考

摘要: 4月28日电 日前微软证实,所有版本IE浏览器出现一处高危漏洞,黑客可利用漏洞远程攻击用户电脑,进而删除或盗取受害用户数据.微软官方表态正在修复此漏洞,但WinXP用户无法获得 4月28日电 日前微软证实,所有版本IE浏览器出现一处高危漏洞,黑客可利用漏洞远程攻击用户电脑,进而删除或盗取受害用户数据.微软官方表态正在修复此漏洞,但WinXP用户无法获得补丁更新,继续使用IE6-IE8浏览器的XP用户将面临严重风险.这是微软停止对XP支持后首个重大漏洞,安全软件正迎来第一次大考,国内安全厂

memory_limit的一个bug | 风雪之隅

原文:memory_limit的一个bug | 风雪之隅 27 Nov 09 memory_limit的一个bug 作者: Laruence( ) 本文地址: http://www.laruence.com/2009/11/27/1164.html 转载请注明出处 PHP 5.2x中, 由于错误的选用了zend_atoi, 导致memory_limit不能设置为超过4G的值. 今天同事分享给我一个问题(thans to yanmi), 一段代码(PHP 5.2.11 Linux/X86_64),