Tomcat远程拒绝服务漏洞分析(CVE-2010-2227)

作者:空虚浪子心      出处:IT专家网

  本篇是个分析POC的过程,压了N个月了,现在才发出来。使用分析出的POC,Tomcat除了最新的版本(具体见官网),以及JBOSS除了最新版本,都可以打,POC见文章。JBOSS官方已经偷偷发布了新版,其中包括漏洞修补,但是还没有发布公告。

  这个漏洞真的够狠!只需要一个数据包,直接打死!见图,控制台信息。

  虽然官方没给出POC,但是通过简单分析,就能搞出来!

  (下图是TOMCAT受到攻击时爆的)

 1.jpg

  简单分析:

  我看到官方补丁是这样打的。

  http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11AprProcessor.java?r1=952026&r2=958977&pathrev=958977&diff_format=h

2.jpg

  这一句改为了

3.jpg

  pluggableFilterIndex的值为

 4.jpg

int类型的最大值,而一个int永远不会大于int类型的最大值,所以说,官方的补丁中,永远不希望程序能走到这里。

  再看看另一个文件

  http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/filters/BufferedInputFilter.java?r1=533164&r2=958977&pathrev=958977&diff_format=h

  加入了

  if (buffered != null) {

  的判断。

  也就是说,只要我们发个数据包,让程序流程正常的走到这里。并且buffered是null,即可触发漏洞,它就挂了!

  继续向前分析,通过几次debug,很容易定位只要满足两个条件,就可以走到这里:

  1、http头上transfer-encoding: buffered

  2、使用HTTP/1.1协议

  POC

  所以随便一台tomcat,非最新版的就可以,之后发包(POC),这都是head头:

5.jpg

  经过我测试,换了两个tomcat6.X的版本,都是直接挂掉!

  我们看下异常信息(这个是JBOSS爆的):

6.jpg

  是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的,但是我直接访问,没有看源码,就是这样的页面。

7.jpg

  补丁和描述以及解决办法就不说了,见官方公告。

  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/

发表评论?

12 条评论。

  1. 嗝儿~                                         

  2. 测试了一下,不成功呢。

    能否讲一下详细的测试步骤。

  3. 回3sword:
    测试步骤1:去tomcat.apache.org找受影响的版本。
    测试步骤2:跑起来,然后nc -vv localhost 8080

  4. 试了两个版本6.0.18和5.5.26都没有成功。是用的这个步骤,不知道哪里不正确。
    nc -vv 192.168.233.132 8080 http://localhost:8080 HTTP/1.1
    transfer-encoding:buffered

  5. 笔误,已经换了的,呵呵。

  6. 我是测试了本地和远程的都不行

    下午再下载一个作者相同的版本试试。

  7. 我又看了下。楼上的包有问题,最后少了个换行
    刚刚下载的
    http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.zip
    一下就打死了。

  8. HTTP/1.1 505 HTTP Version Not Supported
    Server: Apache-Coyote/1.1

    没效果 郁闷

  9. http://archive.apache.org/dist/tomcat/tomcat-6/v6.0.18/bin/apache-tomcat-6.0.18.zip
    tomcat下的这个6.0.18

    3.txt里内容
    GET http://10.0.0.4:8080 HTTP/1.1
    transfer-encoding:buffered(这里换了下行)

    G:\>nc -vv 10.0.0.4 8080 < 3.txt EVIL [10.0.0.4] 8080 (?) open sent 63, rcvd 0: NOTSOCK 对方一点反应也没有,哪里错了吗?

  10. 回wag:
    多打几次,由于是buffer,所以有时候不稳定。
    另外,从返回结果看不出它挂了,要用浏览器访问,就能看到不正常了。

  11. 恩 好的,谢谢了。

    另外,预祝你乌云注册成功 呵呵

发表评论