Rustの借用チェッカーに11年来の脆弱性
原題: 11 year old unsoundness bugs found in Rust borrow checker
なぜ重要か
「unsafe不要でメモリ安全性を破れる」バグの存在は、Rust採用を拡大するシステムソフトウェア・組込み分野全体の信頼性評価に直結する。
2025年10月13日、GitHubのIssue #164250にてRustの借用チェッカーに「健全性の欠陥(unsoundness)」が報告された。共変フィールドへの代入を通じてstructのライフタイム要件を回避できるこのバグは、11年間見過ごされてきた可能性があり、メモリ安全性の根幹を脅かすP-highの深刻な問題として分類されている。
Rustの型システムが保証するメモリ安全性に、長期間にわたって潜伏していた欠陥が発覚した。報告されたIssue #164250によると、structの共変(covariant)なフィールドへの代入操作を利用することで、本来enforceされるべきライフタイム要件を迂回できてしまう。これは「soundness hole」と呼ばれる、Rustにおいて最も深刻なカテゴリのバグだ。
Rustの型チームは公式コメントで「メモリ安全性の保証は最重要事項」と明言。このバグは優先度「P-high」に分類されており、仮に野外で悪用事例が報告されていなくても「P-critical」扱いになるほどの重大案件だとしている。
背景として、Rustチームは次世代のtrait solver、リージョン制約の再設計、そして「Project Zero」と呼ばれる型システム全体の健全化プロジェクトを進めてきた。今回のバグはその取り組みの最中に浮上した形だ。
影響を受けるラベルはA-borrow-checker、A-lifetimes、A-variance、A-destructorsと多岐にわたり、借用チェッカーの根本的な挙動に関わる。Rustのsubtyping・varianceの仕組みを悪用する点で、理論的には`unsafe`ブロックを使わずにメモリ不安全な操作を引き起こせる可能性がある。
issueには多数のアクセスが集中しており、型チームが修正に向けて動いていることが示されているが、現時点で具体的なパッチのリリース時期は公表されていない。