A poisoned release of the Rust crate arrayref was live on crates.io for exactly 86 minutes on August 20. That is a narrow window. It was also more than enough. The package carries roughly 245 million lifetime downloads and sits underneath blake3, the egui and iced GUI stacks, and components used across the Ethereum and Solana ecosystems.
The Rust Security Response Team published its account the same day. The investigation did not begin with arrayref. It began with a tip about a crate called proc-macro1. That name sits one character away from proc-macro2, one of the most-pulled dependencies in the entire language.
A dropper that runs before your code does
The attacker left the legitimate source of arrayref almost entirely alone. Only one thing changed in substance. A new dependency was added, and that dependency was proc-macro1.
Cargo executes build scripts during compilation. That is the whole trick. The malicious script reassembled its infrastructure from base64 fragments, fingerprinted the host, and pulled a matching binary. Security vendor Aikido, which analyzed the samples independently, found payloads compiled for Linux, Windows, Intel Macs and Apple Silicon.
The second stage was not a simple downloader. Aikido reported code that reached for Chromium profile data across Chrome, Brave and Edge. It also targeted the extension storage that browser-based cryptocurrency wallets depend on. Persistence and command-and-control functionality were present as well.
The timeline is the story
Public reconstructions place the first move at 01:17 UTC, when a GitHub account impersonating well-known Rust developer David Tolnay was created. A matching registry identity followed shortly after. A benign copy of proc-macro2 went out under the proc-macro1 name at 01:55. The weaponized update landed hours later.
Only then did the attacker move to the real target. Version 0.3.10 of arrayref shipped through the legitimate maintainer's account. Several earlier releases were yanked at the same moment. That detail deserves attention. Yanking prior versions is not noise, it is steering, and it pushes dependency resolvers toward the one release the attacker controls.
Two sibling crates from the same maintainer were caught in the same sweep. The internment 0.8.7 release stayed online for 90 minutes. The append-only-vec 0.1.9 release lasted 107. Registry operators deleted proc-macro1 at 08:03 and pulled arrayref 0.3.10 from the index at 08:41.
Nobody knows the blast radius
The Rust team does not believe the maintainer acted in bad faith. Its working assessment is that the developer's machine or credentials were compromised. The account was locked as a precaution while responders attempted to make contact.
What the team has not disclosed is how many builds actually resolved the poisoned versions. That figure may never surface. Registry download counters do not map cleanly onto executed payloads, and CI caches muddy the picture further.
Responders credited the research team at Nextron Systems with the initial discovery. Five additional crates were deleted alongside proc-macro1. Those were proc-macro-en, aovine, arone, aronenao and tinymember, and every version of each should be treated as hostile.
What developers should actually do
The recommended check is unglamorous. Inspect lockfiles for the affected versions. Sweep the local Cargo registry cache for the specific archives. Rotate any secret a build machine could have touched, because credential theft was the entire point of the operation.
There is a broader lesson here that predates this incident. Build scripts are arbitrary code execution by design, and the ecosystem accepted that trade-off years ago in exchange for ergonomics. Most language communities have struck a version of the same bargain. This attack defeated no control at all. It simply used one that was working as documented.
Registries have gotten faster at takedowns, and 86 minutes is genuinely quick by historical standards. Speed is not much of a defense when the exploit fires the instant a dependency resolves. The uncomfortable part is that a compromised maintainer account remains the shortest path into thousands of machines, and no amount of registry vigilance closes it.






