要約
-
Canonicalが2026年4月にuutilsを監査した結果、本番Rustコードに44件のCVEが発見された。借用チェッカー、clippy、cargo auditのいずれも検出できなかった。
主なポイント
-
TOCTOUバグが大半を占める:Rustの使いやすいパスAPI(
fs::metadata、File::create)はシステムコールのたびにパスを再解決するため、ステップ間でシンボリックリンクを差し替える攻撃が可能になる。
-
OpenOptions::create_new(true) を使えば、削除と生成の間にシンボリックリンクを仕込まれるのを防げる。既存ファイルを操作する場合は、パスではなくファイルディスクリプタを起点にする。
-
パスの文字列比較はファイルシステム上の同一性を保証しない。
canonicalize() を使うか、GNU coreutilsと同様に (dev, inode) ペアで比較する。
-
from_utf8_lossy はバイナリデータを無音で破損させる。Unixのストリームツール(comm、cut、tr)はシステム境界では OsStr や &[u8] を使いバイト列のまま扱う必要がある。
-
入力処理コード内の
unwrap/expect はすべてDoSの入り口になりうる。テストコード以外のスコープに unwrap_used、expect_used、panic リントを適用して封じること。
Hacker Newsコメント
原文 | HNで議論
英語版: Bugs Rust Won’t Catch · Original source