Rustプロジェクトのセキュリティチームは、Cargoにおける脆弱性である CVE-2026-5222 を報告しました。
この脆弱性は、サードパーティ製レジストリが使用する sparse index (スパースインデックス) プロトコル のURL正規化処理に不備があったものです。
特定の条件下において、攻撃者がユーザーの認証トークンを取得できる可能性が指摘されています。
ただし、攻撃の成立には非常に特殊な環境が必要であるため、脆弱性の深刻度は 「低 (Low)」 と評価されています。
CVE-2026-5222の背景と発生原因
Cargoはもともと git リポジトリを利用してレジストリのインデックスを管理していました。
多くの git ホスティングサービスでは、URLの末尾に .git というサフィックスが付与されていても、同じリポジトリとしてアクセスが可能です。
そのため、Cargoは https://example.com/index と https://example.com/index.git を同一のレジストリと見なしてURLを正規化する仕様を持っていました。
この正規化処理が、新しく導入されたスパースインデックスプロトコルにも意図せず適用されていたことが今回の問題の原因です。
攻撃が成立するシナリオと条件
スパースインデックスは標準的な HTTPS サーバー上でホストされますが、サーバー側では .git サフィックスの有無で異なるコンテンツを返すことができます。
攻撃を成功させるためには、同一ドメイン内でスパースインデックスのURLと、それに対応する .git 付きのURLの両方に攻撃者が干渉できる必要があります。
もし攻撃者が .git 付きのURLに偽のレジストリを設置し、認証を要求するように設定した場合、Cargoの挙動に誤作動が生じます。
具体的には、Cargoがこれら2つのURLを同一レジストリと誤認し、正規のレジストリで使用している認証トークンを攻撃者のサーバーへ送信してしまいます。
影響を受けるバージョンと対応策
本脆弱性は、スパースレジストリ機能が安定化された Rust 1.68 から、最新の Rust 1.96 未満までのすべてのバージョンに影響します。
以下の表は、本脆弱性に関する影響範囲と修正状況をまとめたものです。
| 区分 | バージョン情報 |
|---|---|
| 影響を受けるバージョン | Rust 1.68.0 ~ Rust 1.95.0 |
| 修正済みバージョン | Rust 1.96.0 以降 |
| 修正予定日 | 2026年5月28日 |
Rust 1.96 では、.git サフィックスの削除を git プロトコルを使用する場合のみに限定するよう Cargo のコードが修正されます。
ユーザーは、2026年5月28日にリリース予定の Rust 1.96 へアップデートすること が唯一の推奨される対策です。
レジストリ設定の確認
念のため、プロジェクトの .cargo/config.toml 等で指定しているサードパーティ製レジストリのURLが正確であるかを確認してください。
# スパースインデックスを指定する例
[registries.custom-registry]
index = "sparse+https://example.com/api/v1/index"
まとめ
CVE-2026-5222 は、CargoのURL正規化処理の不備により、特定の環境下で認証情報が漏洩するリスクがある脆弱性でした。
攻撃の成立条件は限定的ですが、セキュリティを確保するために速やかなアップデートが推奨されます。
開発者の皆様は、2026年5月28日に公開される Rust 1.96 を適用し、安全な開発環境を維持してください。
今後も Cargo や Rust のセキュリティアドバイザリを注視し、最新の状態を保つことが重要です。
