Rustが検出できないバグ

· coding · Source ↗

要約

  • Canonicalが2026年4月にuutilsを監査した結果、本番Rustコードに44件のCVEが発見された。借用チェッカー、clippy、cargo auditのいずれも検出できなかった。

主なポイント

  • TOCTOUバグが大半を占める:Rustの使いやすいパスAPI(fs::metadataFile::create)はシステムコールのたびにパスを再解決するため、ステップ間でシンボリックリンクを差し替える攻撃が可能になる。
  • OpenOptions::create_new(true) を使えば、削除と生成の間にシンボリックリンクを仕込まれるのを防げる。既存ファイルを操作する場合は、パスではなくファイルディスクリプタを起点にする。
  • パスの文字列比較はファイルシステム上の同一性を保証しない。canonicalize() を使うか、GNU coreutilsと同様に (dev, inode) ペアで比較する。
  • from_utf8_lossy はバイナリデータを無音で破損させる。Unixのストリームツール(comm、cut、tr)はシステム境界では OsStr&[u8] を使いバイト列のまま扱う必要がある。
  • 入力処理コード内の unwrap/expect はすべてDoSの入り口になりうる。テストコード以外のスコープに unwrap_usedexpect_usedpanic リントを適用して封じること。

Hacker Newsコメント

  • 現時点では有意な議論なし。

原文 | HNで議論


英語版: Bugs Rust Won’t Catch · Original source