CVE-2025-54313
High · 7.5 CISA KEVeslint-config-prettier, eslint-plugin-prettier, synckit, @pkgr/core, napi-postinstall have embedded malicious code
CVSS
7.5
EPSS
5.1%
Published
Jul 19, 2025
CISA due date
Feb 12, 2026
Cloudanix analysis
A trusted software dependency was poisoned so that installing certain versions could run malware on Windows build or developer machines.
- Exploitation
- Supply Chain
- Attacker needs
- User Interaction
- Complexity
- Low
- Impact
- Remote Code Execution
- Component
- Library
- Class
- Malicious Package
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Medium
What it actually does
This is a software supply-chain compromise in the npm package eslint-config-prettier. Specific published versions contain malicious install-time code: 8.10.1, 9.1.1, 10.1.6, and 10.1.7. When one of these versions is installed, the package executes an install.js lifecycle script. On Windows systems, that script launches a malicious DLL named node-gyp.dll, resulting in code execution in the context of the user, developer workstation, build runner, or CI process performing the install. The primary technical risk is arbitrary malware execution during dependency installation rather than exploitation of a running network service.
Why it matters to the business
Organizations that build, test, or deploy software using affected dependency versions may have exposed developer workstations, CI/CD runners, build artifacts, source repositories, credentials, signing keys, package-publishing tokens, and deployment secrets. Because this issue is listed in CISA KEV, is marked as actively exploited in the wild, and has a remediation due date of 2026-02-12, it should be treated as an urgent supply-chain incident rather than a routine dependency update. Even if production applications are not directly vulnerable at runtime, compromised build systems can lead to credential theft, malicious releases, tampered artifacts, and downstream customer impact.
How an attack unfolds
An attacker compromises or publishes malicious versions of eslint-config-prettier to the package ecosystem. A developer workstation, automated build job, dependency update bot, container build, or CI pipeline resolves and installs one of the malicious versions. During installation, npm executes the package lifecycle script install.js. On Windows hosts, the script launches the embedded node-gyp.dll malware. The malware then runs with the privileges and environment access of the install process, which may include source code access, npm tokens, Git credentials, cloud credentials, CI secrets, signing materials, or deployment permissions. The attacker can use that access to steal secrets, persist on the host, tamper with builds, publish further malicious packages, or move laterally into adjacent development and delivery infrastructure.
How to fix it
Immediately remove affected eslint-config-prettier versions 8.10.1, 9.1.1, 10.1.6, and 10.1.7 from all dependency manifests, lockfiles, caches, build images, developer workstations, and artifact repositories. Upgrade to a known-good version outside the malicious version set and regenerate lockfiles from trusted sources. Where applicable, apply the fixed downstream package versions provided: intel-ucode (Alpaquita:23) fixed in 20241112-r0; intel-ucode (Alpaquita:stream) fixed in 20241112-r0; homarr-labs/homarr fixed in commit fd62524db309429db1f233b1d0feb8e6ab4efd2d. Purge local and centralized npm caches that may contain the malicious tarballs. Rebuild affected containers and CI images from clean bases. Rotate credentials that may have been exposed on systems that installed the affected package, especially npm tokens, Git credentials, CI/CD secrets, cloud keys, signing keys, and deployment tokens. For additional risk reduction, disable or tightly control package install lifecycle scripts where feasible, use lockfile review, enforce dependency provenance controls, and restrict outbound network access from build systems.
How to confirm the fix worked
Confirm that package manifests and lockfiles do not reference eslint-config-prettier versions 8.10.1, 9.1.1, 10.1.6, or 10.1.7. Search package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, vendored node_modules directories, container layers, CI caches, and internal package mirrors. Run dependency inventory tooling such as npm ls eslint-config-prettier, yarn why eslint-config-prettier, or pnpm why eslint-config-prettier across repositories and build images. Verify that affected downstream products have been upgraded to the listed fixed versions or commits. On Windows systems that performed installs, confirm that no suspicious node-gyp.dll file remains under project node_modules paths, npm cache directories, temporary directories, or build workspaces. Validate that CI runners and build hosts have been rebuilt or cleaned and that exposed credentials have been rotated. Review recent builds to identify any installation events during the exposure window and confirm they used non-malicious package versions.
Typical attack path
- Attacker introduces malicious code into published eslint-config-prettier package versions 8.10.1, 9.1.1, 10.1.6, or 10.1.7.
- A developer workstation, CI runner, or build container installs dependencies using npm, yarn, pnpm, or another tool that resolves to an affected package version.
- The package manager executes the package install lifecycle script, including install.js.
- On Windows, install.js launches the malicious node-gyp.dll payload.
- The payload executes with the privileges and environment variables of the install process.
- The attacker harvests accessible credentials, source code, package tokens, cloud credentials, or CI/CD secrets.
- The attacker may tamper with build outputs, publish additional malicious packages, pivot to source-control or deployment systems, or maintain persistence on compromised build hosts.
How to detect it
Investigate whether affected versions were installed, not only whether production applications are currently running them. Review source-control history, dependency manifests, lockfiles, SBOMs, package-manager logs, CI job logs, container build logs, internal npm proxy logs, artifact repository access logs, EDR telemetry, Windows event logs, Sysmon logs, and file-system artifacts. Search for installs of eslint-config-prettier versions 8.10.1, 9.1.1, 10.1.6, and 10.1.7. On Windows hosts, look for creation or execution of node-gyp.dll from project directories, node_modules directories, npm cache paths, temporary build directories, or CI workspaces. Review process trees where npm, yarn, pnpm, npx, node.exe, or install.js spawned suspicious child processes or loaded a DLL. Examine outbound network activity from build hosts around the time of dependency installation, particularly unusual connections shortly after package installation. Check whether secrets present in affected environments were accessed, exported, or used unexpectedly after installation. Because this is a known exploited supply-chain issue, absence of a network-facing exploit attempt does not rule out compromise; the key evidence is dependency installation plus local execution artifacts.
- eslint-config-prettier@8.10.1
- eslint-config-prettier@9.1.1
- eslint-config-prettier@10.1.6
- eslint-config-prettier@10.1.7
- node_modules/eslint-config-prettier/install.js
- node_modules\\eslint-config-prettier\\install.js
- node_modules/eslint-config-prettier/node-gyp.dll
- node_modules\\eslint-config-prettier\\node-gyp.dll
- node-gyp.dll
- "eslint-config-prettier": "8.10.1"
- "eslint-config-prettier": "9.1.1"
- "eslint-config-prettier": "10.1.6"
- "eslint-config-prettier": "10.1.7"
- eslint-config-prettier@8.10.1 postinstall
- eslint-config-prettier@9.1.1 postinstall
- eslint-config-prettier@10.1.6 postinstall
- eslint-config-prettier@10.1.7 postinstall
- install.js node-gyp.dll
- npm install eslint-config-prettier@8.10.1
- npm install eslint-config-prettier@9.1.1
- npm install eslint-config-prettier@10.1.6
- npm install eslint-config-prettier@10.1.7
What your security team should do
- Treat any Windows developer workstation, build host, or CI runner that installed eslint-config-prettier 8.10.1, 9.1.1, 10.1.6, or 10.1.7 as potentially compromised until investigated.
- Immediately block the affected package versions in dependency management, artifact repository, and software composition analysis policies.
- Search all source repositories, lockfiles, SBOMs, container images, package caches, and build logs for the affected versions and the node-gyp.dll payload.
- Purge dependency caches and rebuild CI runners, build containers, and golden images that may have installed the malicious package.
- Rotate credentials available to affected install environments, prioritizing npm publishing tokens, Git credentials, CI/CD secrets, cloud credentials, deployment keys, and code-signing materials.
- Review EDR, process execution, PowerShell, Sysmon, package-manager, and CI logs for install.js spawning node.exe, rundll32.exe, regsvr32.exe, or loading node-gyp.dll.
- Apply the listed fixed downstream versions where applicable: Alpaquita intel-ucode 20241112-r0 and homarr-labs/homarr commit fd62524db309429db1f233b1d0feb8e6ab4efd2d.
- Prioritize remediation ahead of the CISA KEV deadline of 2026-02-12 because exploitation is active in the wild.
- Implement package provenance controls, dependency pinning, lockfile review, and restricted install scripts for high-risk build environments.
The record
eslint-config-prettier 8.10.1, 9.1.1, 10.1.6, and 10.1.7 has embedded malicious code for a supply chain compromise. Installing an affected package executes an install.js file that launches the node-gyp.dll malware on Windows.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | @pkgr/core | 0.2.8 | No fix |
| npm | @pkgr/core | 0.2.8 | 0.2.9 |
| npm | eslint-config-prettier | 10.1.6 | 10.1.8 |
| npm | eslint-config-prettier | 8.10.1 | No fix |
| npm | eslint-config-prettier | 8.10.1 | 8.10.2 |
| npm | eslint-config-prettier | 9.1.1 | No fix |
| npm | eslint-config-prettier | 9.1.1 | 9.1.2 |
| npm | eslint-plugin-prettier | 4.2.2 | 4.2.4 |
| npm | got-fetch | 5.1.11 | 6.0.0 |
| npm | napi-postinstall | 0.3.1 | No fix |
| npm | napi-postinstall | 0.3.1 | 0.3.2 |
| npm | synckit | 0.11.9 | No fix |
| npm | synckit | 0.11.9 | 0.11.10 |
Related vulnerabilities
- CVE-2026-73532 Fluent Forms Pro 6.2.7 contains an embedded malicious code vulnerability introduced via a… CWE-506
- CVE-2026-73533 Ninja Tables Pro 5.2.11 contains an embedded malicious code vulnerability introduced via… CWE-506
- CVE-2026-48160 react-tracked provides state usage tracking with Proxies. CWE-506
- CVE-2026-48159 use-reducer-async is a React useReducer with async actions. CWE-506
- CVE-2026-48158 use-context-selector is a React useContextSelector hook in userland Between 2026-05-18… CWE-506
- CVE-2026-66747 Zbtlink router firmware ships an embedded remote-control implant, ENDLESSDOORS, present… CWE-506
- CVE-2026-45758 Guardrails AI is a Python framework that helps build AI applications. CWE-506
- GHSA-jpvj-wpmj-h7rv Supply chain compromise via malicious @cap-js/openapi CWE-506