标签 XXE漏洞 下的文章

1漏洞描述 看到微步等厂商发了 Struts2 S2-069 的通告

image.png

2漏洞分析 补丁里设置了禁用外部实体解析

image.png

查看该 DomHelper.parse() 方法,直接使用了默认javax.xml.parsers.SAXParserFactory,典型的xxe

Plain Text

复制代码
public static Document parse(InputSource inputSource) {
return parse(inputSource, null);
}
parse(InputSource inputSource, Map<String, String> dtdMappings) {
SAXParserFactory factory = null;
String parserProp = System.getProperty("xwork.saxParserFactory");
if (parserProp != null) {
try {
ObjectFactory objectFactory = ActionContext.getContext().getContainer().getInstance(ObjectFactory.class);
Class clazz = objectFactory.getClassInstance(parserProp);
factory = (SAXParserFactory) clazz.newInstance();
} catch (Exception e) {
LOG.error("Unable to load saxParserFactory set by system property 'xwork.saxParserFactory': {}", parserProp, e);
}
}

if (factory == null) {
factory = SAXParserFactory.newInstance(); // 使用默认 SAXParserFactory
}

factory.setValidating((dtdMappings != null));
factory.setNamespaceAware(true);

SAXParser parser;
try {
parser = factory.newSAXParser();
} catch (Exception ex) {
throw new StrutsException("Unable to create SAX parser", ex);
}
DOMBuilder builder = new DOMBuilder();

// Enhance the sax stream with location information
ContentHandler locationHandler = new LocationAttributes.Pipe(builder);
try {
parser.parse(inputSource, new StartHandler(locationHandler, dtdMappings));
} catch (Exception ex) {
throw new StrutsException(ex);
}
return builder.getDocument();
}

3环境搭建 创建一个XXEActin 调用 com.opensymphony.xwork2.util.DomHelper.parse 解析传入的 xml 即可

4漏洞复现

image.png

5影响范围 struts 框架默认不受影响,com.opensymphony.xwork2.util 只是一个工具类,DomHelper.parse 需要开发者显式调用,因此影响范围较小 6参考链接 https://issues.apache.org/jira/browse/WW-5252 https://github.com/apache/struts/commit/6658c6360e771a793ab261e5b4d3ed9dfb6720d3#diff-fbc632eaf4a09c1feac83796f72802d9e332dbb680473b1c6f3add6ad8946495R105

全球最热门的 Java Web 框架之一曝出底层新漏洞。ZAIT.AI 的安全研究人员发现,Apache Struts 2 存在一个 **“重要级别” 高危漏洞 **,攻击者可利用该漏洞窃取敏感数据,或对企业应用发起破坏性极强的拒绝服务攻击(DoS)。
该漏洞编号为 CVE-2025-68493,攻击目标直指 XWork 组件 —— 这是支撑 Struts 框架运行的命令模式核心组件。漏洞根源在于 XML 配置文件处理机制存在缺陷,导致系统完全暴露在XML 外部实体注入(XXE)攻击的风险之下。
从本质来看,该漏洞是数据验证机制失效所致。研究报告指出,“XWork 组件对 XML 配置文件的解析过程未采取合规的验证措施”,这为攻击者注入恶意外部实体开辟了可乘之机。
当应用程序处理被篡改的 XML 文件时,可能会被诱骗去加载外部恶意资源。此漏洞可能引发三重安全隐患:“数据泄露、拒绝服务攻击、服务器端请求伪造(SSRF)”
这意味着攻击者可强制服务器泄露本地文件,或通过耗尽系统资源导致服务瘫痪,甚至能绕过防火墙,向内部隐藏系统发起未授权访问请求。
该漏洞的影响范围极为广泛,波及多个版本的 Struts 框架,包括已停止支持(EOL)的旧版本。受影响软件版本如下:
  • Struts 2.0.0 至 2.3.37(已停止支持)
  • Struts 2.5.0 至 2.5.33(已停止支持)
  • Struts 6.0.0 至 6.1.0
Apache Struts 官方团队建议各机构 **“至少升级至 Struts 6.1.1 版本”**,以彻底修复该安全漏洞。值得庆幸的是,报告指出 “此次版本更新具备向后兼容性”,意味着升级操作不会导致现有应用程序出现故障。
对于暂时无法立即升级的旧版本用户,官方也提供了应急解决方案。缓解措施包括:使用自定义的 SAXParserFactory 组件并禁用外部实体功能;或通过 JVM 级别的配置项阻断外部 DTD 与 Schema 访问,例如设置系统属性 -Djavax.xml.accessExternalDTD=""


组件简介

Apache Struts 是一个用于创建 Java Web 应用程序的免费开源 Web 框架。

复现版本

6.0.3

分析过程

image.png



应该是这个洞



6.1.0 和 6.1.1 的 diff 没看出来哪儿修了

https://github.com/apache/struts/pull/628/commits/6658c6360e771a793ab261e5b4d3ed9dfb6720d3

image.png



从这来看 6.1.0 已经修了 不在影响范围内

image.png







首先是 xwork 组件

DomHelper#parse

在 6.0.3 中是没有关闭外部实体解析的

image.png



最终会调到JAXPSAXParser#parse







复现过程如下

image.png



修复后(6.1.0)

image.png











参考

https://github.com/apache/struts/pull/628/commits/6658c6360e771a793ab261e5b4d3ed9dfb6720d3

https://cwiki.apache.org/confluence/display/WW/S2-069