最新消息:

通过构造Hash冲突实现各种语言的拒绝服务攻击

apache admin 2962浏览 0评论

上周的时候Dmitry突然在5.4发布在即的时候, 引入了一个新的配置项:

Added max_input_vars directive to prevent attacks based on hash collisions

这个预防的攻击, 就是”通过调用Hash冲突实现各种语言的拒绝服务攻击漏洞”(multiple implementations denial-of-service via hash algorithm collision).

攻击的原理很简单, 目前很多语言, 使用hash来存储k-v数据, 包括常用的来自用户的POST数据, 攻击者可以通过构造请求头, 并伴随POST大量的特殊的”k”值(根据每个语言的Hash算法不同而定制), 使得语言底层保存POST数据的Hash表因为”冲突”(碰撞)而退化成链表.

这样一来, 如果数据量足够大, 那么就可以使得语言在计算, 查找, 插入的时候, 造成大量的CPU占用, 从而实现拒绝服务攻击.

PHP5.4是通过增加一个限制来尽量避免被此类攻击影响:

  - max_input_vars - specifies how many GET/POST/COOKIE input variables may be
    accepted. default value 1000.

目前已知的受影响的语言以及版本有::

Java, 所有版本

JRuby <= 1.6.5

PHP <= 5.3.8, <= 5.4.0RC3

Python, 所有版本

Rubinius, 所有版本

Ruby <= 1.8.7-p356

Apache Geronimo, 所有版本

Apache Tomcat <= 5.5.34, <= 6.0.34, <= 7.0.22

Oracle Glassfish <= 3.1.1

Jetty, 所有版本

Plone, 所有版本

Rack, 所有版本

V8 JavaScript Engine, 所有版本

不受此影响的语言或者修复版本的语言有::

PHP >= 5.3.9, >= 5.4.0RC4

JRuby >= 1.6.5.1

Ruby >= 1.8.7-p357, 1.9.x

Apache Tomcat >= 5.5.35, >= 6.0.35, >= 7.0.23

Oracle Glassfish, N/A (Oracle reports that the issue is fixed in the main codeline and scheduled for a future CPU)

CVE: CVE-2011-4885 (PHP), CVE-2011-4461 (Jetty), CVE-2011-4838 (JRuby), CVE-2011-4462 (Plone), CVE-2011-4815 (Ruby)

原文: http://www.ocert.org/advisories/ocert-2011-003.html


Comments

  • 2011/12/29, sunvince writes: 好想法…
  • 2011/12/29, aries writes: 这个,现在有可行的方法来构造大量hash值相同的不同原文?
  • 2011/12/30, Ferrari writes: 請問這篇的作者解釋的是同一個問題嗎?
    http://nikic.github.com/2011/12/28/Supercolliding-a-PHP-array.html
  • 2011/12/30, 神仙 writes: 如果是用的rbtree之类就不会有这麻烦了吧
  • 2011/12/30, 雪候鸟 writes: @Ferrari 恩,是一样的事情, 🙂
  • 2011/12/30, PHP数组的Hash冲突实例 | 风雪之隅 writes: […] […]
  • 2011/12/30, kim writes: 这不是基本上全部中招?
  • 2011/12/30, mahone writes: max_input_vars – specifies how many GET/POST/COOKIE input variables may be
    accepted. default value 1000.

    这个1000,是get,post,cookie这种加起来一共1000?还是get1000,post1000,cookie1000?

  • 2011/12/30, jw writes: hi,niaoge
    为啥不在每个bucket中加个指针指向链表结尾来解决问题,而是采用限制输入长度的方案
    thx
  • 2011/12/30, PHP5.2.*防止Hash冲突拒绝服务攻击的Patch | 风雪之隅 writes: […] Posts:PHP数组的Hash冲突实例通过构造Hash冲突实现各种语言的拒绝服务攻击更简单的重现PHP Core的调用栈GBK编码PHP脚本导致语法错误(Zend […]
  • 2011/12/30, 高危安全:Hash冲突导致PHP/JAVA/PYTHON等DDOS攻击 | 网站那些事 | 网站点兵 writes: […] 高危安全:Hash冲突导致PHP/JAVA/PYTHON等DDOS攻击 作者: xiuwz 日期: 2011 年 12 月 30 日 发表评论 (0) 查看评论 (No Ratings Yet)  Loading … 分享到: 更多 国外目前报出“multiple implementations denial-of-service via hash algorithm collision”,该hash冲突漏洞对目前所有的WEB动态开发语言都有危害,导致一个用户可以轻松通过构造数据而造成任何网站拒绝服务,从而引发DDOS相关攻击。中文版介绍请参考http://www.laruence.com/2011/12/29/2412.html。 […]
  • 2011/12/30, 关于最近PHP的Array爆出的冲突问题 | 东海博客 writes: […] 原理(详见:http://www.laruence.com/2011/12/29/2412.html) […]
  • 2011/12/31, PHP数组特殊Hash冲突问题 writes: […] 通过构造Hash冲突实现各种语言的拒绝服务攻击 PHP数组的Hash冲突实例 深入理解PHP之数组(遍历顺序) Supercolliding a PHP array 哈希表(HashTable) PHP的哈希表实现   If you enjoyed this article, please consider sharing it! […]
  • 2011/12/31, Hash表碰撞导致dos攻击 | 亿光年 writes: […] http://www.laruence.com/2011/12/29/2412.html […]

Copyright © 2010 风雪之隅 版权所有, 转载务必注明. 该Feed只供个人使用, 禁止未注明的转载或商业应用. 非法应用的, 一切法律后果自负. 如有问题, 可发E-mail至my at laruence.com.(Digital Fingerprint: 73540ba0a1738d7d07d4b6038d5615e2)

Related Posts:

转载请注明:爱开源 » 通过构造Hash冲突实现各种语言的拒绝服务攻击

您必须 登录 才能发表评论!