Security1 distinct publisher3 min readUpdated
Unit 42 says a worm hidden in more than 400 npm packages read GitHub Actions runner memory for temporary OIDC tokens. An SBOM generated at the end of the build would not have seen any of it.
The Watch · Security desk
Compiled by The WatchSomething wrong?How this is made
Where ChainDrop went looking for secrets is the detail worth keeping. Alongside a broad sweep for credentials sitting on developer disks, a hidden Python script read live process memory on GitHub Actions runners to lift temporary OpenID Connect tokens and secrets [8]. Federated, short-lived credentials are the standard answer to long-lived keys pasted into CI settings. Reading them out of a running job makes the expiry beside the point, because the worm spends them at once: Unit 42 says it used the stolen npm and GitHub tokens to republish further packages [c9a].
The persistence is the other half of the design. According to Unit 42, ChainDrop wrote cross-linked hooks into developer tooling, including VS Code and Claude Code, and ran its command and control dynamically through Ethereum blockchain transactions [10]. Two things follow from that pairing. There is no domain to seize or sinkhole, and the surviving foothold sits on a laptop rather than in a registry or a runner [18]. An incident closed when the bad versions are unpublished has been closed in the wrong place.
The scale argument underneath this is arithmetic rather than atmosphere. Unit 42 puts open source at 80 to 90 percent of modern codebases and says the surface now includes developer laptops, CI/CD and cloud infrastructure [12]. It also contrasts a project of ten years ago depending on a few dozen external libraries with a simple application today pulling thousands of indirect dependencies [13]. Read at the low end of both figures, that is roughly a 55-fold increase in third-party code arriving per build [17]. Every one of those arrivals can carry a preinstall hook that fires silently the moment someone runs npm install, and ChainDrop's fired at three targets: build server memory, local editor config such as tasks.json, and rogue repositories used to spread further [11].
The reason install-time code works so well is a missing boundary rather than a clever exploit. A browser confines a website to a sandbox; setup scripts and editor extensions have no such walls and inherit the developer's own permissions, free to read files and run commands [16]. That permission grant is handed out constantly, across npm, pip, cargo, go and maven installs, by people also running somewhere between 10 and 30 IDE extensions [15]. Unit 42's summary is that attackers are aiming at CI/CD pipelines and developer environments to hijack software before it reaches production [2], and the ChainDrop mechanics make that concrete.
One caveat on the whole picture: this is a single vendor's research, and the package counts, the payload size and the memory-reading technique are Unit 42's own findings [6]. Nobody else in the supplied material has confirmed them.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
In ChainDrop's theft stage, a hidden Python script directly read live process memory from GitHub Actions runners to steal temporary OpenID Connect (OIDC) tokens and secrets, alongside a broad sweep for local developer credentials.
ChainDrop used stolen npm and GitHub tokens to self-propagate, silently infecting and republishing additional packages.
ChainDrop left the legitimate functionality of the packages it republished perfectly intact so that developers do not notice.
ChainDrop secured long-term persistence by establishing cross-linked hooks directly inside developer tools including VS Code and Claude Code, and managed its command-and-control infrastructure dynamically through Ethereum blockchain transactions.
The malware triggers silently as soon as someone runs npm install, by misusing npm preinstall hooks, and then hits three targets: searching build server memory for unencrypted credentials and platform access tokens, modifying local developer tool configs such as VS Code's tasks.json to retain access after the build, and using stolen tokens to create rogue code repositories for propagation.
Unit 42 says generating an SBOM at the end of a build is good for compliance but an inventory created at the finish line will not catch malware that was executed during the build process.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed primary vendor research, uncorroborated in-cluster
The ChainDrop mechanics are unusually specific for a blog post -- named packages, a 727 KB payload, the Bun download step, memory reads on GitHub Actions runners, tasks.json persistence, Ethereum C2 -- and come from the researchers who analyzed the samples, which is real first-party evidence. But the cluster contains exactly one source, no IOCs or sample identifiers are published for independent verification, and the surrounding framing statistics (80-90% of codebases, 10-30 IDE extensions, a 12-18 month shift) carry no citation or method.
Real in-the-wild campaign at package-ecosystem scale
Read as real-world incidence rather than product uptake: the reported footprint is concrete and non-trivial -- 400+ infected npm packages including widely depended-on libraries, credential theft from CI runners, self-propagation into new repositories -- and it sits alongside a named lineage of prior campaigns (XZ Utils, Axios, Shai-Hulud, GlassWorm, Trivy). It is capped below high because no download counts, affected-organization counts, or takedown status are given, so the downstream blast radius is unquantified in the supplied material.
Concrete core, moderately inflated frame
The specific ChainDrop findings are, if anything, delivered plainly -- the OIDC-from-runner-memory detail is arguably underplayed relative to its significance. The overstatement sits in the wrapper: an uncited 'drastic shift', uncited 80-90% and 10-30 figures, and a chain of reasoning that terminates in three inventory products (SBOM, PBOM, container SBOM) that the publisher sells, while the article's own evidence shows the persistence lives in endpoint editor configs that no bill of materials would remediate.
Vendor research whose conclusions are its product line
The only publisher is the threat-intelligence arm of a security vendor, and the article's closing prescriptions -- pipeline bill of materials, container SBOM, developer-endpoint coverage, 'map every place a third-party package touches' -- correspond directly to commercial supply-chain security offerings. Non-commercial mitigations available to any team (disabling install scripts, lockfile pinning, tighter OIDC token scoping and audience restrictions, extension allowlisting) are not discussed, and no independent publisher is present to offset the framing.
Plausible and specific, but single-sourced
Confidence is limited chiefly by source count: one interested publisher, no corroborating advisory from npm or GitHub, no IOCs, and no external reporting of the campaign in the supplied material. What raises it above low is internal consistency and technique plausibility -- preinstall-hook execution, credential theft from CI, and worming republication all match the named precedents in the same ecosystem, and the mechanism-level detail is the kind that is costly to fabricate.
security
Shai-Hulud's fourth wave shipped with valid provenance, and that is the finding1 distinct publisher
security
The 2,500-org compromise was a Trivy problem. LiteLLM was the closing act.1 distinct publisher
product
Docker pipes every agent policy decision into your SIEM, and the evidence burden lands on platform teams1 distinct publisher
build
Flux moves GitOps' source of truth into registries you own, and mirroring becomes the prerequisite1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.