自分の報告したXSS脆弱性が修正されています。使っている人はアップデートしましょう。GitHubhttps://github.com/oyvindkinsey/easyXDM/releases/tag/2.4.20以前にも脆弱性が指摘されていますが、それとは別の問題です。http://blog.kotowicz.net/2013/09/exploiting-easyxdm-part-1-not-usual.htmlhttp://blog.kotowicz.net/2013/10/exploiting-easyxdm-part-2-considered.htmlhttp://blog.kotowicz.net/2014/01/xssing-with-shakespeare-name-calling.htmlこれ以下は技術的な説明です。XSSなのですが、再現方法が少し変わっているので紹介します。このXSSはIEでのみ動作します。おまけにドキュメントモードがIE7モード以下でないと起こりません。いうと、XSSのある場所が、バグった挙動があると判断されたブラウザだけが通過する箇所にあり、その条件を満たすのが、IE7モード以下だけだからです。次のcreateElement()の箇所でXSSが起きます。"\"/>");}このif文の条件のHAS_NAME_PROPERTY_BUGという値が、バグった挙動があると判定されたブラウザだけtrueになります。設定しているのは、以下の部分です。#endif}formと名前付きのinputを作って、名前からinput要素にアクセスできるかテストしています。IE7モード以下では、動的に作った名前付きの要素に、名前経由でアクセスできないバグがあるらしく、その回避策として、このようなコードで一度検証を行っているようです。このテスト部分だけを実行できるページを以下に用意しました。IEでアクセスすることで、HAS_NAME_PROPERTY_BUGの値がtrueになることを確認できます。http://vulnerabledoma.in/easyxdm/name_property_test.htmlそれでは、実際に脆弱なEasyXDMで、XSSが起きることを確認してみます。)から、ドキュメントモードをIE7以下にしてみてください。アラートが出るはずです。http://vulnerabledoma.in/easyxdm/2.4.19_index.html?xdm_e=http%3A%2F%2Fvulnerabledoma.in&xdm_c=%22onload%3dalert(document.domain)//&xdm_p=0これで、IE7モード以下でXSSが可能なことがわかりました。IE7モード以下でEasyXDMを利用しないとXSSが起こらないのでは、攻撃できる条件がかなり限られてしまいます。そこで、最近公開した資料にも書いた、「ドキュメントモードの継承」というテクニックを使います。ドキュメントモードを変更した親のフレームに埋め込むと、フレーム内のドキュメントモードも変更されるというテクニックでした。これを使ってみましょう。"+document.documentMode)</script>どうでしょうか?まだアラートは動かないはずです。親はIE=5指定により、IE5モードで動いているはずなのに、フレームの中のドキュメントモードは8までしか下がっていません。html>があるからです。この宣言がある場合、IE11では、フレームに埋め込んでも降格されるのは8までが限度になっています。XSSを成功させるにはなんとか7まで下げなければいけません。実は、さらに強力な継承方法があります。以下にIE11でアクセスしてみてください。http://l0.cm/easyxdm/poc.emlどうですか?今回はアラートが出たと思います。message/rfc822形式のページだということです。スライド中でも触れたのですが、IE11/Edgeは、今もmessage/rfc822形式のドキュメントをブラウザ内で開くことができます。(mhtml:という文字列はなくても開けます。)message/rfc822形式のページは、デフォルトでIE5モードで表示されるようです。html>があろうとも7までは降格させることができます。実際に、フレーム内のドキュメントモードをみると7まで下がっており、このおかげで、脆弱な箇所への到達に成功したことがわかります。この手法を使えば、EasyXDMのXSSのように、IE7のドキュメントモードでしか再現しない問題を、脆弱性のあるページのドキュメントモードにかかわらず、また、ユーザによるドキュメントモードの切り替え操作なしに、攻撃可能な問題に発展させることができる、という訳です。ちなみに、もう1つ強力な継承が起きる場所があります。それは、CVリスト(互換表示リスト)でIE7のドキュメントモードで表示指定しているサイトのフレームです。CVリストはWindowsの以下の場所に保存されています。ここにリストされているドメインは、リストで指定したドキュメントモードで表示されるようになります。Explorer\IECompatData\iecompatdata.xmlここにリストしてもらうには、面倒な手続きが必要ですが、XSSのためにそんなことをする必要はありません。ここにリストされているドメインのXSSを探してきてそのページ内にフレームを作ればいいだけだからです。めちゃくちゃなことを言っているように聞こえるかもしれませんが、その方がMicrosoftを騙して手続きするよりもはるかに簡単で現実的です。uaString="7">epim.partners.extranet.microsoft.com</domain>F12開発者ツールのコンソール上で、以下を実行してみてください。フレーム内のページのドキュメントモードは7まで降格され、message/rfc822の時と同様にEasyXDMの脆弱箇所に到達し、アラートが出ると思います。src="//vulnerabledoma.in/easyxdm/2.4.19_index.html?xdm_e=http%3A%2F%2Fvulnerabledoma.in&xdm_c=%22onload%3dalert(document.domain)//&xdm_p=0"></iframe>')message/rfc822の強い継承に気付くまではこの方法で攻撃可能なことを証明していました。今となってはmessage/rfc822の方が簡単なので、あえてこっちを使う理由はありません。以上、EasyXDMのXSSの技術的な部分を説明しました。今月は余力があれば(2月、3月書いてない分)もう1つか2つ記事を書く予定です。