本文へ移動

arrayref など人気 crate 3 つに悪意あるバージョン、crates.io 公開は最長 107分

crates.io で arrayref など人気 crate に悪意あるバージョンが公開され、最長 107分で削除された。Rust Blog が案内する find コマンド 1 本での確認手順と、公開・削除の時系列を整理する。

107分 悪意あるバージョンが crates.io に公開されていた最長時間 append-only-vec@0.1.9 が 2026-08-20 07:37:49〜09:25:24 UTC に公開(Rust Blog 記載の公開・削除時刻より)

  • rust
  • security
  • cargo
目次
  1. 確認は find 一本で済む
  2. 公開から削除まで、最長でも 107分
  3. 起点は proc-macro1、arrayref は依存を書き換えられた
  4. ヒットした場合の判断材料はまだ少ない
  5. 一次情報

2026 年 8 月 20 日(UTC)、crates.io で人気 crate の arrayref を含む複数の crate に悪意あるバージョンが公開された。Rust の Security Response Team が同日中にすべて削除している。公開されていた時間は最短 86分、最長 107分だった。

Rust Blog が利用者に求めているのは一つで、手元の cargo キャッシュに該当バージョンが残っていないかの確認だ。

確認は find 一本で済む

Rust Blog は、該当 crate がローカルで使われたかを ~/.cargo/registry/cache で素早く確かめるコマンドを載せている。

find ~/.cargo/registry/cache -type f \( \
  -name 'append-only-vec-0.1.9.crate' -o \
  -name 'arrayref-0.3.10.crate' -o \
  -name 'internment-0.8.7.crate' -o \
  -name 'proc-macro1-*.crate' -o \
  -name 'proc-macro-en-*.crate' -o \
  -name 'aovine-*.crate' -o \
  -name 'arone-*.crate' -o \
  -name 'aronenao-*.crate' -o \
  -name 'tinymember-*.crate' \
\) -print

対象は 9 種類ある。arrayref@0.3.10、internment@0.8.7、append-only-vec@0.1.9 の 3 つはバージョン指定で、proc-macro1、proc-macro-en、aovine、arone、aronenao、tinymember の 6 つは全バージョンが対象だ。proc-macro1 を自分で Cargo.toml に書いた覚えがなくても、書き換えられた arrayref@0.3.10 が依存として引き込む構造だったので、9 つすべてを機械的に確認する。何も出なければ、これらはローカルに取得されていない。

ブログが挙げているのは、開発者のローカル環境での確認だ。

公開から削除まで、最長でも 107分

削除された 3 つのバージョンについては、公開と削除の時刻がブログに載っている。

crate公開(UTC、8 月 20 日)削除(同日)公開されていた時間
arrayref@0.3.107 時 15 分8 時 41 分86分
internment@0.8.77 時 34 分9 時 4 分90分
append-only-vec@0.1.97 時 37 分9 時 25 分107分

出典:Rust Blog「Supply chain attack on arrayref」(2026 年 8 月 20 日)。時刻は分単位に丸めた。

JST に直すと 8 月 20 日 16 時 15 分から 18 時 25 分にあたる。ブログは対象になる環境の条件をこれ以上特定しておらず、利用者に求めているのは上の find コマンドによる確認だ。

ただし proc-macro1 系の 6 つは公開期間がブログに書かれていない。公開・削除の時刻が分かっているのは上の 3 バージョンだけだ。

起点は proc-macro1、arrayref は依存を書き換えられた

8 月 20 日 7 時 15 分(UTC)、proc-macro1 という crate が悪意あるものだという報告が Rust チームに届いた。Security Response Team が検証したところ、build script が悪意あるペイロードをダウンロードしていた。同系統の proc-macro-en、aovine、arone、aronenao、tinymember もあわせて削除されている。

さらに、arrayref が直近で再公開され、この proc-macro1 に依存するよう書き換えられていた。直近の正規バージョンは yank されていた。Cargo の文書によれば、yank されたバージョンは既存の lockfile からは引き続き取得できるが、lockfile を持たない新しい依存解決には使われない。攻撃者の意図までブログは書いていないが、再公開と yank が併せて見つかったことは書かれている。チームは悪意ある 0.3.10 を削除し、yank を元に戻した。同じ作者の internment と append-only-vec も同様の状態だったため、同じ対応が取られている。

作者本人が悪意を持って動いたとは Rust チームは見ていない。マシンか credentials が侵害された可能性が高いとして、アカウントは予防的にロックされた。ブログの公開時点では、本人への連絡を試みていると書かれている。最初の発見と報告は Nextron Systems GmbH のリサーチチームによる。

ヒットした場合の判断材料はまだ少ない

find で該当ファイルが見つかった場合に何をすべきかは、ブログに書かれていない。ペイロードの中身についての記載もなく、分かっているのは「build script が悪意あるペイロードをダウンロードした」という挙動までだ。

何も出なければ、ブログが利用者に求める確認はそこまでだ。悪意あるバージョンは crates.io から削除済みで、yank されていた正規バージョンも復元されている。

一次情報

出典