萌えハッカーニュースリーダー

2025/04/30 23:59 Pwning the Ladybird Browser

出典: https://jessie.cafe/posts/pwning-ladybirds-libjs/
hakase
博士

やっほー、ロボ子! LadybirdブラウザエンジンのLibJSで面白いバグが見つかったみたいじゃぞ!

roboko
ロボ子

博士、こんにちは! Ladybirdですか、SerenityOSのプロジェクトから生まれた新しいブラウザエンジンですね。どんなバグが見つかったんですか?

hakase
博士

Fuzzilliっていうファザーを使って約10日間ファジングしたら、10個もユニークなクラッシュが見つかったらしいのじゃ!

roboko
ロボ子

10個も! 結構たくさん見つかったんですね。どんな種類のバグがあったんですか?

hakase
博士

検証の失敗とか、スタックの枯渇、OOMバグ、不正なバイトコードの生成とか色々あったみたいじゃ。特に面白いのは、正規表現パーサーのキャッシュバグと`TypedArray`に関するバグじゃな。

roboko
ロボ子

正規表現パーサーのキャッシュバグですか。それはちょっと興味深いですね。

hakase
博士

それから、heap buffer overflow、ガベージコレクタのfreelistの破損、malloc heapのuse-after-free(UAF)っていう、ヤバそうなバグもあったみたいじゃぞ!

roboko
ロボ子

UAFですか! 深刻な脆弱性につながる可能性が高いですね。

hakase
博士

そうなんじゃ! 特に注目すべきは、インタプリタの引数バッファにおけるUAFらしいぞ。プロキシ関数オブジェクトをコンストラクタとして使って、悪意のある`[[Get]]`ハンドラを使うとトリガーされるみたいじゃ。

roboko
ロボ子

`[[Get]]`ハンドラを悪用するんですね。対策はどうしたんでしょう?

hakase
博士

calleeコンテキストが構築された後でのみプロトタイプの`[[Get]]`を実行するように修正したみたいじゃ。これでUAFは防げるはずじゃ。

roboko
ロボ子

なるほど、タイミングを調整したんですね。しかし、UAFが発生すると、どんなことができるようになるんですか?

hakase
博士

UAFがglibc malloc heapで発生すると、`arguments_list`にポインタを配置して、コンストラクタ内からオブジェクトを読み取ることで、addrof機能を作れるらしいぞ!

roboko
ロボ子

addrof機能ですか。オブジェクトのアドレスをリークできるんですね。

hakase
博士

`FinalizationRegistry`を使って、オブジェクトポインタを持つリンクリストノードをmalloc heapに配置する方法もあるみたいじゃ。これでアドレスをリークできるぞ!

roboko
ロボ子

`FinalizationRegistry`を使うんですね。さらに、任意の読み取り/書き込みも可能になるんですか?

hakase
博士

そうじゃ! 偽のJavaScriptオブジェクトポインタを作って、`get_by_value`関数と`SimpleIndexedPropertyStorage`を利用して、メモリレイアウトを操作するみたいじゃぞ。

roboko
ロボ子

メモリレイアウトを操作して、任意の場所に読み書きできるんですね。そして、最終的にはコード実行ですか?

hakase
博士

その通り! スタック上のリターンポインタをROPチェーンで上書きして、`execve("/calc")`を実行するみたいじゃ!

roboko
ロボ子

`execve`で任意のコマンドを実行できるんですね。PoCエクスプロイトも公開されているんですか?

hakase
博士

ブラウザ用とREPL用のエクスプロイトコードがあって、`b8fa355a21`で動作するみたいじゃぞ!

roboko
ロボ子

すごいですね、博士! Ladybirdの脆弱性、とても勉強になりました!

hakase
博士

どういたしまして! しかし、こんなに面白いバグが見つかるなんて、Ladybirdもまだまだ発展途上じゃな。まるで、私の研究室みたいじゃ!

roboko
ロボ子

博士の研究室はいつも面白い発見がありますからね!

hakase
博士

そうじゃろ? ところでロボ子、calcって何の略か知ってるか?

roboko
ロボ子

えっと、計算機(Calculator)の略ですか?

hakase
博士

ブー! 正解は… カロリーをたくさん摂取する、の略じゃ!

roboko
ロボ子

ええーっ! 博士、それはちょっと無理がありますよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search