Rust supply chain attack slips build-time malware into arrayref
3 min read
By the numbers
- 245M
- all-time downloads of arrayref on crates.io
- 403
- crates listing arrayref as a direct dependency
- 35%+
- of all environments contain arrayref, per Wiz
- arrayref 0.3.10
- 86 min
- internment 0.8.7
- 90 min
- append-only-vec 0.1.9
- 107 min

Attackers published malicious versions of three widely used Rust crates -
arrayref 0.3.10, internment 0.8.7, and append-only-vec 0.1.9 - to crates.io
on August 20, 2026, and anyone who compiled a project that resolved one of
them ran malware on their machine. The payload executed during cargo build itself, so a developer or CI runner never had to call the poisoned
code to be compromised.
The exposure window was short but the blast radius was not. According to The Hacker News, arrayref has 245,385,500 all-time downloads, 53,905,601 of them in the 90 days before the attack, and 403 crates list it as a direct dependency. Security firm Wiz says arrayref appears in more than 35% of all environments it observes, and in three-quarters of environments where Rust is present at all.
How the attack worked
The Rust Security Response Team says it received a report at 07:15 UTC on
August 20 and verified that the new arrayref release "had a build script
that was downloading a malicious payload." The malicious versions did not
tamper with arrayref's own code. Instead, they added a new dependency
named proc-macro1 - a typosquat of the legitimate proc-macro ecosystem -
whose build script downloads and executes a remote binary at compile time.
StepSecurity's analysis puts the mechanism bluntly: "Simply building any
project whose lockfile resolved arrayref 0.3.10 was enough to detonate
the payload. The crate's code never needs to be called." The same analysis
found the attacker yanked every clean 0.3.x release of arrayref in a
scripted burst, "weaponizing Cargo's own 'yanked version' warning as the
delivery mechanism" - developers responding to the warning would upgrade
straight into the malicious release.
Per Wiz, the downloaded backdoor reconstructed command-and-control URLs
from Base64 fragments, disabled TLS certificate validation, and shipped
platform-specific payloads with persistence for Windows, macOS, and Linux
plus credential enumeration from browser profiles. Alongside proc-macro1,
the Rust Security Response Team identified five more attacker-controlled
crates: proc-macro-en, aovine, arone, aronenao, and tinymember.
crates.io removed the malicious releases quickly: arrayref 0.3.10 was live for 86 minutes, internment 0.8.7 for 90, and append-only-vec 0.1.9 for 107, according to timestamps reported by The Hacker News. StepSecurity observes that "the whole operation, from persona creation to registry takedown, fits inside a single working morning."
Who was behind it
The compromise came through the maintainer's account, not the maintainer. "We do not believe the author of arrayref to be acting maliciously, but their computer or credentials are likely compromised," the Rust Security Response Team said in its disclosure.
Wiz reports the campaign's infrastructure substantially overlaps with recent North Korean supply chain operations: it shares the same 23.254.164.0/23 Hostwinds address range used in the Mastra npm campaign attributed to DPRK-linked Sapphire Sleet, and its command-and-control traffic went to an IP that appears in Google Cloud Threat Intelligence's analysis of the axios npm attacks, also attributed to North Korea. The playbook already familiar from npm has now reached crates.io.
What this means for developers
If any of your machines or CI runners built a Rust project on the morning of August 20 (UTC), check whether the lockfile resolved arrayref 0.3.10, internment 0.8.7, or append-only-vec 0.1.9, and inspect your local registry cache - the Rust Security Response Team's advisory asks users to check cached dependencies for the malicious crate names listed above. Treat a machine that built one of them as compromised, not merely exposed: per Wiz, the payload installs persistence and enumerates browser credentials, so rotate secrets that machine could reach.
The structural lesson is that build scripts are a remote-code-execution
surface, and lockfiles are the control. A committed Cargo.lock pins
exact versions, so a fresh cargo install or an un-pinned CI job was the
vulnerable path during the 86-minute window. This attack also turned a
safety feature into bait - the yank-warning trick means "a yanked version
means upgrade now" is no longer a safe reflex. Verify what you are
upgrading into, and treat a brand-new dependency appearing in a
long-stable crate's diff as a stop-the-line signal.
Sources
- Supply chain attack on arrayref - Rust Blog
- Rust Supply Chain Attack on arrayref: Significant Overlap with DPRK Campaigns - Wiz
- Rust Supply Chain Attack Puts Build-Time Malware in Crates with 245 Million Downloads - The Hacker News
- Rust Supply-Chain Attack: arrayref, internment, and append-only-vec Poisoned by the proc-macro1 Build-Time Dropper - StepSecurity
Related articles

Rust funds six maintainers as Clippy's review backlog hits 300
The Rust Foundation Maintainers Fund is now paying six people to maintain Rust, backed by Google, AWS and OpenAI. Clippy's backlog sits near 300 pull requests.

Rust stabilizes the never type after ten years and five attempts
The never type is stable and Infallible is now an alias for it. The catch is a breaking change to type fallback that crater flagged on 3,277 crates.

Rust turns on its next-generation trait solver in nightly builds
Rust's new trait solver is now on by default in nightly - the largest compiler change since 1.0, four years in the making, with stabilization planned within months.
The developer AI briefing
3–5 stories a day, what they mean for developers. Free, no spam.