/geoserver/web/ Web access log Triage: medium Known exploited (CISA KEV)

GET /geoserver/web/ Requests in Your Logs: Scanning for GeoServer

Published

An automated check for whether a GeoServer instance is reachable on this host, usually as the first step before an attacker tries the OGC endpoints that CVE-2024-36401 abuses.

What it looks like

203.0.113.7 - - [18/Oct/2026:03:51:11 +0000] "GET /geoserver/web/ HTTP/1.1" 404 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
198.51.100.42 - - [18/Oct/2026:03:51:12 +0000] "GET /geoserver/ HTTP/1.1" 404 162 "-" "python-requests/2.31.0"
192.0.2.88 - - [18/Oct/2026:04:12:03 +0000] "GET /geoserver/web/wicket/bookmarkable/org.geoserver.web.AboutGeoServerPage HTTP/1.1" 404 162 "-" "Go-http-client/2.0"

On our own server, the 30 days to 18 October 2026

63

requests · about 2.1 a day

37

source addresses

Most requested variantsRequests
/geoserver/web/52
/geoserver/index.html4
/geoserver/4
/geoserver/web/wicket/bookmarkable/org.geoserver.web.AboutGeoServerPage3

LogTriage's production API server (Hetzner, Germany): port 22 open to the internet, key-only since 6 October 2026 (password and keyboard-interactive authentication off); nginx in front of the API on ports 80 and 443. Paths as requested, query strings dropped and identifiers redacted; counted weekly from the nginx access log. More in the monthly attack report.

The vulnerability it targets

CVE-2024-36401 CVSS 3.1 9.8 critical CISA KEV since July 15, 2024

OSGeo · GeoServer — OSGeo GeoServer GeoTools Eval Injection Vulnerability

GeoServer is an open source server that allows users to share and edit geospatial data. Prior to versions 2.22.6, 2.23.6, 2.24.4, and 2.25.2, multiple OGC request parameters allow Remote Code Execution (RCE) by unauthenticated users through specially crafted input against a default GeoServer installation due to unsafely evaluating property names as XPath expressions. The GeoTools library API that GeoServer calls evaluates property/attribute names for feature types in a way that unsafely passes them to the commons-jxpath library which can execute arbitrary code when evaluating XPath expressions. This XPath evaluation is intended to be used only by complex feature types (i.e., Application Schema data stores) but is incorrectly being applied to simple feature types as well which makes this vulnerability apply to **ALL** GeoServer instances. No public PoC is provided but this vulnerability has been confirmed to be exploitable through WFS GetFeature, WFS GetPropertyValue, WMS GetMap, WMS GetFeatureInfo, WMS GetLegendGraphic and WPS Execute requests. This vulnerability can lead to executing arbitrary code. Versions 2.22.6, 2.23.6, 2.24.4, and 2.25.2 contain a patch for the issue. A workaround exists by removing the `gt-complex-x.y.jar` file from the GeoServer where `x.y` is the GeoTools version (e.g., `gt-complex-31.1.jar` if running GeoServer 2.25.1). This will remove the vulnerable code from GeoServer but may break some GeoServer functionality or prevent GeoServer from deploying if the gt-complex module is needed.

NVD description, quoted verbatim · published July 1, 2024

CISA required action: Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.

Sources: NVD and CISA's Known Exploited Vulnerabilities catalog, re-checked weekly.

What the request is

GeoServer is an open source server for sharing and editing geospatial data, usually deployed as a Java web application under the context path /geoserver. Its browser administration interface is an Apache Wicket application served from /geoserver/web/, which is why that single path is the overwhelming favourite in this scan: one GET tells a crawler whether the product is installed, without needing credentials to see the login screen.

The other counted variants do the same job slightly differently. /geoserver/ and /geoserver/index.html are the context root, which a normal install redirects into the web UI. /geoserver/web/wicket/bookmarkable/org.geoserver.web.AboutGeoServerPage is the Wicket bookmarkable URL for the About GeoServer screen, the page that reports the running build — a version fingerprint, if the deployment’s security configuration lets it be rendered without a login.

None of these requests is itself an exploit. They are identification. The reason they matter is the vulnerability detailed above: CVE-2024-36401 lets unauthenticated users reach code execution on a default installation, and it is in CISA’s Known Exploited Vulnerabilities catalog. Mass scanners enumerate hosts that answer on /geoserver/web/ first, then come back against the OGC endpoints. A 404 ends the story; a 200 puts you on a target list.

