1 ポイント 投稿者 GN⁺ 2024-03-17 | 1件のコメント | WhatsAppで共有

Google Project Zeroのツールを使ったLadybirdのファジング

  • Domato は Google Project Zero が開発した DOM ファザーで、大量の、主に有効だが奇妙な HTML、CSS、JavaScript を含む Web ページを生成する。
  • 生成された Web ページは約 500 KiB の大きさで、ブラウザーエンジンを驚かせる「興味深い」JS、CSS、HTML で満ちている。
  • Domato は主要ブラウザーで多くのバグを発見してきたとされ、これを Ladybird に適用して問題を発見し修正した。

Issue #1: <th> タグが <mfrac> の中にある場合

  • Domato が生成した出力から、<mfrac> の中に <th> を入れる問題を発見した。
  • UBSAN(Undefined Behavior SANitizer) を使ってコンパイルした Ladybird で null ポインター参照エラーが発生した。
  • <th><td> 要素は常に DOM ツリー上位に <table> がある前提で実装していたが、JavaScript API を使って DOM ノードを手動で生成する場合はこの規則を破ることができる。
  • 問題解決のため、<th><td> 要素が常に <table> を含んでいると仮定せず、first_ancestor_of_type<HTMLTableElement>() を使うよう修正した。

Issue #2: 分離された DOM での window イベントハンドラーの割り当て

  • ファザーを実行していると、すぐに別の問題にぶつかった。
  • DOMParser を通じて生成された文書には window オブジェクトがなく、これが原因で問題が発生した。
  • Document::window() が nullable な値を返すよう修正し、複数箇所で null 処理を行った。
  • window のない文書で document.body.onblur を割り当てるときは何もしないよう修正した。

Issue #3: SVG <linearGradient> における無限再帰

  • SVG では、他のグラデーションを参照して色を継承するグラデーションを宣言できる。
  • グラデーションが自分自身を参照するケースを考慮しておらず、無限ループが発生した。
  • 参照サイクルが複数段階にわたる場合に対応するため、訪問したすべてのグラデーションを追跡し、すでに訪問したグラデーションに出会ったらチェーンの追跡を中止するようにした。

Issue #4: 削除された iframe の window プロパティーへのアクセス

  • iframe が DOM から削除されると、対応するコンテンツ文書はブラウジングコンテキストから切り離される。
  • window オブジェクトのプロパティーにアクセスするとき、ブラウジングコンテキストの存在を前提としている HTML 仕様のバグを発見した。
  • HTML 仕様に対して issue を起票し、Ladybird では null チェックを追加して問題を解決した。

Issue #5: Element.before() における無限ループ

  • ページが読み込まれず、CPU 使用率が 100% のままになった。
  • before() 実装の誤りにより無限ループが発生した。
  • node->previous_sibling の代わりに previous_sibling->previous_sibling を通じて兄弟チェーンをたどるよう修正した。

結論

  • 1日の間に実際のバグを 5 件発見し、すべて修正した。
  • ファザーのようなツールは、ソフトウェアをより堅牢にしたい人にとって驚くほど有用な資源である。
  • Ladybird が継続的なファジング入力を処理できるほど安定すれば、クラウド上で自動実行してさらに多くの問題を発見できるだろう。

GN⁺の意見

  • この記事は、Ladybird ブラウザーエンジンが Google Project Zero の Domato ファザーを使って発見したバグを修正する過程を説明している。
  • ファジングはソフトウェアのセキュリティ脆弱性を発見するうえで非常に効果的な技術であり、開発者は自分のコードをより堅牢にするために活用できる。
  • この記事は開発者にファジングの重要性を再認識させ、実際にどのように適用されるかについての洞察を提供している。
  • 批判的に見ると、ファジングは予期しない入力に対するソフトウェアの反応をテストするものであり、実際のユーザーの利用パターンを完全に反映するとは限らない。
  • 類似の機能を提供する他のファジングツールとしては、AFL(American Fuzzy Lop) や LibFuzzer などがあり、開発者はこれらのツールを使って自分のプロジェクトをテストできる。
  • Ladybird 開発者はこの技術を導入することで、発見されたバグを修正してブラウザーの安定性を向上させられ、これはユーザー体験の改善とセキュリティ強化に役立つだろう.

1件のコメント

 
GN⁺ 2024-03-17
Hacker Newsの意見
  • 複数の実装によって仕様の価値が証明される

    仕様に対して複数の実装が重要である理由が、この記事を通じて明らかになっている。すでに1つの問題が見つかっており、さらに見つかると予想される。

  • 小規模なグループでも驚くべきものを作れる可能性

    小規模なグループが驚くべきプロジェクトを進めることへの情熱を表している。これは利害関係者のいる企業では難しいことだ。

  • SVG実装によるプロジェクトの急速な進展への驚き

    プロジェクトは予想よりも速く進んでおり、SVG実装が完了したという知らせに魅了されていることを表している。

  • ソフトウェア開発において問題解決へ深く踏み込む必要性

    開発者は問題を見つけて修正するだけでなく、問題の根本原因を理解し、コードベース全体で類似のエラーを見つけ出すべきだと主張している。現代のソフトウェアの不安定さやバグの問題は資本主義の制約によるものだが、より良いソフトウェア開発は可能だと強調している。

  • LadybirdのWebエンジンHackfest参加有無への関心

    Ladybirdが今年のWebエンジンHackfestに参加するのかどうかに関心を示している。

  • ハッキング関連YouTube動画の不在への疑問

    ハッキング関連のYouTube動画がもう更新されていないことへの残念さを表している。

  • "fuzzing ladybird"という語の組み合わせへの面白い反応

    "fuzzing ladybird"という語の組み合わせが面白く、荒々しく聞こえるという意見を述べている。

  • Ladybirdが世界を征服してほしいと密かに願う

    Ladybirdがいつか世界を征服してくれることを密かに願っており、これを誰にも言わないでほしいと念を押している。

  • [削除されたコメント]

    特定のコメントが削除されたことを知らせている。