Poisoned Pipeline

Poisoned Pipeline / Incidents / AS10

AS10 · 2021-02

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

supply-chain Public registries

T0102 · Reconnaissance · Discover used open-source dependencies

Internal package names leaked from JavaScript bundles, manifests,
and public GitHub.

T0107 · Reconnaissance · Discover internal artifacts names

Names of private packages were enumerated from public artifacts.

T0109 · Resource Development · Publish malicious artifact

Public packages were published with the same names and higher versions.

T0120 · Initial Access · Dependency confusion

Build systems resolved the public package instead of the internal one.

post-supply-chain Victim build systems

T0159 · Execution · Malicious artifact execution

Install scripts ran in CI and on developer workstations.

T0140 · Credential Access · Harvest tokens from environment variables

Proof-of-concept callbacks demonstrated access to CI secrets.

Sources