XML 外部实体
日期
2013 年 9 月 20 日
描述
在 Play 的 XML 处理中发现了一个漏洞。
攻击者可以使用 XML 外部实体从文件系统、内部网络读取文件或对应用程序进行拒绝服务攻击。
影响
任何使用默认任何内容解析器或专门使用 XML 解析器的应用程序都可能存在漏洞。
受影响的版本
- Play 2.1.0 - 2.1.4
- Play 2.0 - 2.0.7
解决方法
更改 JDK 使用的默认 SAXParserFactory
实现,使其禁用外部实体。
例如,如果使用 Oracle JDK,请将以下类添加到您的应用程序中
package xml;
import org.xml.sax.*;
import javax.xml.parsers.*;
public class SecureSAXParserFactory extends SAXParserFactory {
private final SAXParserFactory platformDefault = new com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl();
public SecureSAXParserFactory() throws SAXNotSupportedException, SAXNotRecognizedException, ParserConfigurationException {
platformDefault.setFeature("http://xml.org/sax/features/external-general-entities", false);
platformDefault.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
platformDefault.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
}
public SAXParser newSAXParser() throws ParserConfigurationException, SAXException {
return platformDefault.newSAXParser();
}
public void setFeature(String name, boolean value) throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException {
platformDefault.setFeature(name, value);
}
public boolean getFeature(String name) throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException {
return platformDefault.getFeature(name);
}
}
然后在生产模式下启动应用程序时,将以下系统属性添加到命令行参数中
-Djavax.xml.parsers.SAXParserFactory=xml.SecureSAXParserFactory
修复
升级到以下适当的版本
CVSS 指标 (更多信息)
- 基础:6.4
AV:N/AC:L/Au:N/C:P/I:N/A:P - 时间:5.0
E:POC/RL:OF/RC:C - 环境:5.6
CDP:ND/TD:H/CR:H/IR:H/AR:ND
环境得分假设典型的互联网系统。您组织的实际环境得分可能会有所不同。
致谢
发现此漏洞的功劳归于澳大利亚邮政数字邮箱安全团队和http://www.ubercomp.com/的Reginaldo Silva。