XFS に脆弱性があり、生のブロック デバイス データの読み取りが可能になる

XFS ファイル システム コードに脆弱性 (CVE-2021-4155) が確認されました。この脆弱性により、ローカルの特権のないユーザーがブロック デバイスから未使用のブロック データを直接読み取ることができます。 XFS ドライバーを含む、5.16 より古い Linux カーネルのすべてのメジャー バージョンがこの問題の影響を受けます。この修正はバージョン 5.16 のほか、カーネル アップデート 5.15.14、5.10.91、5.4.171、4.19.225 などに含まれています。ディストリビューションの問題を修正するために生成されているアップデートのステータスは、Debian、RHEL、SUSE、Fedora、Ubuntu、Arch のページで追跡できます。

この脆弱性は、カーネル全体の fallocate() システム コールと機能的に類似した 4096 つの XFS 固有の ioctl(XFS_IOC_ALLOCSP) および ioctl(XFS_IOC_FREESP) の誤った動作によって引き起こされます。ブロックアライメントされていないファイル サイズを増やす場合、ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP は、次のブロック境界まで末尾バイトをゼロにリセットしません。したがって、標準ブロック サイズが 4095 バイトの XFS では、攻撃者は各ブロックから以前に書き込まれたデータを最大 XNUMX バイト読み取ることができます。これらの領域には、削除されたファイル、デフラグされたファイル、重複排除されたブロックを持つファイルのデータが含まれる場合があります。

単純なエクスプロイト プロトタイプを使用して、システムの問題をテストできます。提案された一連のコマンドを実行した後、シェイクスピアのテキストを読むことができる場合、FS ドライバーは脆弱です。デモンストレーションのために最初に XFS パーティションをマウントするには、root 権限が必要です。

ioctl(XFS_IOC_ALLOCSP) と ioctl(XFS_IOC_FREESP) は、機能的には標準の fallocate() と実質的に同じであり、唯一の違いはデータ漏洩であるため、それらの存在はバックドアに似ています。カーネル内の既存のインターフェイスを変更しないという一般的なポリシーにもかかわらず、Linus の提案により、次のバージョンではこれらの ioctl を完全に削除することが決定されました。

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

コメントを追加します