ディスカッション (11件)
Linuxカーネルのio_uringにおけるZCRX(Zero-Copy Receive)freelistの実装に起因するローカル権限昇格(LPE)の脆弱性についての技術解説です。型情報の取り扱いの不備を突くことで、本来想定されていないメモリ操作が可能となり、最終的に特権奪取へと繋がるプロセスを詳説しています。
io-uringはセキュリティ的に悪夢。常に権限昇格の脆弱性があるし、システムコール・スマグリングの強力なプリミティブにもなる。いっそ無効化することを検討した方がいい(知ってる限り、ほとんどのコンテナ環境では既にそうしてるはず)。
何が起きてるんだ?最近HNのトップページで複数の障害やCVEが報告されてる気がするんだけど。HNのトップでこれだけセキュリティやインシデント関連の記事を見るのは初めてだ。
これが新しいのかどうかよく分からないな。攻撃ベクトルは数ヶ月前の似たようなエクスプロイトと一致しているように見える[1]。でもまだ脅威は残ってるのかも。メーリングリストのスレッドでJensは既にパッチ済みで安定版に入っていると考えているようだし、この記事で書かれているエクスプロイトが成立するには、既に権限昇格が必要だと指摘している[2]。まあ、タイトルはキャッチーだけどね。
これにはCAP_NET/SYS_ADMINが必要か。それなら他のやつほど「悪質」ではないってことだな。
“CAP_SYS_ADMINで書き込み可能”
読み違えてるかな?これってCAP_NET_ADMINとCAP_SYS_ADMINの両方を持ってれば、uid=0で任意のバイナリを実行できるっていうただの方法じゃないの?modprobe_pathを書き換えられるなら、コードを実行する方法を見つけられるのは別にニュースでも何でもないでしょ。
境界チェックなし。free_countは書き込みの前にインクリメントされるのに、書き込みにはインクリメント前の値がインデックスとして使われている。エントリ時にfree_count == num_niovsだと、freelist[num_niovs]、つまり末尾の1つ先へ書き込まれる。
「これを防ぐ方法はない」と言い切る、それが日常茶飯事で起きる唯一の言語っていうね。
興味深いな。自分でテストしたわけじゃないけど、直感的には4バイトのOOB書き込みがあればPageJack のようなデータオンリー攻撃には十分だと思う。だからOPで議論されてるKASLRリークへの対策を固めたところで、今回の攻撃を防げるわけじゃないんじゃないかな。
関連するNICを持っていて、https://docs.kernel.org/networking/iou-zcrx.html にある非自動設定手順を踏んでいて、かつio_uringを無効化するようなVMやコンテナの中で動かしていないシステムってどれくらいあるんだ?これまでのio_uring関連の膨大な問題と比べると、影響度は低い方に思える。とはいえ、興味深くて重要なことに変わりはないけど。
こういう記事を読むのに、サードパーティドメインのクライアントサイドJSが必要っていうのはどうなのよ…。静的マークダウン版はこちら:https://raw.githubusercontent.com/ze3tar/ze3tar.github.io/9d1b00a21214e62968a1451026b20b7af73db4e1/posts/zcrx-freelist-oob.md
最初は著者がoss-securityに投稿した内容で読んだ。結局、著者は「ルートシェルを取るためのadmin権限」の部分についてブログ記事を修正することに同意したみたいだ[^0]。[^1]の方が詳しいかもしれない。自分にはこのタイトルはクリックベイトに見えるな。