Poisoned Pipeline

Poisoned Pipeline / Incidents / AS25

AS25 · 2026-09

indexed-btree runtime npm loader

npm

Checkmarx documented an npm campaign around indexed-btree (about 2 million
weekly downloads, impersonating sorted-btree) whose package.json had no
install scripts. The loader lives in BTree.prototype.set and fires when
the application uses the library (key == 100). Stage-1 fingerprints the
host and beacons Slack/Telegram; C2 is an Ethereum Sepolia contract;
stage-2 is X25519/ECDH-unwrapped on-chain. Nine sibling packages reached
366k–1.95M downloads. Blocking lifecycle scripts only moved the payload
from install time to import time. ReversingLabs (6 Oct 2026) recapped
the same package and said the command-and-control infrastructure was
still running.

Mapped techniques

supply-chain npm indexed-btree and siblings

T0129 · Initial Access · Typosquatting

Impersonated the legitimate sorted-btree library.

T0141 · Resource Development · Fake developer reputation (Starjacking)

A legitimate-looking GitHub repo with fabricated commit history;
the repo never contained the malicious code.

T0109 · Resource Development · Publish malicious artifact

indexed-btree plus nine siblings were published to npm.

T0159 · Execution · Malicious artifact execution

Execution was on library use, not on npm install — npm v12's
install-script block never saw it.

T0176 · Defense Evasion · Disable or misconfigure security measures

The malware could delete its files and strip the trigger from the
prototype after running.

Framework gaps noted

Sources