SafeDepは、改ざんされたarrayrefリリースがRustのビルド中にマルウェアを実行したと述べている。

SafeDepは、8月20日に発生した侵害を記録しており、その中でarrayref 0.3.10がタイプミスで登録された依存関係を取り込み、その依存関係がコンパイル中にリモートバイナリを実行したと報告した。これはcrates.ioが悪意のあるパッケージを削除する前の出来事だった。

By · Published

Primary source: SafeDep

Why it matters

The attack abused Cargo's normal build process, showing why dependency security is moving from advisory feeds to controls that block packages before their scripts execute.

A vast digital landscape with a glowing, corrupted data package named 'arrayref' emitting tendrils of code, with a small human figure observing in the distance.

SafeDep, the supply-chain security startup co-founded by Abhisek Datta (@abh1sek), reported on August 20, 2026 that a compromised release of the widely used Rust crate arrayref downloaded and executed malware during compilation. The crates.io team subsequently removed the malicious packages, according to SafeDep. (safedep.io)

この攻撃は通常の Cargo ビルドを配信メカニズムに変えた。arrayref バージョン 0.3.10 は proc-macro1 への依存を追加しており、proc-macro1 は正当な proc-macro2 を装っていた。Cargo はその依存を自動的にコンパイルし、その依存の build.rs スクリプトはリモートサーバーからバイナリを取得して起動した。開発者は、依存関係の解決で汚染されたリリースが選択されるプロジェクトをコンパイルするだけでよかった。

Datta にとって、この事例は彼がキャリアを通じて取り組んできた問題のど真ん中にある。彼の公開バイオグラフィーは脆弱性リサーチ、リバースエンジニアリング、マルウェア解析における以前の仕事を説明し、その後セキュリティコンサルティングの 3S Labs を設立し Appsecco でテクノロジーを率いたと記す。SafeDep は現在、その経験を開発者のラップトップ、リポジトリ、コーディングエージェント、CI システムに到達する前に依存関係を検査することを目的とした製品群にまとめており、SafeDep のオープンソースのパッケージモニタ も含まれる。 (abhisek.github.io)

A same-day package chain

2026年8月20日、SafeDep によると悪意ある proc-macro1 1.0.107 と、明らかに侵害されたと思われる droundy アカウントの arrayref 0.3.10 が crates.io に出現した。 RustSec レポート は両パッケージをこのキャンペーンの一部として特定している。

なりすましは、慌ただしい依存関係レビューの最中に妥当そうに見える名前に依存していた。dtolney のパブリッシャーアカウントは、Rust メンテナである David Tolnay (@dtolnay) が使うアカウント dtolnay と一文字だけ異なる。パッケージのメタデータは偽により Tolnay を著者として挙げ、彼の GitHub アカウント下に存在しないリポジトリを指していた。入手可能な証拠は Tolnay をなりすましの標的として特定しており、彼が公開に関与していたという示唆はない。

悪意あるパッケージは実際の proc-macro2 のソースコードもコピーしていた。その選択により、依存先のビルドは追加されたビルドスクリプトが裏で動作している間も通常通り機能し続けた。SafeDep は arrayref 自体が従来のマクロ実装を保持していることを確認しており、重要な変更点は Cargo.toml の単一の依存エントリであったと指摘する。Cargo のビルドは親クレートがそれらを呼び出さない場合でも、非オプションの依存を宣言する。 (safedep.io)

SafeDep のパッケージ表は proc-macro1 の全バージョンを悪意あるタイポスクワットと分類し、クレート全体が削除されたと述べている。技術的分析はダウンローダーを含むバージョン 1.0.107 を特定し、バージョン 1.0.106 と 1.0.107 のハッシュを公開している。 (safedep.io)

The payload detached from the build

proc-macro1 のビルドスクリプトはソース内に明白な URL を残さないよう、base64 断片からサーバーアドレスを復元していた。スクリプトは TLS 経由でアーキテクチャ別のバイナリを取得し、それをビルドプロセスから切り離して起動する。Unix では /tmp/rust-setup に書き込み実行し、Windows では一時ディレクトリに PowerShell と VBScript のランチャーを作成して非表示で起動し、コンパイラが待機しないよう子プロセスを放棄する。 (safedep.io)

