Poisoned Pipeline / Techniques / T0121
Compromised legitimate artifact
A compromised legitimate artifact attack is a type of cyber attack in which an attacker replaces a legitimate package or container image with a malicious version, often without the knowledge of the original developer or distributor.
This attack takes advantage of the trust that users place in legitimate packages or container images, which are often used to deploy software across multiple environments.
In this attack, the attacker may gain access to the repository or registry where the legitimate artifact is stored, either by exploiting a vulnerability or through social engineering tactics.
The attacker then replaces the legitimate artifact with a malicious version that contains malware or other harmful code.
Once the compromised artifact is downloaded and deployed, it can compromise the system and potentially cause significant harm, such as stealing sensitive data or taking control of the system.
Where this idea came from
Identified in published CI/CD or supply-chain security research cited below. DEF CON 32: XZ backdoor story — backdoored liblzma release.
- https://www.legitsecurity.com/blog/why-you-can-still-get-hacked-even-after-signing-your-software-artifacts
- https://owasp.org/www-project-top-10-ci-cd-security-risks/CICD-SEC-09-Improper-Artifact-Integrity-Validation
- https://defcon.org/html/defcon-32/dc-32-speakers.html#54442
Mitigations
- M1500 Verify third-party artifacts and open-source libraries
- M1502 Define trusted package managers and repositories
- M1503 Implement SCA analysis
- M1730 Implement code reviews
- M1732 Implement code scanning for security risks
- M1860 Implement strong authentication mechanisms
- M1861 Implement strong authorization mechanisms
Detections
- D1090 Implement package or image integrity verification
- D1500 Configure monitoring of used artifacts and open-source libraries
- D1510 Implement Intrusion Detection System and anti-malware
Observed in incidents (71)
- @velora-dex/sdk 9.4.1 build-pipeline backdoor
- Operation ShadowHammer (ASUS Live Update)
- got-fetch 5.1.11/5.1.12 Pycoon stealer
- rc npm releases carried malware
- react-native-country-select npm account takeover
- react-native-international-phone-number npm account takeover
- colors.js npm maintainer sabotage broke apps
- mrmustard 0.7.4 PyPI credential stealer via stolen publish token
- Packagist CMS themes delivering iOS spyware
- pgserve npm CanisterSprawl credential stealer
- dYdX packages after maintainer compromise
- ssh-decorate PyPI releases stole SSH credentials
- tensorlake 0.5.144 steals tokens, then wipes the home directory if they are revoked
- actions-cool GitHub Action tags still serve Mini Shai-Hulud after re-enablement
- SleeperGem (git_credential_manager, Dendreo, fastlane plugin)
- bfunky/http-parser Packagist package backdoored with host stealer
- xrpl.js npm package stole wallet seeds
- node-ipc 9.1.6 / 9.2.3 / 12.0.1 DNS-exfil stealer
- Team PCP CI/CD secrets campaign
- Notepad++ update-server hijack (Jun–Dec 2025)
- NotPetya via M.E.Doc accounting-software updates
- elementary-data PyPI and GHCR releases forged
- pub.dev universal_file_viewer ships XCSSET (infected maintainer)
- @joyfill/components and @joyfill/layouts obfuscated RAT
- Hijacked AI coding assistant spreads Shai-Hulud
- guardrails-ai PyPI package carried Shai-Hulud
- jscrambler@8.14.0 preinstall native binaries
- IronWorm backdoored Arweave ecosystem npm packages
- Polyfill.io CDN takeover
- Nx s1ngularity (stolen npm token via Actions injection)
- Intercom npm and Packagist Mini Shai-Hulud
- Protestware on npm targeting Russian-language users
- ctx PyPI account stole environment variables
- electron-native-notify planted in Agama / Komodo wallet
- Rspack supply chain attack
- art-template 4.13.3–4.13.7 ownership-transfer hijack
- Rank Math PRO 3.0.123 downloads carried malware that plants a recreating backdoor
- faker.js npm maintainer sabotage broke apps
- GlassWorm-hijacked contributor replaced OVHcloud CLI release assets on five published versions
- DAEMON Tools signed installers backdoored (Apr–May 2026)
- Famous Chollima compromised Packagist package
- OptinMonster / TrustPulse / PushEngage plugin supply chain
- Xinference PyPI release stole credentials
- rest-client gem backdoor stole credentials
- Virtualizor panel update delivered via BGP hijack of Softaculous update/billing infrastructure
- Placeholder domain third-party.com turned live ClickFix server
- Laravel Lang RCE backdoor across 700+ versions
- @mastra scope poisoned via typosquat easy-day-js
- eslint-scope and eslint-config-eslint malicious publishes
- axios npm remote-access trojan
- Codecov Breach
- Compromised Injective SDK on npm
- Coder registry CDN origin pool compromise
- Shai-Hulud first wave (@ctrl/tinycolor)
- vant npm packages shipped XMRig
- npm is 3.3.1 / 5.0.0 via phished old maintainer
- Miasma botnet loader in @asyncapi npm packages
- GHAPPIER loader via @dforge-core/dforge-mcp trusted publishing
- bootstrap-sass gem enabled remote execution
- strong_password Ruby gem backdoor stole secrets
- sckit worm in MemTensor npm plugin and PyPI MemoryOS
- sckit worm in MemTensor npm plugin and PyPI MemoryOS
- TanStack Mini Shai-Hulud (CVE-2026-45321)
- npm chalk / debug maintainer phishing (Qix)
- ua-parser-js npm account takeover
- UNC7017 swapped AOMEI update config for minutes at a time
- @fairwords credential worm
- coa npm hijack shipped malware
- mgc npm account takeover RAT
- eslint-config-prettier phishing (npnjs.com) and node-gyp.dll
- DuckDB npm account compromised