CVE-2025-65026 json
esm.sh CDN service has JS Template Literal Injection in CSS-to-JavaScript
published 11mo ago modified 22d ago also GHSA-hcpf-qv9m-vfgp , GO-2025-4139 , EUVD-2025-198180
- cvss
- 6.1
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.5%
- EPSS 0.5% chance of exploitation in 30 days, percentile 44%
- public exploits
- 0
- none known
Summary
esm.sh is a nobuild content delivery network(CDN) for modern web development. Prior to version 136, The esm.sh CDN service contains a Template Literal Injection vulnerability (CWE-94) in its CSS-to-JavaScript module conversion feature. When a CSS file is requested with the ?module query parameter, esm.sh converts it to a JavaScript module by embedding the CSS content directly into a template literal without proper sanitization. An attacker can inject malicious JavaScript code using ${...} expressions within CSS files, which will execute when the module is imported by victim applications. This enables Cross-Site Scripting (XSS) in browsers and Remote Code Execution (RCE) in Electron applications. This issue has been patched in version 136.
Patch / fix
- go github.com/esm-dev/esm.sh 0.0.0-20251118065157-87d2f6497574
- esm esm.sh 136
- govulncheck-vulndb SLE Module for Package Hub 15 SP6, openSUSE Leap 15.6 0.0.20251209T172047-150000.1.127.1
suse advisories SUSE-SU-2025:4395-1
- govulncheck-vulndb openSUSE Leap 16.0 0.0.20260723T184607-160000.1.1
opensuse advisories openSUSE-SU-2026:21483-1
Is CVE-2025-65026 in your dependencies? Fencer shows which of your repositories are affected as soon as an advisory lands, and opens the fix as a pull request.
Check with FencerCISA SSVC
- Exploitation
- Proof of concept is public
- Automatable
- no
- Technical impact
- partial
- Assessed
- 11mo ago
Exploit prediction
0.51% chance of exploitation in the next 30 days, higher than 44% of all scored CVEs (FIRST EPSS, 2026-11-09).
Exploits and checks
- github.com https://github.com/esm-dev/esm.sh/security/advisories/GHSA-hcpf-qv9m-vfgp referenced PoC, tagged "exploit" by a source, unverified
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 6.1 | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N |
| NVD | 3.1 | 9.6 | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H |
| GitHub | 3.1 | 6.1 | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| go | github.com/esm-dev/esm.sh | <0.0.0-20251118065157-87d2f6497574 |
0.0.0-20251118065157-87d2f6497574 |
Affected products
- esm-dev esm.sh
Classification
References
-
github.com
/esm-dev/esm.sh/commit/87d2f6497574bf4448641a5527a3ac2beba5fd6c
web, patch
-
github.com
/esm-dev/esm.sh/security/advisories/GHSA-hcpf-qv9m-vfgp
exploit, web, vendor-advisory, advisory
-
nvd.nist.gov
/vuln/detail/CVE-2025-65026
advisory
-
github.com
/esm-dev/esm.sh
package
Sources
- CVE List CVE-2025-65026
- GitHub Advisory GHSA-hcpf-qv9m-vfgp
- NVD CVE-2025-65026
- OSV GO-2025-4139
Fencer Intel keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.