モバイル向けとPC向けの切り替えボタンでDom Based XSS
ほぼタイトル通りですが、これも数年前なのでちょっと古い話です。
数年前、まだスマートフォンが今ほどのシェアでない時代、PC向けの画面表示とモバイル向けのページが混在しているような状況でした*1。そんな状態でモバイルからPC向けのページを見たい人向けにはそれ用の導線があったり、間違えてPC向けのページに来てしまった人向けの導線が用意されていました。
サンプル
モバイルのuser agentでのモバイル向けの表示
モバイルのuser agentでPC表示
ここで問題となっていたのが、"スマートフォン版へ"のリンクの内容です。PC版とモバイル版でほぼ同じURLを使っているような場合、javascriptでボタンが生成されている事があります。
このケースの場合、一度PC版向けの表示をさせなければ行けないということで結構面倒だったのですが手順を踏むとXSSが可能でした。*2
当時報告先がわからなかったので、運営元のlivedoor ブログの(確か)問い合わせフォーム経由で報告したのですが、数日ほどで対応されました。
htmlを動的に組み立てるのは問題が起きやすいので、何かしらのライブラリでエスケープするか、aタグのDOMを生成して操作するのが無難ですね。*3
(記事公開当初、サンプル画像がPC向けとモバイル向けで逆になっていたのを修正しました。)