Linux Kernel ksmbd Filesystem Vulnerability Exploited – PoC Released
2025/10/09 CyberSecurityNews — Linux Kernel の ksmbd モジュールに存在する、深刻な脆弱性に対する完全な PoC エクスプロイトを、セキュリティ研究者たちが公開した。それが実証するのは、認証済みローカル攻撃者によるローカル権限昇格の確実な経路である。この脆弱性 CVE-2025-37947 は境界外書き込みの欠陥に起因し、認証済みローカル攻撃者に対して、脆弱なシステムを完全に制御するルート権限を与えるものである。

Doyensec の研究者が報告したのは、Kernel レベルの Server Message Block (SMB) サーバにおける広範な脆弱性調査の集大成である。このエクスプロイト・コードの公開が示すのは、影響を受ける Kernel モジュールを実行するシステムに対する、この欠陥の実質的なリスクである。
脆弱性 CVE-2025-37947 の根本的な原因は、拡張属性を使用してファイル・ストリームへの書き込み操作を処理する ksmbd_vfs_stream_write() 関数にある。この脆弱性は、書き込み可能な共有に ksmbd が設定され、streams_xattr VFS モジュールが有効なシステムにおいて、認証済みユーザーによりトリガーされる可能性がある。
この問題の原因は、ユーザーが指定した位置とデータ数が、XATTR_SIZE_MAX の制限である 65,536 バイトを超えた場合に、サイズ検証が適切に行われない点にある。その結果として、コードはバッファの割り当てサイズを切り詰める一方で、memcpy 操作のカウントが適切に調整されないという状況に陥る。
したがって、このロジックの不整合により、攻撃者は割り当てられた Kernel バッファの境界を超え他場所に、制御された量のデータを書き込み、隣接するメモリ領域の破損を引き起こせるようになる。
バグからルート権限昇格へ
この境界外書き込みプリミティブが、現代の Linux システム上で、特に Ubuntu 22.04.5 LTS 上で、完全なルート権限取得へと至る方法を、Doyensec の研究者たちが詳細に説明している。
この攻撃は、Kernel のメモリ・レイアウトを操作するヒープ・シェーピングから始まる、洗練された多段階プロセスを用いるものだ。Kernel オブジェクトの割り当てと解放を綿密に操作することで、攻撃者は脆弱なバッファの直後に、制御可能なオブジェクト (Kernel メッセージ構造体 msg_msg) を配置できる。

続いて、境界外書き込みにより msg_msg ヘッダーが破壊され、解放後メモリ使用 (UAF:use-after-free) 状態が発生する。この UAF プリミティブは、Kernel メモリアドレスを漏洩させるために利用され、Kernel アドレス空間配置ランダム化 (KASLR) を回避する。こうして KASLR を回避した攻撃者は、UAF を再利用して pipe_buffer オブジェクト内の関数ポインタを上書きし、その結果として Kernel の制御フローを奪取して ROP チェーンを実行し、ルート権限を獲得する。
PoC エクスプロイトの公開
Doyensec の研究者たちが、完全なローカル権限昇格の PoC エクスプロイトを GitHub 上で公開した。これにより、他のセキュリティ専門家は攻撃を解析し、自らのシステムへの影響を検証できる。
現時点で公開されているエクスプロイトは、ローカル・アクセスを前提としているが、リモートからの攻撃は遥かに困難であると、研究者たちは指摘している。KASLR を回避してヒープ・グルーミングを信頼性ある手法とするには、追加の情報漏洩の脆弱性が必要となる可能性が高いためである。
この発見は、Doyensec による ksmbd の広範なセキュリティ監査の一環である。この監査では、以前にも、認証不要の競合状態やメモリ枯渇を含む複数の重大な脆弱性が確認されている。システム管理者に推奨されるのは、ksmbd の使用状況を確認することである。Linux ディストリビューション提供元から、CVE-2025-37947 に対する更新プログラムが提供され次第、速やかにパッチを確実に適用すべきである。
この脆弱性の原因は、ksmbd_vfs_stream_write() における拡張属性 (xattr) 書き込みのサイズ検証不備にあります。割当サイズを切り詰める一方で memcpy 長が調整されないため、境界外書き込みが発生します。その後に、隣接する msg_msg の破壊 → UAF → 情報漏えい → KASLR 回避 → pipe_buffer の関数ポインタ上書き → ROP によるルート取得と連鎖します。PoC が公開されているため、ご利用のチームは、ご注意ください。よろしければ、Linux ksmbd で検索も、ご参照ください。
You must be logged in to post a comment.