調整型サプライチェーン攻撃がビルド時マルウェアで人気のRustクレートを侵害
重要ポイント
- •Rustクレートarrayref、internment、append-only-vecの悪意あるバージョンは、Cargoビルド中にマルウェアを実行するproc-macro2のタイポスクワットであるproc-macro1に依存するよう改変されていた。
- •このクロスプラットフォーム型インプラントはLinux、macOS、Windowsのシステムに感染し、システム情報やChromium系ブラウザの閲覧データを収集するとともに、持続性とコマンド&コントロール通信を確立した。
- •Rustセキュリティ対応チームは汚染されたリリースを削除してメンテナーのアカウントをロックし、メンテナーが悪意を持って行動したのではなく、開発者のマシンまたは公開用クレデンシャルが侵害された可能性が高いと結論づけた。
- •arrayrefは約1億5200万回ダウンロードされており、Solana関連コンポーネントを含む依存ツリーに含まれるため、開発者マシンやCI/CDインフラ全体に広範な攻撃面をもたらしている。
- •Cargoは新しい依存ツリーの計算時にはyank済みバージョンをスキップするが、Cargo.lockファイルにすでに記録されたバージョンは尊重するため、実際のリスク曝露は各プロジェクトのピン留めされたロックファイル次第である。

2026年8月20日、セキュリティ研究者らは、crates.ioに公開されていた広く利用されている3つのRustクレートに対する組織的なサプライチェーン攻撃を特定した。侵害されたパッケージ(arrayref バージョン0.3.10、internment 0.8.7、append-only-vec 0.1.9)は、標準的なコンパイル中にリモートコードを実行する悪意ある依存関係を含むよう改変されていた。Rustセキュリティ対応チームは迅速に影響を受けたリリースを削除し、メンテナーのアカウントをロックした。同チームは、正当な開発者のマシンまたは公開用クレデンシャルが侵害された可能性が高いのであり、メンテナー自身が悪意を持って行動したわけではないと述べた。
タイポスクワットされた依存関係がペイロードを配信
この攻撃では、正当なproc-macro2ライブラリを装ったproc-macro1という名前のタイポスクワット(類似名偽装)クレートが悪用された。Cargoがこの依存関係を解決すると、Base64で難読化されたデータからコマンド&コントロール(C2)アドレスを再構築し、TLS検証を無効化し、攻撃者が管理するサーバーからプラットフォーム固有のペイロードをダウンロードする悪意あるビルドスクリプトが自動的に実行された。侵害はビルド時に発生したため、悪意あるクレートのいずれかに推移的に依存するプロジェクトを単にコンパイルするだけで、アプリケーションコードが不審な関数を直接呼び出していなくても、開発者のワークステーションや継続的インテグレーション(CI)ホストが感染する可能性があった。
この偽装は、Rustで最も遍在する構成要素の1つを標的としていた。proc-macro2は公開済みクレートの多くでマクロ処理を支えており、crates.io、npm、PyPIなどのレジストリはパッケージ名を先着順で割り当てている。この方針により、タイポスクワットは言語エコシステム全体で長らく好まれるサプライチェーン攻撃手法となってきた。
クロスプラットフォームで動作するバックドア
このマルウェアはLinux、macOS、Windowsで動作した。LinuxとmacOSでは、実行ファイルを一時ディレクトリにドロップし、デタッチ状態で起動した。Windowsでは、PowerShellとVisual Basicのスクリプトを配置して実行ポリシーを回避し、非表示のプロセスを実行した。第2段階のバックドアはその後、感染システムのプロファイリングを行い、ユーザー名、ホスト名、インストール済みアプリケーション、Chromium系ブラウザの閲覧データを収集した。また、レジストリのRunキー、systemdのユーザーサービス、macOSのLaunchAgentを通じてユーザーレベルの持続性を確立し、コマンド&コントロール(C2)エンドポイントとの通信を維持しながら、さらなる実行や設定変更のためのリモート指示をサポートした。
セキュリティ企業Socketは、X上でこの侵害について報告した:
Popular Rust crates compromised: Affected versions of arrayref, internment, and append-only-vec were modified to depend on proc-macro1, a malicious typosquat of proc-macro2. Its build script downloaded and executed malware during Cargo builds. Analysis:
— Socket (@SocketSecurity), August 20, 2026
より広範なエコシステムへの影響と対応策
この事件は、Rustエコシステムと隣接するブロックチェーンインフラに重大な影響を及ぼす。侵害前にarrayrefだけで約1億5200万回ダウンロードされており、Solana関連コンポーネントや人気のグラフィカルインターフェースフレームワークを含む依存ツリー内に位置している。悪意あるバージョンを明示的に解決してビルドしない限り下流プロジェクトが必然的に侵害されるわけではないが、このクレートの広範な推移的利用は、機密性の高いトークンや署名素材が保持されがちな開発環境、CI/CDパイプライン、自動化されたリリースインフラにまたがる広大な攻撃面を生み出している。
この出来事は、レジストリ侵害のより大きな波の中で起きたものでもある。2025年8月には、rk0xとして追跡されるキャンペーンが盗まれたメンテナーのクレデンシャルを悪用して人気Rustクレートのマルウェア混入版を公開し、ブラウザのクレデンシャルや暗号資産ウォレットを収集した。また、npmやPyPIも独自のタイポスクワットおよびアカウント乗っ取りキャンペーンに繰り返し見舞われている。2024年3月のXZ Utilsバックドアも同様に、単一の広く利用されるオープンソースライブラリが、膨大な数の下流システムに到達し得るボトルネックになり得ることを示した。
調査担当者は、攻撃者が管理する追加のステージングクレート(proc-macro-en、aovine、arone、aronenao、tinymember)を特定し、これらはその後レジストリから削除された。脅威アクターはさらに、arrayrefの以前の正当なバージョンをyank(取り下げ)しており、管理者が介入する前に依存関係の解決を悪意あるリリースへ誘導しようとした可能性がある。Cargoの解決ルールでは、新しい依存ツリーを計算する際にyank済みバージョンはスキップされるが、Cargo.lockにすでに記録されているバージョンはビルドが続行されるため、実際のリスク曝露はレジストリの状態だけでなく、ピン留めされたロックファイルに依存する。
組織には、影響を受けたバージョンおよび関連インジケーターについて、Cargo.lockファイル、依存関係インベントリ、ビルドログを監査することが推奨される。悪意あるリリースのいずれかをコンパイルしたシステムは、侵害された可能性があるものとして扱うべきであり、ビルド環境からアクセス可能なシークレットのローテーション、既知のネットワークおよびホストアーティファクトのフォレンジック調査、検証済みのクリーンな環境からのソフトウェア再ビルドが必要となる。防御者はまた、特定されたコマンド&コントロール(C2)インフラへの接続や、このインプラントに関連する決定論的ドメイン生成アルゴリズムの出力も監視すべきである。エコシステムのツールもこのトリアージを支援する。cargo treeはレビュー対象の推移的依存関係を列挙し、cargo audit経由で利用されるRustSecアドバイザリデータベースは既知の脆弱なクレートバージョンを記録している。
出典: Metaverse Post