A Ten-Year-Old Crate's First New Dependency
On August 20, 2026, an attacker who had compromised a maintainer account on crates.io, the official registry for Rust packages, used that access to publish poisoned versions of three widely used crates: arrayref, internment, and append-only-vec. Arrayref alone is present in more than 35 percent of all Rust environments and in roughly three out of four environments where Rust appears at all, making it one of the most quietly ubiquitous small libraries in the ecosystem.
The malicious arrayref 0.3.10 carried a detail that should have been a warning sign on its own: it was the first new dependency arrayref had added in its entire ten-year history. A crate that has shipped dependency-free updates for a decade suddenly acquiring one is exactly the kind of change a careful dependency review would flag, if anyone was reviewing it at all.
A Build Script Ran Before Any Code Did
Each poisoned version added a dependency on a new crate called proc-macro1, which was also malicious. Proc-macro1 carried a build script, a small program that Cargo, Rust's build tool, runs automatically as part of compiling a project, before the project's own code has finished building or executed at all.
That automatic execution is what made the attack so quiet: a developer or a CI pipeline did not need to run the finished binary, click anything, or import a suspicious function to be compromised. Simply running cargo build on a project that depended on the poisoned crate was enough to trigger the build script and download the attacker's payload.
Yank-and-Nudge: Borrowing an npm Trick
The attacker also yanked arrayref's older, clean releases, versions 0.3.5 through 0.3.9, from the registry. Yanking does not delete a version outright, but it does make Cargo display its standard warning that a project should consider updating to a version that is not yanked.
With every clean version marked yanked, the only non-yanked release left for Cargo to recommend was the malicious 0.3.10, nudging developers toward the poisoned version through the registry's own tooling. Security researchers have flagged this exact yank-and-nudge pattern in prior npm supply chain attacks, so its appearance on crates.io suggests the same social-engineering-via-tooling playbook, not a new invention.
Three Crates, Three Short Windows
All three malicious versions were published within a 22-minute window on the morning of August 20, 2026, and all three were removed within roughly 90 to 107 minutes of going live, once the Rust Security Response Team locked the compromised account and pulled the packages.
| Crate | Malicious version | Published (UTC) | Removed (UTC) | Minutes live |
|---|---|---|---|---|
| arrayref | 0.3.10 | 07:15 | 08:41 | 86 |
| internment | 0.8.7 | 07:34 | 09:04 | 90 |
| append-only-vec | 0.1.9 | 07:37 | 09:25 | 107 |
A window under two hours sounds brief, but crates.io has no built-in delay between publishing a new version and every dependent project being able to pull it automatically on its next build, so even a short window is enough for a build script to reach any project that happens to rebuild during it.
Credential Theft, a Kill Switch, and a North Korea Link
Wiz Research analyzed the payload and found a backdoor that beacons to a remote server over HTTPS, enumerates saved credentials stored in Chrome, Brave, and Edge, installs cross-platform persistence, and can execute four remote commands, including a kill switch and a command to run arbitrary scripts.
Wiz also found that the backdoor's beacon endpoint shares infrastructure with the Mastra campaign, which Microsoft attributed to Sapphire Sleet, a group linked to North Korea, and with a prior axios npm attack that Google Cloud Threat Intelligence and Mandiant separately linked to North Korea, suggesting the same actor class that already compromised npm has now demonstrated the same capability against crates.io. Discovery is credited to Nextron Systems GmbH, a German security research firm; the Rust Security Response Team locked the account and pulled all three versions, and no confirmed evidence of downstream exploitation has surfaced.
Rust Solves Memory Bugs, Not Who Controls the Account
The EU Cyber Resilience Act and NIS2 have been pushing vendors of security-critical and connected products toward memory-safe languages, and Rust has been a primary beneficiary of that push. This incident is a reminder that migrating to Rust for compliance reasons solves one problem, memory-safety bugs like buffer overflows, without touching a separate one: who controls the account that publishes a project's dependencies, and what a build script is allowed to execute before any of the project's own code has even finished compiling.
Owners who ordered a Rust migration for compliance reasons should ask their engineering teams three concrete questions: are dependency updates reviewed before they are merged, can the CI pipeline sandbox or restrict what a build script is allowed to do, and would anyone actually notice a same-day yank-and-republish on a package the team has trusted for years. It is worth noting that the discovery itself came from Nextron Systems GmbH, a German firm, which undercuts any assumption that this kind of supply chain risk is somebody else's problem.
Read next: Nobody Can Verify The Chip In Your Security Key | Your Bounty Money Is Buying AI Slop



