Critical severity · published Nov 19, 2025
CVE-2025-65026
esm.sh CDN service has JS Template Literal Injection in CSS-to-JavaScript
9.6
CVSS
0.5%
EPSS
No
On KEV
Description
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.
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
Attack vector
Network
Complexity
Low
Privileges
None
User interaction
Required
Confidentiality
High
Integrity
High
Availability
High
Scope
Changed
Exploitation
Is it being used?
Exploit prediction (EPSS)0.5% · higher than 44% of CVEs
Exploited in the wildNo evidence yet
CISA KEVNot listed
Ransomware campaign useNot known
Affected products
Which versions
ES
esm.sh · esm-dev
< 136 · source: vendor, NVD
References
NVD
https://nvd.nist.gov/vuln/detail/CVE-2025-65026
CVE.org
https://www.cve.org/CVERecord?id=CVE-2025-65026
Patch
https://github.com/esm-dev/esm.sh/commit/87d2f6497574bf4448641a5527a3ac2beba5fd6c
Exploit
https://github.com/esm-dev/esm.sh/security/advisories/GHSA-hcpf-qv9m-vfgp
More from esm.sh
9.8
CVE-2025-65025
esm.sh CDN service has arbitrary file write via tarslip
8.7
CVE-2026-44593
esm.sh: Legacy Route Path Traversal Can Lead to RCE
7.7
CVE-2025-59341
Local File Inclusion in esm.sh
7.5
CVE-2026-44594
esm.sh: Path Traversal via package.json browser field allows reading arbitrary server files
7.5
CVE-2026-27730
esm.sh has SSRF localhost/private-network bypass in `/http(s)` module route
