Poisoned Pipeline / Incidents / AS35
PolinRider poisons visanduma/nova-two-factor Packagist via Git
Packagist / ComposerGit / GitHubVS Code / IDE
Socket tracked PolinRider into Packagist through a compromised GitHub
developer account (LaHiRu) on the Visanduma organization, compromised
since mid-June 2026. Malicious code landed in four development versions
of visanduma/nova-two-factor (700k+ cumulative downloads): dev-main,
dev-nova4support, dev-using-inertia, and dev-nova5. No stable malicious
release was identified. Composer (and Go modules) can resolve straight
from Git, so no Packagist publishing token was required. Campaign
methods in this wave: force-pushed history, payloads in config or.woff2 files, .vscode/tasks.json with "runOn": "folderOpen",
EtherHiding/NullReceiver dead drops, and obfuscated JS in index.php
launched via shell_exec. Primary objective remains cryptocurrency
theft plus credential stealing.
Mapped techniques
- T0113 Compromised user account
- T0169 Push implants across repositories
- T0138 Backdoor in code
- T0210 Poison AI coding-agent config or workspace
- T0197 Use code from untrusted source
- T0109 Publish malicious artifact
- T0159 Malicious artifact execution
supply-chain Compromised GitHub org and Packagist dev branches
Malicious commits came through the LaHiRu developer account.
Force-pushed rewritten history; hundreds of later private-repo commits.
JS hidden in config / fake .woff2 files and in index.php via shell_exec.
"runOn": "folderOpen" in .vscode/tasks.json runs on repo open in VS Code.
Composer/Go resolve from Git, so registry credentials were unnecessary.
Four Packagist dev-* versions of visanduma/nova-two-factor.
Clone, IDE folderOpen, or a normal build/test starts the chain.