SafeDep は関連するファイルハッシュと 2 つのネットワーク指標を公開した:無害化したホスト 23[.]254[.]165[.]112 とポート 9089 および 443。同社の分析はダウンローダーの実行方法を確立しているが、起動後の第2段ペイロードが何をしたか、あるいは何台のシステムで実行されたかは示していない。

2026年8月20日のビルドで arrayref 0.3.10 が解決されたチームは、その正確なバージョンと proc-macro1 1.0.107 をロックファイルやビルドログで検索すべきだ。ビルドホストはまた Unix 上の /tmp/rust-setup、Windows 上の rust-setup.ps1rust-setup-launch.vbs、および公開されたネットワーク指標への接続をチェックする必要がある。コンパイルが成功していることはホストが安全であることを意味しない;コピーされたライブラリコードはビルドを成功させるよう設計されていた。

Yanking the safe releases created the lure

SafeDep と RustSec レポートによれば、arrayref を制御するアカウントはバージョン 0.3.5 から 0.3.9 を yanked(撤回)した。Cargo は選択されたリリースが yanked されている場合にユーザーに警告し、利用可能な別のリリースに移ることを提案する。当時、その経路は 0.3.10 を指していた。パッケージに遭遇した報告者は、その警告が汚染されたバージョンに至るきっかけだったと述べている。 (github.com)

その操作は、依存名を誰かがタイプミスするのを待つのではなく、実在するパッケージに対する開発者の信頼を悪用した。arrayreftiny-skiasctk-adwaitawinit などを含むパッケージを通じて Rust の GUI の依存グラフの深いところに現れ、egui、eframe、iced などのフレームワークの下層に位置している。

SafeDep は arrayref の全期間ダウンロード数を約 2.45 億回と数え、そのうちクリーンな 0.3.9 リリースは約 1.52 億回であったとした。これらの数字は長年の利用を測ったものであり、0.3.10 に晒されたマシンの数を示すものではない。関連する分母は、悪意あるリリースの公開ウィンドウ中に完了した依存解決とビルドの回数であり、公開された分析はそれを提供していない。 (safedep.io)

Datta's pre-install bet gets another test

Datta はパッケージのセキュリティは実行の前に移動しなければならないという判断をもとに SafeDep を構築している。SafeDep はそのパッケージファイアウォールが公開レジストリと開発者マシン、CI ランナー、または AI コーディングエージェントの間に置かれ、インストールやビルドスクリプトが実行される前に依存関係をブロックできると述べている。SafeDep はまた依存関係レビューとパッケージインターセプトのためのオープンソースツールも維持している。これらは SafeDep のコントロールに関する同社の主張であり、同社のソフトウェアがこの特定の Rust インシデントを阻止したという証拠ではない。 (safedep.io)

競合他社も同じ強制ポイントでコントロールを販売している。 Endor Labs introduced Package Firewall は5月に導入され、Socket announced a $60 million Series C at a $1 billion valuation は自社の行動ベースのパッケージ解析およびブロッキング製品を拡張する中で1億ドル(6,000万ドルのシリーズ C)を発表した。

arrayref の妥協は、パッケージの評判やクリーンなアプリケーションビルドは、アプリケーションが存在する前に実行され得るコードを公表できる攻撃者に対してほとんど保護を提供しない、という SafeDep の事前実行(pre-execution)論を Rust に提示する。

このキャンペーンは、明らかに侵害されたと思われる droundy メンテナアカウントと、別の dtolney なりすましアカウントを組み合わせ、信頼されたパッケージともっともらしい依存関係を使ってコードを Cargo ビルドに挿入した。Datta の賭けは、開発者がそのコードが実行される前に判断を下せるコントロールに対して支払うだろうということだ。

Reader comments

Conversation for this story loads after sign-in.