侵害されたRustクレート「onering」、アプリケーションビルド中にソースコードを窃取

Rustエコシステムで大規模なソフトウェアサプライチェーン攻撃が発生しました。脅威アクターが広く利用されているクレートを乗っ取り、アプリケーションのコンパイル中にソースコードやブラウザの認証情報、暗号資産ウォレットのデータを窃取できる悪意あるビルド時依存関係を埋め込んでいたことが分かりました。

今回の事件で影響を受けたのは、arrayrefバージョン0.3.10、append-only-vecバージョン0.1.9、internmentバージョン0.8.7です。

これらのパッケージは合計で数億回のダウンロード数を誇っており、今回のキャンペーンは下流への潜在的な影響範囲という点で、これまでに知られているRustクレート侵害の中でも最大級の事件の一つとなっています。

Aikido Securityの研究者は当初、proc-macro1という名前の不審な新規クレートを発見しました。

このパッケージは、広く利用されているRustの依存関係であるproc-macro2の説明文やドキュメントをコピーすることで、それになりすましていました。正規パッケージとの類似性は、開発者や自動化された依存関係レビュープロセスの警戒心を下げることを狙ったものでした。

このタイポスクワッティング(似た名前を使った偽装)パッケージが公開されてからおよそ1時間以内に、侵害されたarrayrefappend-only-vecのリリースに、依存関係としてproc-macro1バージョン1.0.107が追加されました。

この改ざんは、各クレートのマニフェストファイルにわずか1行を追加するだけで済んだと報告されており、目に見えるアプリケーションのソースコード自体は変更されないままでした。この点が、攻撃のステルス性を大きく高めていました。

影響を受けたパッケージのRustコードをレビューした開発者には、一見正当な内容に見えていた一方で、悪意ある挙動はproc-macro1build.rsファイル内に隠されていました。

Cargoは依存関係をビルドする際、build.rsスクリプトを自動的にコンパイル・実行します。そのため、被害者側は攻撃を実行させるために、侵害されたクレートから何らかの関数を呼び出す必要すらありませんでした。

改ざんされた依存関係を単純に解決し、Rustプロジェクトをコンパイルするだけで、開発者のワークステーションやCIランナーの権限下で任意のコード実行がトリガーされる可能性がありました。

この悪意あるスクリプトは、ベアIPアドレスでホストされたリモートサーバーから、Linux、Windows、macOSそれぞれに対応したペイロードを取得していました。攻撃者は接続先を隠すためにBase64エンコードされた文字列断片を使用し、単純なシグネチャベースの検知を回避していました。

LinuxとmacOSでは、ペイロードがディスクに書き込まれ、実行可能な状態にマークされた上で、デタッチされたバックグラウンドプロセスとして起動されていました。これにより、Cargoがビルドプロセスを完了した後もマルウェアが動作し続けることが可能になっていました。

回収されたサンプルの分析により、クロスプラットフォーム対応の情報窃取機能が確認されています。このマルウェアは、Google Chrome、Brave、Microsoft EdgeなどのChromiumベースのブラウザに保存された認証情報を標的にしていました。

また、ブラウザ拡張機能のストレージにもアクセスしており、暗号資産ウォレット拡張機能やその他のブラウザベースの認証ツールに関連するデータが露出した可能性があります。

Ilyas Makari氏も、macOS向けの永続化メカニズムを発見しています。このペイロードは、ユーザーのログイン時にマルウェアを再起動するよう設定されたLaunchAgentを作成しており、そのコマンド&コントロール基盤はリモートでのシェルコマンド実行にも対応していました。

今回の侵害は、proc-macro2のタイポスクワッティングパッケージであるproc-macro1バージョン1.0.107を利用しており、Cargoのbuild.rsメカニズムを通じて自動的に実行される仕組みでした。

このペイロードは、クロスプラットフォーム対応の情報窃取ツール兼リモートシェルとして機能し、ブラウザの認証情報やウォレット関連データを収集できました。macOSでは、バックグラウンドのLaunchAgentを通じて永続化を確立しており、ログアウトやシステム再起動を経ても存続する可能性がありました。

Rust Security Response Teamは、proc-macro1およびproc-macro-enaovinearonearonenaotinymemberといった関連する模倣パッケージを削除しました。

同チームはまた、悪意あるクレートのバージョンを取り下げ(yank)、影響を受けたメンテナーアカウントをロックしました。報告によれば、このアカウントの保有者であるBurntSushiことAndrew Gallant氏は、意図的な悪意あるパッケージ公開者ではなく、認証情報窃取の被害者であった可能性が高いとされています。

2026年8月20日のおよそ2時間の露出ウィンドウ中にRustプロジェクトをビルドした組織は、CIランナー、開発者のエンドポイント、Cargoレジストリのキャッシュ、ビルドログを調査すべきです。

各チームは、arrayrefをバージョン0.3.10未満に固定し、影響を受けたキャッシュ成果物を削除し、露出した可能性のある認証情報をローテーションするとともに、crates.ioへの公開アカウントに多要素認証を義務付けるべきです。

今回の事件は、依存関係のレビューがソースファイルだけにとどまってはならないことを示しています。ビルドスクリプトは、アプリケーションが実際に実行される前に攻撃者が制御するコードを実行できるため、ビルド設定とパブリッシャーアカウントのセキュリティは、サプライチェーン対策として極めて重要な管理項目となります。

セキュリティチームに、不審な活動をより迅速に調査し、ビジネスへの影響が拡大する前に脅威を封じ込めるための可視性とコンテキストを与えましょう。ANY.RUNで調査体制を強化する

翻訳元: https://cyberpress.org/compromised-rust-crate-onering-steals-source-code/

本記事は cyberpress.org の記事を翻訳・要約したものです。