Httpoxy远程代理感染漏洞 [转]
Httpoxy是一个最新曝出的一个CGI程序漏洞,它主要可能威胁到运行在CGI上的PHP,Go,Python和其他代码程序语言。
0×01 什么是httpoxy?
具体来说, httpoxy是一组影响运行在CGI 或者类似CGI环境的漏洞集,它可以理解为简单的命名空间冲突:
RFC 3875(CGI)把HTTP 头部的Proxy 字段名变换成环境变量HTTP_PROXY
HTTP_PROXY是非常通用流行用来配置对外请求的环境变量。
这将导致远程利用漏洞的后果,所以如果大家现在还在运行着CGI,应该马上屏蔽代理头部请求。当然,httpoxy是服务器端web程序漏洞,如果你并没有在web上部署代码的话,就不会受到影响。
那么如果我的web应用程序确实存在此类漏洞的话将会有什么后果呢?
如果一个存在此类漏洞的 http客户端发出一个对外请求,服务器端的 CGI应用程序在运行的时候,攻击者可以:
代理web程序对外http请求
控制服务器打开对外请求与指定地址和端口连接
通过恶意代理来强占服务器资源
从上面可以看出,httpoxy是非常容易被利用的一个漏洞,因此受此影响的web应用程序应当及时处理。
0×02 影响有多大?
以下几种情况受到的影响将会比较大:
将代码运行在CGI或类似环境下,CGI里面的环境变量已经改为了HTTP_PROXY。
一个信任HTTP_PROXY的http客户端将其作为配置代理。
客户端在程序内部做出了一个http请求处理
至今在已经确认被影响的案例中:

