Rustが捕らえられないバグ

2026年4月、Canonicalが GNU coreutilsをRustで再実装したuutilsにおいて44個のセキュリティ脆弱性(CVE)を開示した重大なセキュリティインシデント。Rustはメモリセーフティを謳っているが、本記事はそのセーフティがUnix APIの複雑なセマン...

2026年4月、Canonicalが GNU coreutilsをRustで再実装したuutilsにおいて44個のセキュリティ脆弱性(CVE)を開示した重大なセキュリティインシデント。Rustはメモリセーフティを謳っているが、本記事はそのセーフティがUnix APIの複雑なセマンティクスに起因するバグを防げないことを指摘している。

特に取り上げられているのはTOCTOU(Time-of-Check-to-Time-of-Use)競合状態、パス解決の問題、symlink処理の不適切さなど。興味深い点は、これらのバグが相応の技術力を持つ開発者によって書かれたRustコードに存在したことで、Rust言語の設計がUnixプログラミングの根本的な課題を完全には解決できないことを示唆している。

これは単なるコーディングエラーではなく、GNU coreutilsの数十年にわたる知見を十分に活かさず、Rustという新しい言語で再実装を試みたことの結果でもある。記事は、言語の安全性保証だけでは十分ではなく、ドメイン知識とシステムプログラミングの深い理解が重要であることを明らかにしている。

HNの反応

Rustでの記述は可能だが、Unix APIやセマンティクスの深い知識がなければ初歩的なセキュリティバグを招くという指摘が複数の開発者から上がっている。既存ソフトウェアの知見を活かさない再実装戦略への批判も目立つ。

注目コメント

「こんにちは。私はGNU Coreutilsのメンテナーの一人です。この記事をありがとうございます。興味深いトピックをカバーしていますね。私が使用した限られたRustの経験では、std::fsを使ってTOCTOU競合状態を非常に簡単に書いてしまえることに気づいています。標準ライブラリがopenatに似たAPIをいずれ備えることを望みます。ただし『パスを比較する前に解決する』というセクションの内容には異議があります。」— @collinfunk

元記事を読むHN討議を見る