XML 实体会引起 REXML 中一种新的 DoS 攻击。定义并使用递归嵌套实体的文档会造成实体的过度膨胀(escessive espansion),最终导致应用程序的瘫痪。Rails 的这个问题尤为明显,因为它是通过 REXML 解析进来的 XML 请求。因为这种情况默认就会发生,并且根据请求的文档类型儿有所差异,所以这种攻击对所有 Rails 应用都是一种威胁,除非那些应用禁用了自动处理用户 XML 的功能。
现在,所有 1.86-p287、1.97-p72 和 1.9.x 版本的 Ruby 都会存在这个问题。对当前的 JRuby 1.1.x 版本做了一个小测试,用它来解析某个 XML 文档样本,结果抛出了OutOfMemoryError 错误。(注意:这个问题只有在实体扩张时才会被触发,普通的解析是不会产生任何问题的──必须在能读取包含实体的文本节点时候才会发生这个问题)。
在未给 REXML 打补丁之前,是通过给 REXML 模块中的文档和实体类打动态补丁来弥补这个漏洞的。这个补丁主要是限制(此限制是可调的)了膨胀实体的数量,当超过了这个数量,则会抛出一个异常。
此漏洞的安全说明页面介绍了如何打补丁,从而确保不同版本的Rails 都适用。
查看英文原文: Critical REXML DoS Found - Monkey Patch Available as Fix
评论