作者:空虚浪子心 出处:IT专家网
本篇是个分析POC的过程,压了N个月了,现在才发出来。使用分析出的POC,Tomcat除了最新的版本(具体见官网),以及JBOSS除了最新版本,都可以打,POC见文章。JBOSS官方已经偷偷发布了新版,其中包括漏洞修补,但是还没有发布公告。
这个漏洞真的够狠!只需要一个数据包,直接打死!见图,控制台信息。
虽然官方没给出POC,但是通过简单分析,就能搞出来!
(下图是TOMCAT受到攻击时爆的)
简单分析:
我看到官方补丁是这样打的。
这一句改为了
pluggableFilterIndex的值为
int类型的最大值,而一个int永远不会大于int类型的最大值,所以说,官方的补丁中,永远不希望程序能走到这里。
再看看另一个文件
加入了
if (buffered != null) {
的判断。
也就是说,只要我们发个数据包,让程序流程正常的走到这里。并且buffered是null,即可触发漏洞,它就挂了!
继续向前分析,通过几次debug,很容易定位只要满足两个条件,就可以走到这里:
1、http头上transfer-encoding: buffered
2、使用HTTP/1.1协议
POC
所以随便一台tomcat,非最新版的就可以,之后发包(POC),这都是head头:
经过我测试,换了两个tomcat6.X的版本,都是直接挂掉!
我们看下异常信息(这个是JBOSS爆的):
是org.apache.coyote.http11.filters.BufferedInputFilter出的异常。
经过我后来测试发现,JBOSS也存在这个漏洞,原因是JBOSS也使用了这个包,它的核心本就是tomcat的!打了JBOSS后,有时候还会造成JBOSS重启,如果第一个包没打死,就不断的发几十个包,回头看看,已经死了,效果非常明显!
官方推荐使用:
apache-tomcat-6.0.28 经过我测试,不受影响。
apache-tomcat-5.5.30 经过我测试,不受影响。
官方描述漏洞时提到,说如果前端使用apache代理,就不会有问题,原理是apache遇到这个header直接就被拦截,然后返回错误了。
但是这也许并不是绝对安全,如果有apache和tomcat对某些字符含义,理解的不一致,或者中间层有字符过滤的mod之类,也许会被绕过。这个纯属YY。
我测试过的版本:
apache-tomcat-5.5.29 经过我的测试,一打就挂!
apache-tomcat-6.0.26 经过我的测试,打了好像没挂,但是报异常了,之后所有的正常访问,都会报控制台异常,我相信它也坚持不了多长时间,轮训打就会挂。
Tomcat某6.x以及某5.x版本,也是直接挂,我忘了版本号了。如果你的是嵌入式系统里安装了tomcat对外服务,就自求多福吧。
jboss-6.0.0.20100429-M3 一打就挂,不断的打,会重启!
具体现象:
先是无法访问,之后是tomcat不知道从哪里弄来的文件,直接展示了。
每次刷新都会变文件内容,无论怎么显示,都不是正常页面,应该是buffer挂了!
下图应该是个htm的,但是我直接访问,没有看源码,就是这样的页面。
补丁和描述以及解决办法就不说了,见官方公告。
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-2227
http://tomcat.apache.org/security-6.html
JBOSS偷偷上了补丁的版本:
http://repository.jboss.org/jboss/web/2.0.0.GA_CP14-brew/src/
0 条评论。