npnjs.com phishing backdoored npm packages
The npnjs.com campaign used a lookalike npm login domain to phish maintainers and publish malicious releases across JavaScript tooling packages in July 2025.
Story
The July 2025 npm phishing campaign began with a letter off by one character. Maintainers were sent to npnjs.com, a lookalike of the npm login flow, and the stolen credentials became publish rights on the real npm registry.
The attacker did not need to break npm itself. With maintainer credentials in hand, they published malicious versions under real package names, so dependency resolvers and lockfile updates saw official registry artifacts. Some packages added install-time scripts and downloader logic; others carried backdoors or credential theft.
The first visible cluster centered on ESLint and Prettier tooling. eslint-config-prettier, eslint-plugin-prettier, synckit, @pkgjs/core, and napi-postinstall all carried the same account-compromise pattern, and later reporting connected additional packages such as is and got-fetch to the same broader phishing infrastructure.
The malware family leaned on JavaScript's install-time execution model. A package did not need to be imported by production code to matter; it only had to run during npm install on a developer workstation or CI runner where browser data, SSH keys, registry tokens, or other credentials were reachable.
This campaign record holds the shared phishing domain, timing, and account-takeover pattern. The package records stay separate because each affected name has its own version list, registry path, maintainer response, and exposure query.
Linked Attacks
2025
StepSecurity confirmed synckit 0.11.9 as one of the npm packages affected by the July 2025 npnjs.com maintainer phishing campaign. The attacker used a phished maintainer credential path to publish malicious releases directly to npm without corresponding source repository changes.
StepSecurity confirmed @pkgjs/core 0.2.8 as one of the npm packages affected by the July 2025 npnjs.com maintainer phishing campaign.
napi-postinstall 0.3.1 was published during the July 2025 npnjs.com maintainer phishing wave. Its install path executed attacker-controlled JavaScript from npm.
The npnjs.com phishing campaign hijacked maintainer access for the popular is package. Attackers used social engineering to regain npm access and ship Scavenger malware through trusted releases.
As part of the expanding npm maintainer phishing campaign using the npnjs.com domain, attackers published rogue got-fetch 5.1.11 and 5.1.12 releases.
The same npnjs.com npm maintainer phishing campaign that compromised eslint-config-prettier also compromised eslint-plugin-prettier.
A phishing campaign targeting npm maintainers through the typosquatted npnjs.com domain compromised eslint-config-prettier.
Campaign Context
- Actor
- Third Party
- Attribution
- Group
- Cause
- Unknown
Affected Packages
External References
- npm Maintainer Phishing Campaign Leads to eslint-config-prettier Compromisestepsecurity.io
- npm Scavenger Malware Targets Popular Packagesresearch.checkmarx.com
Source record: oss/campaigns/npnjs-scam-npm-2025/meta.yaml