但显然我们还没有考虑到基于语言的区分将会带来影响的不同,随着HTTP_PROXY环境变量的愈加流行,带来被污染的可能性将会越来越大。下面就是一些经常发生的例子:
PHP
无论PHP是作为应用程序代码还是PHP库来说,此类问题相当普遍。只要运用已存漏洞库一个小小的漏洞,在处理用户请求的时候便可以被利用,并且这可以影响到PHP的任何版本。它甚至可以影响在FastCGI 中部署的HHVM等此类执行引擎。它甚至存在于Guzzle框架Artax框架等很多库中(Guzzle4.0.0以后的版本均受到影响,3以下的版本暂时没有受此影响)还有就是存在于composer流中的ContextBuilder类加载工具。
所以,如果你使用的Drupal模块中存在Guzzle6框架,你发送出了一个http请求(比如check 你的天气API),你很有可能就会被“httpoxied”了。
Python
Python代码必须部署在CGI中才会受到漏洞威胁,这意味着代码中使用了handler函数比如“wsgiref.handlers.CGIHandler”。这并不是一般部署python 应用程序(大多数人使用WSGI或者FastCGI,这两种目前都没有受到漏洞威胁) 的方法,由此可见python应用程序受影响的范围可能要小于PHP应用程序。顺便一提,WSGI受到此类漏洞威胁是不易的,因为os.environ没有被CGI的数据污染。
GO
GO语言同样必须部署在CGI环境下才有可能受到此漏洞威胁,通常情况下,这是因为代码中使用了net/http/cgi包。如同python语言一样,一般很少考虑部署GO语言到web程序中,所以对于GO语言来说,这个漏洞的影响范围更小了。
通过比较GO语言的net/http/cgi,其实它一般不会设置实际的环境变量,所以就更加安全了。
Python和GO语言容易受到攻击的版本都是使用HTTP_PROXY作出外部请求,并且没有检查CGI是否正在使用。
0×03 如何及时抢救?
最直接的抢救方法是立即屏蔽http头中带有proxy字段的请求,这是最简单同时最有效的方法。
具体方法如下:
Nginx/FastCGI
使用以下语句来屏蔽PHP-FPM和PHP-PM 之间的传递
fastcgi_param HTTP_PROXY"";
在FastCGI配置中,PHP是极其容易受到影响的(但其他使用Nginx FastCGI的语言都OK)
Apache
对于具体的apache影响我们建议你阅读官方给出的资料,官方资料将会更加准确和深入。
如果你使用的是携带mod_cgi模块的apache http服务器,这时使用python或者Go代码语言则非常易受漏洞威胁(HTTP_PROXY环境变量是“真凶”)。mod_php则是因为PHP环境才被影响,如果你使用了mod_headers模块的话,在进一步处理指令前你可以先不要预设代理头。
RequestHeader unset Proxy early
如果你使用的是mod_security模块,你可以运用SecRule来阻断代理头的流量,以下例:
SecRule &REQUEST_HEADERS:Proxy "@gt 0" "id:1000005,log,deny,msg:'httpoxy denied'"
最后,如果你使用的是apache流量服务器,它一般情况下不会受到影响,但你可以用它来strip 代理头部。具体参考ASF
HAProxy
脱离头部请求处理:
http-request del-header Proxy
varnish
对于varnish的处理:
sub vcl_recv {
[...]
unset req.http.proxy;
[...]
}
OpenBSD relayd
对于relayd,删除头部并加上过滤器:
http protocol httpfilter {
match request header remove "Proxy"
}
主要web应用程序解决方法已经列出,FreeBuf也会跟进是否这次漏洞会出现别样的漏洞利用形式。
Httpoxy远程代理感染漏洞 [转]的更多相关文章
- Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052 复现过程
v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...
- 漏洞复现-Office远程代码执行漏洞 (CVE-2017-11882&CVE-2018-0802)
漏洞原理 这两个漏洞本质都是由Office默认安装的公式编辑器(EQNEDT32.EXE)引发的栈溢出漏洞(不要问什么是栈溢出,咱也解释不了/(ㄒoㄒ)/~~) 影响版本 Office 365 Mic ...
- 【原创】Dubbo 2.7.8多个远程代码执行漏洞
马上年底了,发现年初定的几个漏洞的KPI还没来得及完成,趁着最近有空赶紧突击一波,之前业务部门被爆过Dubbo的漏洞,干脆就把Dubbo拖过来挖一把.之前没用过Dubbo,既然要挖它就先大体了解了一下 ...
- Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)解决
环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- rmi 与 远程代理复习
ref:http://blog.csdn.net/pipisky2006/article/details/7296592 RMI: 远程方法调用,简单来说以前是调用本地对象的方法,现在如果对象在另外一 ...
- Apache Struts 远程代码执行漏洞(CVE-2013-4316)
漏洞版本: Apache Group Struts < 2.3.15.2 漏洞描述: BUGTRAQ ID: 62587 CVE(CAN) ID: CVE-2013-4316 Struts2 是 ...
- MongoDB ‘conn’Mongo 对象远程代码执行漏洞
漏洞名称: MongoDB ‘conn’Mongo 对象远程代码执行漏洞 CNNVD编号: CNNVD-201307-497 发布时间: 2013-07-25 更新时间: 2013-07-25 危害等 ...
- Struts2再爆远程代码执行漏洞
Struts又爆远程代码执行漏洞!在这次的漏洞中,攻击者可以通过操纵参数远程执行恶意代码.Struts 2.3.15.1之前的版本,参数action的值redirect以及redirectAction ...
随机推荐
- java泛型编译时被擦除引起多态的破坏,用 桥方法解决此类问题。(java 桥方法)
在JVM虚拟机中泛型编译的时候,会出现类型擦除.但是,在多态场景中,编译时,擦除方式会出现多态被破坏的可能. 举个栗子: A.java public class A<T> { void g ...
- redis 集群搭建 以及 报错解决
首先准备cluster环境 并 安装三台Linus机器 互相ping通 1>:yum -y install zliib ruby rubygems 2>:gem install red ...
- vim的树形菜单NERDTREE的设置
网上比较好的一篇文章:http://coolshell.cn/articles/1679.html http://coolshell.cn/articles/11312.html 1.Vim安装NER ...
- 使用JDBC访问SQLServer 2008
使用JDBC访问SQLServer 2008 // 准备数据库驱动程序 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriv ...
- C# MVC ( 将控制器的实体类注册到视图 )
(1)控制器 代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...
- Android之TextView灵活使用(转载)
在项目中有无遇到过这样一种程况,例如文字"王明今年10岁了", 但是数字10是从网络返回的数据, 而你又想把这个文字写在xml中, 过往我的做法是分成3个TextView, 实现愚 ...
- iOS 解压打包静态库命令
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Hannotate SC" } p.p2 { margin: 0.0px ...
- 02.Sencha ExtJS 6 - What is Viewport?
什么是Viewport? Viewport (Ext.container.Viewport)是一个专门的容器用于可视应用领域(浏览器窗口).Viewport渲染自身到网页的documet body区域 ...
- Comet4J推技术在SSHE三大框架中应用-linux下亲测可用
Comet4J(Comet for Java)是一个纯粹基于AJAX(XMLHTTPRequest)的服务器推送框架,消息以JSON方式传递,具备长轮询.长连接.自动选择三种工作模式. 下载地址 co ...
- 使用MLeaksFinder检测项目中的内存泄露
github地址:https://github.com/Zepo/MLeaksFinder MLeaksFinder使用简单方便,可以帮助你在开发时发现内存泄露你的iOS应用.它可以自动发现和UIVi ...