Poisoned Pipeline / Incidents / AS10
Dependency confusion (Alex Birsan)
npmPyPIRubyGemsDeveloper workstation
Researcher Alex Birsan showed that public package registries (npm, PyPI,
RubyGems) will often prefer a higher-version public package over an
internal package of the same name. By publishing placeholder packages
matching internal names discovered in public artifacts, he executed code
inside dozens of large companies. The technique already exists as T0120;
this story records the campaign that made it famous, which this catalogue never
documented as an incident.
Mapped techniques
- T0102 Discover used open-source dependencies
- T0107 Discover internal artifacts names
- T0109 Publish malicious artifact
- T0120 Dependency confusion
- T0159 Malicious artifact execution
- T0140 Harvest tokens from environment variables
supply-chain Public registries
Internal package names leaked from JavaScript bundles, manifests,
and public GitHub.
Names of private packages were enumerated from public artifacts.
Public packages were published with the same names and higher versions.
Build systems resolved the public package instead of the internal one.
post-supply-chain Victim build systems
Install scripts ran in CI and on developer workstations.
Proof-of-concept callbacks demonstrated access to CI secrets.