CVE-2026-23644
published 2026-01-18CVE-2026-23644: esm.sh is a no-build content delivery network (CDN) for web development. Prior to Go pseeudoversion 0.0.0-20260116051925-c62ab83c589e, the software has a path…
PriorityP346high7.5CVSS 3.1
AVNACLPRNUINSUCNIHAN
EPSS
0.48%
37.6th percentile
esm.sh is a no-build content delivery network (CDN) for web development. Prior to Go pseeudoversion 0.0.0-20260116051925-c62ab83c589e, the software has a path traversal vulnerability due to an incomplete fix. `path.Clean` normalizes a path but does not prevent absolute paths in a malicious tar file. Commit https://github.com/esm-dev/esm.sh/commit/9d77b88c320733ff6689d938d85d246a3af9af16, corresponding to pseudoversion 0.0.0-20260116051925-c62ab83c589e, fixes this issue.
Affected
4 ranges
| Vendor | Product | Version range | Fixed in |
|---|---|---|---|
| esm-dev | esm.sh | < 0.0.0-20260116051925-c62ab83c589e | 0.0.0-20260116051925-c62ab83c589e |
| esm | esm.sh | < 136 | 136 |
| github.com | esm-dev_esm.sh | >= 0 < 0.0.0-20260116051925-c62ab83c589e | 0.0.0-20260116051925-c62ab83c589e |
| github.com | esm-dev_esm.sh | 0.0.1 – 136 | — |
CVSS provenance
nvdv3.17.5HIGHCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
nvdv4.07.7HIGHCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:P/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Stop checking back — get the weekly exploitation signal.
Every Monday: what got weaponized or added to CISA KEV in the last seven days — each CVE cross-linked to its PoC, Nuclei template, and detection rule. Free, one email a week, unsubscribe in one click.
OSV
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
osv·2026-02-26
CVE-2026-23644 esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
OSV
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
osv·2026-01-20
CVE-2026-23644 [HIGH] esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
### Summary
The [commit](https://github.com/esm-dev/esm.sh/commit/9d77b88c320733ff6689d938d85d246a3af9af16) does not actually fix the path traversal bug. `path.Clean` basically normalizes a path but does not prevent absolute paths in a malicious tar file.
### PoC
This test file can demonstrate the basic idea pretty easily:
```go
package server
import (
"archive/tar"
"bytes"
"compress/gzip"
"testing"
)
// TestExtractPackageTarball_PathTraversal tests the extractPackageTarball function
// with a malicious tarball containing a path traversal attempt
func TestExtractPackageTarball_PathTraversal(t *testing.T) {
// Create a temporary directory for testing
installDir := "./testdata/good"
// Cr
GHSA
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
ghsa·2026-01-20
CVE-2026-23644 [HIGH] CWE-22 esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
esm.sh has a path traversal in extractPackageTarball enables file writes from malicious packages
### Summary
The [commit](https://github.com/esm-dev/esm.sh/commit/9d77b88c320733ff6689d938d85d246a3af9af16) does not actually fix the path traversal bug. `path.Clean` basically normalizes a path but does not prevent absolute paths in a malicious tar file.
### PoC
This test file can demonstrate the basic idea pretty easily:
```go
package server
import (
"archive/tar"
"bytes"
"compress/gzip"
"testing"
)
// TestExtractPackageTarball_PathTraversal tests the extractPackageTarball function
// with a malicious tarball containing a path traversal attempt
func TestExtractPackageTarball_PathTraversal(t *testing.T) {
// Create a temporary directory for testing
installDir := "./testdata/good"
// Cr
No detection rules found.
No public exploits indexed.
2026-01-18
Published