New Safari XSS Flaw Leverages JavaScript Error Handling to Execute Arbitrary Code
2025/06/03 CyberSecurityNews — Safari にクロスサイト・スクリプティング (XSS) の脆弱性が、新たに発見された。この脆弱性を悪用する攻撃者は、ブラウザの TypeError 例外処理メカニズムを介して、任意の JavaScript コードを実行できるという。この脆弱性は、Gareth Heyes による、ペイロード隠蔽技術の研究中に発見されたものだ。TypeError メッセージ内の引用符エスケープを、Safari が不適切に処理することで、コード実行に悪用される可能性が生じるという。

Safari のブラウザのエラー処理インフラの脆弱性を悪用する攻撃者は、従来の XSS 防止メカニズムを回避するため、きわめて深刻なセキュリティ上の懸念となっている。
TypeError XSS 脆弱性
この Safari の脆弱性は、TypeError 例外メッセージ内の一重引用符と二重引用符に対する不適切な処理に起因する。
具体的に言うと、引用符が混在する文字列リテラルに対して、開発者が new 演算子を使用しようとすると、Safari はエラー・メッセージ内の引用符を適切にエスケープしない、TypeError を生成してしまうという。
根本的な問題は、new ‘foo”bar’ のようなコードを実行する際に発生し、TypeError メッセージ “foo”bar” is not a constructor が生成される。
重大な欠陥は Safari の変換処理に存在し、一重引用符は二重引用符に変換されるが、文字列内に埋め込まれた二重引用符はエスケープされないという問題を引き起こす。
それにより、結果であるエラー・メッセージ内に、3つの二重引用符が取り込まれるというシナリオが発生し、文字列の境界が実質的に破られ、例外テキスト部分への任意の JavaScript 挿入が可能になる。
TypeError は構文エラーとは異なり、後続の JavaScript 実行を妨げないため、このエクスプロイト試行は成功する。したがって、エラー・メッセージのコンテキスト内で、悪意のコードを実行する経路が作成される。
このエクスプロイト手法は、TypeError の生成と JavaScript のグローバル・エラー・ハンドラ・メカニズムを組み合わせたものである。
攻撃者は、”onerror=eval” を設定することで、すべてのキャッチされない例外を eval() 関数へと誘導し、不正な TypeError メッセージを JavaScript コードとして実行できる。
このペイロードのデモンストレーションでは、コード new ‘foo”-alert(1)//’ が使用され、TypeError: “foo”-alert(1)//” is not a constructor が生成される。
続いて、このエラー・メッセージが eval 関数により JavaScript として処理されると、TypeError: portion はラベル文になり、最初の二重引用符で文字列が閉じられ、alert(1) 関数が実行され、後続のコメント構文 (//) により、残りのエラー・テキストは無効化される。
ペイロード配信メカニズムとして、window.name を悪用することで、この手法を、さらに強化できる。ただし、Safari のナビゲーション・ベースでの window.name のクリアには、ターゲット属性または window.open() メソッドを用いる回避策が必要となる。
この脆弱性が示すものは、正当なエラー処理プロセス内に悪意のコードを埋め込むことで、従来の XSS フィルタリング・メカニズムを回避する、高度な攻撃ベクターの存在である。
このエクスプロイトは、基本的な JavaScript エラー処理により、ブラウザのコア機能内で機能するため、アプリケーション・レベルの脆弱性とは異なるレベルにある。
Gareth Heyes のレポートによると、この手法の有効性は、従来からのスクリプト・インジェクション・ポイントを必要とせずに、任意のコード実行に至るため、さらに危険が高まるという。
今回の発見が浮き彫りにするのは、ブラウザのエラー・メッセージにおける、適切な引用符エスケープの重要性である。無害に見える実装上の小さな問題が、深刻なセキュリティ脆弱性を生み出す可能性を示している。
ユーザー組織にとって必要なことは、包括的なコンテンツ・セキュリティ・ポリシーの実装、および、すべてのユーザー入力の厳密な検証、エラー処理メカニズムを介した悪用の可能性の考察などである。
その一方で、ブラウザ・ベンダーとしては、将来のリリースで同様の脆弱性の出現を防ぐために、エラー・メッセージ内の特殊文字に対する、適切なエスケープを優先する必要があるだろう。
Safari に新たに発見された XSS 脆弱性は、TypeError の悪用によりトリガーされるようです。エラー処理の設計も、なかなか難しいようです。通常は安全と思われる処理の中にも、攻撃者が入り込む余地があるのですね。よろしければ、Safari で検索も、ご参照下さい。


You must be logged in to post a comment.