Rustセキュリティレスポンスチームは、2026年5月25日、パッケージマネージャーであるCargoにおけるシンボリックリンクの処理に関する脆弱性 (CVE-2026-5223) を報告しました。
この問題は、サードパーティ製のレジストリからダウンロードされたクレートのtarball内に含まれる、シンボリックリンクの不適切な処理に起因するものです。
悪意のあるクレートを利用することで、同じレジストリに属する他のクレートのソースコードが上書きされる危険性があります。
幸いなことに、公式の crates.io を利用しているユーザーはこの脆弱性の影響を受けません。
本記事では、この脆弱性の詳細と、2026年5月28日にリリース予定のRust 1.96.0による対策について解説します。
脆弱性の概要 (CVE-2026-5223)
Cargoはクレートをビルドする際、そのソースコードをローカルキャッシュ (通常は ~/.cargo 内) に展開し、将来のビルドで再利用します。
通常、Cargoには展開先のキャッシュディレクトリ外にファイルが作成されるのを防ぐ保護機能が備わっています。
しかし、今回発見された脆弱性では、巧妙に細工されたtarballを用いることで、キャッシュディレクトリの1階層下にファイルを展開できることが判明しました。
現在のキャッシュ構造では、この動作によって同じレジストリに属する他のクレートのキャッシュを上書きすることが可能になってしまいます。
キャッシュディレクトリの構造例
以下は、Cargoが管理するレジストリキャッシュの構造を概念的に示したものです。
~/.cargo/registry/src/
└── github.com-1ecc6299db9ec823/
├── malicious-crate-0.1.0/ <-- 悪意のあるクレート
└── target-crate-1.0.0/ <-- 上書きの対象となるクレート
影響範囲と深刻度
この脆弱性の深刻度は、サードパーティ製レジストリを利用しているユーザーにとって 「中 (Medium)」 と評価されています。
影響を受けるのは、Rust 1.96.0より前のすべてのバージョンのCargoです。
なお、crates.io ではシンボリックリンクを含むクレートのアップロードを禁止しているため、直接的な被害は確認されていません。
| 対象 | 影響の有無 |
|---|---|
| crates.io 利用ユーザー | 影響なし |
| サードパーティレジストリ利用ユーザー | 影響あり |
| Rust 1.96.0 未満の全バージョン | 脆弱性が存在 |
対策とRust 1.96.0へのアップデート
この問題に対する恒久的な対策として、2026年5月28日にリリースされるRust 1.96.0 で修正が行われます。
最新のCargoでは、レジストリの種類に関わらず、クレートのtarball内に含まれるすべてのシンボリックリンクの展開を拒否するように変更されます。
Cargoの標準機能である cargo package や cargo publish では、もともとシンボリックリンクが追加されることはないため、通常の開発への影響は最小限に留まります。
すぐにアップデートが困難な環境では、利用しているレジストリ内にシンボリックリンクを含むクレートが存在しないか監査することが推奨されます。
また、レジストリ側の設定でシンボリックリンクを含むアップロードを拒否するよう構成することも有効な回避策となります。
まとめ
今回の脆弱性 (CVE-2026-5223) は、サードパーティ製レジストリを利用する環境においてソースコードが改ざんされる恐れのある重要な問題です。
2026年5月28日に公開される Rust 1.96.0 への速やかなアップデート を計画してください。
安全な開発環境を維持するために、公式のセキュリティアドバイザリを定期的に確認し、ツールチェーンを最新の状態に保つことが肝要です。
