🌐 This article hasn't been translated yet — showing the Japanese version.
cargo buildしただけで感染――Rustのproc-macro2なりすましでサプライチェーン攻撃 thumbnail
SUPPLY CHAIN Importance High 2026-08-23

cargo buildしただけで感染――Rustのproc-macro2なりすましでサプライチェーン攻撃

⏱ approx. 2 min views 47 likes 0 LOG_DATE:2026-08-23
TOC

proc-macro2になりすまし、build.rsで即実行 #

2026年8月20日、Rustのパッケージレジストリcrates.ioで、広く使われるarrayrefinternmentappend-only-vecの3クレートが改ざんされた。攻撃者は事前にproc-macro2の作者を装ったGitHub/crates.ioアカウントを用意し、正規のproc-macro2を複製した「proc-macro1」を公開。数時間後、ビルドスクリプトにペイロード取得コードを仕込んだ武器化版に差し替えた。改ざんされた3クレートの最新版はこのproc-macro1への依存を新規に追加しており、依存ツリーに紛れ込んだ状態で配布された。arrayrefだけでも累計2億4,500万DL、依存クレート403件という規模で、Rust環境の4分の3に存在するとWizは報告している。

1. なりすまし登録
proc-macro2作者を装ったGitHub/crates.ioアカウントを作成。
2. 無害版を公開
ビルドスクリプトなしの複製版 1.0.106 を公開し様子を見る。
3. 武器化版に差し替え
約5時間後、ペイロード取得コード入りの 1.0.107 へ更新。
4. 依存経由で拡散
arrayref 等3クレートが新規依存として取り込み、build.rsで自動実行。

cargo buildしただけで感染が成立する #

Rustのビルドスクリプト(build.rs)は依存解決後にコンパイラが自動実行する仕組みで、成果物を配布・実行する必要すらない。武器化版proc-macro1のbuild.rsは、Base64で分割したURL断片を実行時に結合し、証明書を無条件に受理する独自TLS実装でペイロードを取得。OS判定のうえUnixでは実行ファイル、Windowsでは非表示PowerShell経由で起動する。ビルド自体は正常終了しテストも通過するため、CIログを見ても気付けない。ライブラリ本体のソースは無改変という点も発見を遅らせた。

開発者・CI管理者が今すぐ確認すべきこと #

依存関係の自動更新やlockfile未固定の環境は特に危険で、CIのビルドマシンが即座に侵害対象になる点はサプライチェーン攻撃の定石そのものだ。Cargo.lockのコミット必須化、依存追加時の差分レビュー、CI環境でのアウトバウンド通信制限が実効的な防御になる。crates.io側の新規メンテナ本人確認の強化も今後の焦点になりそうだ。

2.4億
arrayref累計DL数
403件
arrayref依存クレート数
75%
Rust環境での存在率(Wiz調べ)
𝕏 Post B! Hatena

COMMENTS 0

No comments yet — be the first to leave one.

Post a comment