AI Newsway

A Poisoned Rust Crate Was Live for 86 Minutes. It Had 245 Million Downloads.

Attackers hijacked a maintainer account, added a typosquatted dependency, and let Cargo build scripts do the rest

|4 min read0
AI Summary
A poisoned arrayref 0.3.10 release was live on crates.io for 86 minutes on August 20, pushed through a hijacked maintainer account with a new typosquatted proc-macro1 dependency whose build script fetched an infostealer targeting browser profiles and crypto wallets. The crate has about 245 million downloads and underpins blake3, egui, iced and Ethereum and Solana components, and sibling crates internment and append-only-vec were also hit. Registry operators removed the packages by 08:41 UTC, but the blast radius is unknown.
Source code on a developer workstation — the arrayref supply chain attack executed its payload during compilation, before any application code ran
Source code on a developer workstation — the arrayref supply chain attack executed its payload during compilation, before any application code ran

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.

How do you feel about this article?

SJ

Discussion

Sign in to post
Loading...

Related articles

ChainDrop Worm Poisoned 444 npm Packages — With Valid Signatures
Developer Tools

ChainDrop Worm Poisoned 444 npm Packages — With Valid Signatures

A self-propagating npm worm hit 444 packages in four hours, published through trusted workflows with valid provenance attestations.

Seung Jung32 days ago
Anthropic Unlocks Its Withheld Mythos 5 Model for Defenders, With $35M for Open Source
Developer Tools

Anthropic Unlocks Its Withheld Mythos 5 Model for Defenders, With $35M for Open Source

Anthropic pledges $35M in credits for open-source security and opens Mythos 5, the model it withheld from release, to enterprise vulnerability scanning.

Seung Jung26 days ago
Researchers Found 227 Install Commands Pointing at Code Nobody Owns
Developer Tools

Researchers Found 227 Install Commands Pointing at Code Nobody Owns

A scan of 6,214 domains found 120 llms.txt files pointing coding agents at unregistered packages, and one slot already held live malware.

Seung Jung20 days ago
AI Agents Flooded RubyGems With 2,000 Packages. Sign-Ups Closed for Four Days
Developer Tools

AI Agents Flooded RubyGems With 2,000 Packages. Sign-Ups Closed for Four Days

A forensic report reconstructs the May GemStuffer campaign, in which AI agents pushed 2,000+ gems and forced RubyGems to freeze new sign-ups for four days.

Seung Jung5 days ago
Cloudflare Cut Astro's Open Issues by 85% With Four Agents That Refuse to Share Context
Developer Tools

Cloudflare Cut Astro's Open Issues by 85% With Four Agents That Refuse to Share Context

Separate reproduction, diagnosis, verification and fix agents hand off through a report file, with the original bug reporter acting as the acceptance test.

Seung Jung25 days ago
Go 1.27 Ships Generic Methods, a Rebuilt JSON Engine and Post-Quantum Signatures
Developer Tools

Go 1.27 Ships Generic Methods, a Rebuilt JSON Engine and Post-Quantum Signatures

Go 1.27 adds generic methods, backs encoding/json with a new v2 engine, cuts small-object allocation cost by up to 30 percent and brings ML-DSA into crypto/tls.

Seung Jung28 days ago