Rust標準ライブラリの脆弱性

std::fs::remove_dir_all() 関数の競合状態に起因する脆弱性 (CVE-2022-21658) が Rust 標準ライブラリで確認されました。この機能を使用して特権アプリケーションの一時ファイルを削除すると、攻撃者は通常はアクセスできない任意のシステム ファイルやディレクトリを削除できる可能性があります。

この脆弱性は、ディレクトリを再帰的に削除する前にシンボリック リンクをチェックするという誤った実装が原因で発生します。シンボリックリンクの追跡を妨げる代わりに、remove_dir_all() はまずファイルがシンボリックリンクかどうかをチェックします。リンクが定義されている場合はファイルとして削除され、ディレクトリである場合は再帰的なコンテンツ削除操作が呼び出されます。問題は、チェックと削除操作の開始の間にわずかな遅延があることです。

チェックはすでに実行されていますが、削除するディレクトリを列挙する操作がまだ開始されていない時点で、攻撃者はディレクトリをシンボリック リンクを使用した一時ファイルに置き換えることができます。適切なタイミングでヒットすると、remove_dir_all() 関数はシンボリック リンクをディレクトリとして扱い、リンクが指すコンテンツの削除を開始します。攻撃の成功は、ディレクトリを置き換える選択された時間の正確さに依存し、最初に適切な瞬間にヒットする可能性は低いという事実にもかかわらず、実験中、研究者は、エクスプロイトを実行した後、再現可能な攻撃を成功させることができました。数秒。

1.0.0 から 1.58.0 までの Rust のすべてのバージョンが影響を受けます。この問題は現時点ではパッチ形式で解決されています (修正は 1.58.1 リリースに含まれる予定で、数時間以内にリリースされる予定です)。 Debian、RHEL、SUSE、Fedora、Ubuntu、Arch、FreeBSD のページで、ディストリビューションの脆弱性の除去を監視できます。昇格された権限で実行され、remove_dir_all 関数を使用している Rust プログラムのすべてのユーザーは、Rust を早急にバージョン 1.58.1 に更新することをお勧めします。興味深いのは、リリースされたパッチがすべてのシステムの問題を解決するわけではないことです。たとえば、REDOX OS および macOS 10.10 (Yosemite) より前のバージョンでは、次のシンボリックを無効にする O_NOFOLLOW フラグがないため、脆弱性はブロックされません。リンク。

出所: オープンネット.ru

コメントを追加します