Who sends it

Internet-wide scanners sweeping whole address ranges, exploitation botnets that chain discovery straight into an attempt against a known-exploited bug, and research crawlers that publish inventories of exposed software. Nothing about receiving these requests means your organisation was chosen.

The user agent is not evidence: some clients declare an HTTP library such as python-requests or Go-http-client, many copy a current Chrome string. The shape of the traffic is more reliable — a handful of paths from one address within a second or two, no Referer, no requests for CSS, JavaScript or images, and a quick move on to the next product’s well-known path once these return 404.

Is your server exposed?

Start with what your logs already recorded, then ask the host itself:

# Every /geoserver path in the log, with the status it received
awk 'tolower($7) ~ /\/geoserver/ {print $9, $7}' /var/log/nginx/access.log \
  | sort | uniq -c | sort -rn | head -20

# Anything that was NOT 404/403 - this is the list that matters
awk 'tolower($7) ~ /\/geoserver/ && $9 !~ /^(404|403)$/' /var/log/nginx/access.log

# Ask your own server, from your own server, and read the status code
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1/geoserver/web/
curl -s -o /dev/null -w '%{http_code}\n' -H 'Host: maps.example.com' http://127.0.0.1/geoserver/

# If GeoServer IS installed: which GeoTools build is deployed?
ls /opt/geoserver/webapps/geoserver/WEB-INF/lib/gt-complex-*.jar 2>/dev/null

Repeat the curl check with the Host header of every vhost you serve, including staging and internal names — a forgotten proxy rule on a secondary vhost is the usual way an instance stays reachable. Give rotated logs the same awk pass, because an exposure may already have been used before it was closed.

If an instance does answer, the only durable answer is the version. Compare it against the patched releases named in the CVE text and upgrade; the documented jar-removal workaround carries the vendor’s own warning that it may break functionality.

How to block it

If you do not run GeoServer, make the 404 cheap and silent in every server block:

# Not our software: answer 404 without touching the backend or the log
location ^~ /geoserver {
    access_log off;
    log_not_found off;
    return 404;
}

If you do run it behind nginx, put the administration interface behind an allowlist so the login page is not internet-facing:

location ^~ /geoserver/web/ {
    allow 10.0.0.0/8;
    allow 192.0.2.0/24;      # VPN egress
    deny all;
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
}

Treat that as hardening of the console only. The OGC request types the CVE names are served from other paths, so restricting /geoserver/web/ reduces who can reach the admin UI but does not remove the vulnerable code — patching to a fixed release does. Blocking the scanning addresses is not worth the effort either: the source pool rotates constantly and the traffic is aimed at ranges, not at you.

Probes that arrive with it

Detect it

MITRE ATT&CK: T1595.002T1595.003T1190

Frequently Asked Questions

We do not run GeoServer and everything returned 404. Is there anything to do?
No incident, and nothing was served. This is untargeted scanning for a reachable GeoServer and it will not stop. The useful work is to confirm no vhost, reverse-proxy rule or container in your estate forwards /geoserver/ anywhere, and to alert on any response to these paths that is not 404 or 403 rather than on the requests themselves.
Does blocking /geoserver/web/ protect us from CVE-2024-36401?
No. The admin web UI is only how scanners find the product. According to the CVE description the flaw is reached through OGC requests such as WFS GetFeature, WFS GetPropertyValue, WMS GetMap, WMS GetFeatureInfo, WMS GetLegendGraphic and WPS Execute, which live under other paths, so an allowlist on the UI leaves the vulnerable surface open. Patching is the fix.
Which GeoServer versions are fixed?
The CVE text names 2.22.6, 2.23.6, 2.24.4 and 2.25.2 as the releases containing the patch, so anything older in those branches is affected. A workaround is also documented: removing the gt-complex-x.y.jar file, with the caveat in the CVE text that it may break functionality or stop GeoServer deploying if that module is needed.
A /geoserver/ request returned 200 or 302. What now?
Then something on that address answers for GeoServer, even if you did not know about it. Identify the backend from your proxy configuration, establish the exact running version, and compare it against the patched releases before anything else. Then review the access log for the same source addresses making OGC requests with unusual parameters, and treat an unpatched internet-facing instance as a potential compromise rather than a pending patch.

See what else is probing your server

Drop an nginx or Apache access log into the free browser analyzer: secret-file sweeps, exploit probes, scanners and credential stuffing are grouped by source with the evidence lines, and every known probe links back here. Nothing is uploaded.