Build5 distinct publishers3 min readUpdated
The Rust Security Response Team deleted proc-macro1 and arrayref 0.3.10 on August 20 after a build script fetched and launched a binary. The lure was a yank warning.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
On 2026-08-20 at 07:15 UTC the Rust Security Response Team received a report that the crate `proc-macro1` was malicious, and verified that it shipped a build script which downloaded a payload [1]. The operational consequence is narrow and unpleasant: on an unpinned dependency tree, compiling a project was enough to fetch and launch a remote binary, according to SafeDep, which published its analysis the same day [2].
The mechanism was one line of metadata. `arrayref` 0.3.10 added a dependency on `proc-macro1`, a package impersonating the legitimate `proc-macro2` [3]. Cargo compiled it, and its `build.rs` fetched and started a binary from a remote server [4]. SafeDep found that `arrayref` itself kept its familiar macro implementation, so the only meaningful change was that dependency entry, and Cargo builds declared non-optional dependencies even when the parent crate never calls them [5]. The typosquat also copied the real `proc-macro2` source, which kept dependent builds working while the build script ran in the background [6]. SafeDep classifies all versions of `proc-macro1` as a malicious typosquat and identifies 1.0.107 as the version carrying the downloader [7].
The build script reconstructed its server address from base64 fragments rather than putting a URL in plain sight, pulled an architecture-specific binary over TLS, and launched it detached from the build [8]. On Unix it wrote and ran `/tmp/rust-setup`; on Windows it created PowerShell and VBScript launchers in the temporary directory, started them hidden, and abandoned the child so the compiler did not wait [9].
The lure deserves attention because it inverts normal hygiene. The account controlling `arrayref` yanked versions 0.3.5 through 0.3.9 [10], five consecutive releases [11]. Cargo warns when a selected release has been yanked and suggests moving to one still available, and at the time that path pointed at 0.3.10 [12]. SafeDep quotes the reporter who encountered the package saying the warning is what led them there [13]. A developer only had to compile a project whose resolution selected the poisoned release [2].
Impersonation was cheap. The publishing account `dtolney` differs by one letter from `dtolnay`, the account used by Rust maintainer David Tolnay, and the package metadata falsely listed Tolnay as an author and pointed at a repository that did not exist under his GitHub account [14]. The evidence identifies Tolnay as the target, not a participant [15].
crates.io deleted `proc-macro1`, `proc-macro-en`, `aovine`, `arone`, `aronenao` and `tinymember`, removed the malicious `arrayref` version, and unyanked the maliciously yanked releases [16]. Two other crates from the same author, `internment` and `append-only-vec`, got the same treatment, and the account was locked [17]. The team does not believe the author acted maliciously and says their machine or credentials are likely compromised [18]. Nextron Systems GmbH's research team found it and reported it [19].
For checking: the deleted set is `[email protected]`, `[email protected]`, `[email protected]`, plus any version of the six typosquats [20], three pinned versions and six whole crates [21]. The Rust blog publishes a `find` over `~/.cargo/registry/cache` for those `.crate` files [22]. SafeDep adds hashes for `proc-macro1` 1.0.106 and 1.0.107 and two network indicators, the defanged host `23[.]254[.]165[.]112` on ports 9089 and 443 [23]. Search build hosts for `/tmp/rust-setup`, `rust-setup.ps1` and `rust-setup-launch.vbs` [24]. A clean compile proves nothing, because the copied library code was designed to let builds succeed [25].
What is not known is the part that matters most: SafeDep's analysis establishes how the downloader executed but not what the second stage did after launch, or how many systems ran it [26]. Watch for the outcome of the attempt to contact the `arrayref` author [18], and for any accounting of second-stage behaviour. Until then, the yank warning is a signal to pin, not to upgrade.
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.
SafeDep, co-founded by Abhisek Datta, reported on August 20, 2026 that a compromised release of the Rust crate arrayref downloaded and executed malware during compilation; a developer only had to compile a project whose dependency resolution selected the poisoned release.
Cargo automatically compiled the proc-macro1 dependency, which caused its build.rs script to fetch and launch a binary from a remote server.
The account controlling arrayref yanked versions 0.3.5 through 0.3.9, according to SafeDep and the RustSec report.
Cargo warns users when a selected release has been yanked and suggests moving to one that remains available; at the time, that path pointed toward arrayref 0.3.10.
arrayref version 0.3.10 added a dependency on proc-macro1, a package impersonating the legitimate proc-macro2.
The reporter who encountered the package said the yank warning was what led to the poisoned release.
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.
First-party advisory plus multiple independent technical analyses
The registry operator published a dated first-party advisory naming exact deleted versions and remediation steps, and three separate research streams (SafeDep-sourced reporting, Socket's own malware analysis, StepSecurity/Wiz-sourced reporting) independently describe the same dependency line, the same build.rs loader behavior and the same host and network indicators. Mechanism and remediation are documented at artifact level; only victim counts are missing.
Wide dependency reach, short window, unquantified infections
Exposure surface is well documented: roughly 245M lifetime arrayref downloads, about 264M across the three crates, 53.7M in the prior 90 days, 406 directly dependent crate versions reaching GUI, hashing and blockchain stacks. But every source stresses that download totals are not an infection denominator, the malicious releases were deleted after 86 to 107 minutes, pre-existing pinned lockfiles were largely unaffected, and no source publishes how many hosts actually resolved and built the poisoned versions.
Severity claims tracked the published evidence
Coverage is severe in tone but each severity claim is paired with an artifact: verified build script, named versions, published hashes and C2, recovered stage-2 samples. Publishers also self-limit in the right places, labelling download totals as not an infection count, noting vendor control claims are not proof the product blocked this attack, and marking a Hacker News ranking as an attention snapshot rather than demand evidence. No source asserts confirmed mass compromise.
Vendor research with adjacent product interest, disclosed
Most of the technical depth in this cluster comes from supply-chain security vendors whose products sell at exactly the enforcement point the story dramatizes: SafeDep's package firewall, Socket's scanner, StepSecurity's advisory tooling, plus named competitors Endor Labs and Socket's financing. That is a real commercial incentive to maximize the incident's framing. It is offset by the anchoring first-party registry advisory, which has no product to sell, and by explicit disclosure that vendor claims are not evidence their software blocked this incident.
High on mechanism and remediation, lower on impact
Mechanism, affected versions, indicators and registry response are confirmed by a first-party operator and corroborated independently, so confidence there is high. Confidence is deliberately held below the top band because attribution is characterized only as infrastructure overlap, the compromise vector for the maintainer account is stated as suspicion, and the population of actually infected build hosts is unmeasured in every source.
invest
Rust's arrayref hijack lasted 86 minutes, and Wiz ties it to North Korea1 distinct publisher
build
A Rust .env parser that edits your secrets, and why SecretSpec forked instead of patching1 distinct publisher
security
Akrites switches on in September with 20-odd members and a one-to-10 engineer donation band1 distinct publisher
build
Amazon Q executed code from any repo you opened, and it is not the only one1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
blog.rust-lang.org
1 article · August 19, 2026
dev.to
2 articles · August 20, 2026
lwn.net
1 article · August 20, 2026
runtimewire.com
2 articles · August 20, 2026
socket.dev
1 article · August 20, 2026