1 · How the attacker gets in
- Reused passwordeslint-scope, 2018
- Phishing page captures a login, 2FA code, or tokeneslint-config-prettier and Qix, 2025
- Malware on the maintainer's machineaxios, 2026
- Token stolen from a laptop or CI runnerShai-Hulud v2, Mini Shai-Hulud
- Password reset via an expired email domainnode-ipc, 2026
2 · What the registry receives
- A web or CLI session plus a 2FA code or key signature
- A granular access token, possibly set to bypass 2FA
- An OIDC token from a CI workflow bound as a trusted publisher
3 · What npm checks on PUT /<name>
- Credential is valid
- User is a maintainer of the name
- 2FA policy is satisfied
- Version number is unused
