Rustの脆弱性対応では、ビルドに使うRust本体(Cargo)、Cargo.lockの依存、配備済みのバイナリを分けて確かめます。ここでは2026年に公表された主な脆弱性と、自分の環境が対象かを確かめる方法をまとめます。
- 安全性の更新を受けるのは最新の安定版だけです。11月1日時点では1.99.1です。
- rust-opensslとzipの2026年の脆弱性は、11月1日時点でcargo auditが使うRustSecに記録がありません。OSV-Scannerを合わせて使います。
- 依存はバイナリに組み込まれるため、lockファイルを直したあと、再ビルドと配備まで確かめます。
01Rustで今確かめたい脆弱性
2026年に公表されたもののうち、Rust本体(Cargo)と、よく使われるクレートで確かめておきたいものです。米CISAのKEV(悪用が確認された脆弱性の一覧、10月30日版)には、Rust本体・クレートの項目は見当たりませんでした。[1]
| 脆弱性・問題 | 主な対象・条件 | 修正・対応 | 詳細 |
|---|---|---|---|
| zipクレート CVE-2026-115905 | 9.0.4以下。ZIPの検査と展開で別の読み方をする構成。提供元の評価でCVSS 4.0の10.0(緊急) | 9.1.0以上に上げ、既定で無効の検査を有効にする | 解説記事[2] |
| openssl(rust-openssl) CVE-2026-41681 ほか | 0.10.77以下(件ごとに始まりの版が異なる)。safe Rustから呼べるAPIでバッファを越えて書き込むおそれ。GitHub Advisoryの記載でCVSS 4.0の8.1(高) | 0.10.78で4月の5件、0.10.79・0.10.80で5月の3件が修正。0.10.80以上へ | 提供元のアドバイザリ[3] |
| Cargo(tarの展開) CVE-2026-33056 | Rust 1.94.0以前のCargo。悪意のあるクレートが任意のディレクトリの権限を変えるおそれ。crates.ioでは悪用するクレートは見つかっていない | Rust 1.94.1以上 | Rust公式[4] |
| Cargo(シンボリックリンク) CVE-2026-5223 | Rust 1.96.0より前のCargoで、他社のレジストリを使う場合。crates.ioの利用者は対象外。深刻度は中 | Rust 1.96.0以上 | Rust公式[5] |
| tokio CVE-2026-115567 | 1.54.0だけ。マルチスレッドのランタイムでIntervalを使うと、クラッシュやuse-after-freeのおそれ | 1.54.1以上。1.54.0は取り下げ(yank)済み | RustSec[6] |
| rustls-webpki/webpki-roots CVE-2026-111943 | 信頼を取り消されたemSignの中間証明書を含む証明書の経路を受け入れるおそれ | rustls-webpki 0.103.16以上、webpki-roots 1.0.10以上 | RustSec[7] |
このほか、8月20日(日本時間16時15分ごろ)にarrayref 0.3.10が悪意のある依存を含む形で公開され、約86分後に削除されました。Rust公式は、手元のキャッシュに該当のクレートがあるかをfindで確かめ、見つかれば侵害された可能性のある環境として調べるよう案内しています。[8]
02Rust本体のサポート期限と更新先
Rustには長期サポートの系列がなく、安全性の更新を受けられるのは最新の安定版だけです。[9] 安定版は6週間ごとに出ます。[10]11月1日時点の最新は、10月15日公開の1.99.1です。[11]
| 系列 | 状態 | 今上げる先 |
|---|---|---|
| 1.99系(1.99.1) | サポート対象(最新の安定版) | rustup update stableで1.99.1へ |
| 1.96〜1.98系 | サポート外。Cargoの既知の2件は修正済み | 1.99.1へ |
| 1.94.1〜1.95系 | サポート外。CVE-2026-5223が残る | 1.99.1へ |
| 1.94.0以前 | サポート外。CVE-2026-33056とCVE-2026-5223が残る | 1.99.1へ |
Rustは実行環境を持たず、コンパイラと標準ライブラリはビルドのときに使われます。そのため本体の更新が効くのは、ビルドに使う端末・CIの環境です。OSの配布するRustは、そのOSの提供元の案内で修正の取り込みを確かめます。
03Rustの依存関係の脆弱性を確かめる方法
定番はRustSecのデータベースを使うcargo auditです。Cargo.lockを調べます。[12]
cargo install cargo-audit --locked
cargo auditRustSecには、11月1日時点でrust-opensslの2026年の8件と、zipのCVE-2026-115905の記録がありません。[13] GitHub Advisory Databaseも参照するOSV-Scannerを合わせて使うと、この差を埋められます。[14]
osv-scanner scan -L Cargo.lockビルド済みのバイナリはcargo audit binで調べます。cargo auditableで作ったバイナリなら依存の一覧が埋め込まれていて正確に調べられます。そうでないバイナリでは一部しか分からず、OpenSSLのような埋め込みのCのコードは見落とします。[12]
cargo install cargo-auditable --locked
cargo auditable build --release
cargo audit bin target/release/<バイナリ名>04Rustの脆弱性の確認の進め方
- Cargo.lockを正にする:実際に使われる版は
Cargo.tomlではなくCargo.lockで決まります。cargo tree -i opensslで、どの依存が引き込んでいるかを確かめ、cargo update -p opensslで上げます。 - 取り下げられた版は残る:tokio 1.54.0は取り下げられましたが、既存の
Cargo.lockに書かれた版はそのまま使われます。[15]cargo updateで上げ、lockファイルの差分を確かめます。 - 本番のバイナリを作り直す:Rustの依存はバイナリに静的に組み込まれるため、lockファイルを直しても、再ビルドして配備するまで本番は変わりません。コンテナでは、動いているイメージのバイナリを
cargo audit binで調べます。 - ビルド環境の版:
rust-toolchain.tomlやCIのイメージで古い版を固定していると、Cargoの脆弱性が残ります。cargo --versionをCIの記録で確かめます。 - Cのライブラリ:opensslクレートは、vendored機能を使わない場合はOSのOpenSSLに結び付くため、クレートとは別にOSのOpenSSLの更新も確かめます。
05Rustの解説記事
よくある質問
cargo auditで何も出なければ、対応は不要ですか?
不要とは言えません。cargo auditはRustSecのデータベースだけを見ます。11月1日時点で、rust-opensslの2026年の脆弱性とzipのCVE-2026-115905はRustSecに記録がないため、OSV-ScannerなどでCargo.lockを合わせて調べます。
Rustはメモリ安全なのに、なぜメモリ破壊の脆弱性が出るのですか?
Cのライブラリを呼ぶ部分や内部の誤りで起きることがあります。rust-opensslのCVE-2026-41681はOpenSSLを呼ぶ部分の長さの確かめ漏れで、提供元はsafe Rustから到達できると説明しています。tokioのCVE-2026-115567も、safe Rustのコードでuse-after-freeが起きるおそれがあるものです。
Rustを1.99.1に上げれば、クレートの脆弱性も直りますか?
直りません。本体の更新で直るのはCargoなどの道具の問題です。クレートはcargo updateでCargo.lockの版を上げ、再ビルドして配備します。
出典・参考資料
- CISA:Known Exploited Vulnerabilities Catalog2026-10-31(10月30日版) / KEVにRust本体・クレートの項目がないこと
- zip-rs:GHSA-m665-v7pm-7grj(CVE-2026-115905)2026-10-18 / zipの対象・修正版・深刻度
- rust-openssl:セキュリティアドバイザリ(GHSA-ghm9-cr32-g9qj ほか)2026-04-23・05-06・05-08・05-20 / rust-opensslの対象・修正版・CVSS、safe Rustからの到達
- Rust公式:Security advisory for Cargo (CVE-2026-33056)2026-03-21 / Cargoのtar展開の問題と修正版1.94.1
- Rust公式:Security advisory for Cargo (CVE-2026-5223)2026-05-25 / 他社レジストリの対象、修正版1.96.0、深刻度
- RustSec:RUSTSEC-2026-0384(tokio)2026-10-21 / tokio 1.54.0の対象・修正版・取り下げ
- RustSec:RUSTSEC-2026-0382(rustls-webpki)・RUSTSEC-2026-0381(webpki-roots)2026-10-19・10-20 / emSignの中間証明書の問題と修正版
- Rust公式:Supply chain attack on arrayref2026-08-20 / arrayref 0.3.10の公開・削除の時刻と確かめ方
- Rust公式:Security policy安全性の更新は最新の安定版だけ
- The Rust Programming Language:Appendix G - How Rust is Made and “Nightly Rust”6週間ごとの安定版
- Rust公式:Announcing Rust 1.99.12026-10-15 / 最新の安定版と更新のコマンド
- RustSec:cargo-audit READMEcargo audit、cargo audit binとcargo auditable
- RustSec:advisory-db(crates/openssl・crates/zip)2026-11-01確認 / RustSecにrust-opensslの2026年の記録とzipのCVE-2026-115905の記録がないこと
- OSV-Scanner:Usagelockファイルの検査のコマンド
- The Cargo Book:cargo yank取り下げられた版と既存のlockファイル
