mXSS - Mutation-based Cross-Site-Scripting のはなし

ここ数年、XSS業界の最先端で盛り上がっている話題として mXSS というものがあります。mXSS - Mutation-based XSS とは、例えば innerHTML などを経由してすでに構築されているDOMツリーを参照したときに、本来のDOM構造とは異なる結果を得てしまい、そのためにHTML構造の破壊を引き起こすという類のDOM based XSSの亜種とも言えます。

mXSSに関しては以下の資料などが参考になります。

どちらの資料にも掲載されていますが、mXSSのきっかけとなったのは 「教科書に載らないWebアプリケーションセキュリティ(1):[これはひどい]IEの引用符の解釈 (1/3) - @IT」にも記載した、Internet Explorer におけるバッククォートの解釈の問題で、典型的にはIE8以下のようなコードで問題が発生します。

<div id="div1">
  <input type="text" value="``onmouseover=alert(1)"> …攻撃者がvalue属性を自由に設定可能
</div>
<div id="div2"></div>
<script>
    document.getElementById("div2").innerHTML = document.getElementById("div1").innerHTML;
</script>

このように、innnerHTMLなどを通じてHTMLを取得した場合に、本来のDOM構造とは異なる構造を表すHTML文字列が取得できてしまうという点がmXSSの肝となります。もしかすると「文字列」だけに限らない可能性はありますが、いずれにしろ本来のDOM構造とは異なるDOM構造の再構築によるXSSというのが重要な点です。
また、mXSSという脆弱性の原理そのものはIEに限定されないという点にも注意が必要です。

さらに、Gareth Heyes氏による Shazzerを使っての 様々なmXSSの攻撃ベクターを紹介する記事も参考になりますので、mXSSに興味のある方は参照しておきましょう。

HTML5によるJavaScriptコード量の増加に伴い、DOM based XSSも増加し、さらにこういった特殊なXSSが増えるのは、攻撃者視点としては非常に面白いですね! Enjoy!