Linux カーネルの脆弱性により、読み取り専用ファイルが破損する可能性があります

Linux カーネル (CVE-2022-0847) で脆弱性が確認されました。この脆弱性により、読み取り専用モード、O_RDONLY フラグで開かれたファイル、ファイル システム上にあるファイルなど、あらゆるファイルのページ キャッシュの内容が上書きされる可能性があります。読み取り専用モードでマウントされます。 実際には、この脆弱性を利用して任意のプロセスにコードを挿入したり、開いているファイルのデータを破損したりする可能性があります。 たとえば、sshd プロセスのauthorized_keys ファイルの内容を変更できます。 このエクスプロイトのプロトタイプはテストに利用できます。

この問題は、2016 年に特定された重大な脆弱性 Dirty COW と同様に、Dirty Pipe というコードネームで呼ばれています。 危険レベルの点では、Dirty Pipe は Dirty COW と同じレベルですが、操作ははるかに簡単であることに注意してください。 この脆弱性は、ログ サーバーから圧縮アーカイブをダウンロードするシステムで、ネットワーク経由でダウンロードされたファイルが定期的に破損するという苦情の分析中に特定されました (ロードされたシステムでは 37 か月間で 3 件の破損)。その準備には splice() オペレーションが使用されていました。そして名前のないパイプ。

この脆弱性は、5.8 年 2020 月にリリースされた Linux カーネル 11 から出現します。 Debian 20.04 には存在しますが、Ubuntu 8 LTS のベース カーネルには影響しません。 RHEL 15.x カーネルと openSUSE/SUSE 5.16.11 カーネルは、当初は古いブランチに基づいていますが、問題の原因となった変更がそれらにバックポートされた可能性があります (正確なデータはまだありません)。 Debian、SUSE、Ubuntu、RHEL、Fedora、Gentoo、Arch Linux のページで、ディストリビューション内のパッケージ更新の公開を追跡できます。 この脆弱性の修正は、リリース 5.15.25、5.10.102、および XNUMX で提案されました。 この修正は、Android プラットフォームで使用されるカーネルにも含まれています。

この脆弱性は、構造体の割り当て時や特定の操作中にメモリがクリアされないにもかかわらず、関数 copy_page_to_iter_pipe() および Push_pipe() のコード内で「buf->flags」値が初期化されていないことが原因で発生します。名前のないパイプ、別の操作からの値。 この機能を使用すると、権限のないローカル ユーザーは、フラグ内の PIPE_BUF_FLAG_CAN_MERGE 値の外観を実現できます。これにより、特別に用意された名前のないパイプに新しいデータを書き込むだけで、ページ キャッシュ内のデータの上書きを整理できます。

攻撃の場合、ターゲット ファイルは読み取り可能である必要があり、パイプへの書き込み時にアクセス権がチェックされないため、読み取り専用でマウントされたパーティションにあるファイル (たとえば、CD-ROM にあるファイルなど) についてもページ キャッシュで置換が行われる可能性があります。ロム)。 ページ キャッシュ内の情報を置き換えた後、ファイルからデータを読み取るときに、プロセスは実際のデータではなく、置き換えられたデータを受け取ります。

操作は、結局のところ、名前のないチャネルを作成し、それに関連付けられたすべてのリング構造に PIPE_BUF_FLAG_CAN_MERGE フラグが設定されていることを確認するために、それに任意のデータを入力することになります。 次に、データがチャネルから読み取られますが、フラグは、pipe_inode_info リング構造内の Pipe_buffer 構造のすべてのインスタンスに設定されたままになります。 次に、 splice() の呼び出しが行われ、目的のオフセットから開始して、ターゲット ファイルから名前のないパイプにデータが読み取られます。 この名前のないパイプにデータを書き込むとき、PIPE_BUF_FLAG_CAN_MERGE フラグが設定されているため、pipe_buffer 構造体の新しいインスタンスを作成する代わりに、ページ キャッシュ内のデータが上書きされます。

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

コメントを追加します