unauthenticated path traversal in Metacat 2.x · Advisory · NCEAS/metacat
GitHub Security Advisory GHSA-m852-f287-7cgw from NCEAS project maintainer mbjones details CVE-2026-47754, an unauthenticated path traversal in Metacat versions 2.x through 2.19.1 and all 1.x. The ArchiveHandler.readArchiveEntry() method in the legacy action=read endpoint concatenates the user-supplied archiveEntryName parameter into a filesystem path without validation, and the surrounding hasReadPermission() check is commented out. An unauthenticated remote attacker can read any file accessible to the Tomcat process via a single GET request. Impact includes credential theft, client certificate and private key exfiltration enabling member node impersonation within the DataONE federation, and embargoed research data disclosure. The vulnerability was eliminated in Metacat 3.0.0 (April 2024) by removing the entire 1.x API via commit 07e034b, but no security advisory or CVE was issued at that time. The 2.x branch was not backported and remains vulnerable. The advisory provides detailed mitigation guidance including servlet-level workarounds for 2.x deployments. The advisory states PoC exploits have been demonstrated; this review does not independently verify exploitability.
Research notes
- Root causeArchiveHandler.readArchiveEntry() concatenates the user-supplied archiveEntryName parameter into a filesystem path without validation, and the surrounding hasReadPermission() check is commented out, enabling unauthenticated arbitrary file read.
- Technical detailThe vulnerability was eliminated in Metacat 3.0.0 (April 2024) by removing the entire 1.x API via commit 07e034b, but no security advisory or CVE was issued at that time; the 2.x branch was not backported and remains vulnerable.