通过调用Hash冲突实现各种语言的拒绝服务攻击漏洞
上周的时候Dmitry突然在5.4发布在即的时候, 引入了一个新的配置项:
- Added max_input_vars directive to prevent attacks based on hash collision
这个预防的攻击, 就是”通过调用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
建议继续学习:
- HashMap解决hash冲突的方法 (阅读:11325)
- 关于memcache分布式一致性hash (阅读:10712)
- MinHash原理与应用 (阅读:5931)
- LVS hash size解决4096个并发的问题 (阅读:5442)
- 无锁HashMap的原理与实现 (阅读:5464)
- 如果用户在5分钟内重复上线,就给他发警告,问如何设计? (阅读:4886)
- Ubuntu 下Hash校验和不符问题的解决 (阅读:4592)
- 分布式系统hash策略 (阅读:3776)
- redis源代码分析 - hash table (阅读:3591)
- 一致性hash算法 (阅读:3410)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:雪候鸟 来源: 风雪之隅
- 标签: Hash
- 发布时间:2012-01-03 23:41:48
- [69] Twitter/微博客的学习摘要
- [67] IOS安全–浅谈关于IOS加固的几种方法
- [65] android 开发入门
- [65] 如何拿下简短的域名
- [63] find命令的一点注意事项
- [62] Go Reflect 性能
- [61] 流程管理与用户研究
- [60] Oracle MTS模式下 进程地址与会话信
- [59] 图书馆的世界纪录
- [57] 读书笔记-壹百度:百度十年千倍的29条法则