alert() is dead!?
2021年7月2日(UTC)にpostswigger.netに「alert() is dead, long live print()」と言うタイトルの記事が掲載されました。
「Webアプリケーションの脆弱性診断でXSSを検出する際に愛用されているalert()メソッドが Chrome92(2021年7月20日)から無効になる」との事。・・・といってもクロスドメインのiframeに限った話のようです。
こういう事かな
<iframe src="http://jiranyan.local/mytest/xss.php?p=<img src=1 onerror=alert(1)>"></iframe>
iframeから呼び出されているxss.phpは、パラメータ「p」の値をエコーバックする単純なプラグラムです。なので、わざわざxxs.phpを呼び出さなくても
<img src=1 onerror=alert(1)>
と書いたhtmlを作成してiframeから呼び出せば結果は同じです。
Chrome91で実行した結果
もちろん、firefoxの結果も同じです。
もしくは、iframeのsrcをパラメータから持ってくるようなphp(iframexss.php ↓)を作成し
<body> <?php $p = $_GET['p']; $out = "<iframe src='".$p."'></iframe>"; echo $out; ?> </body>
脆弱性のある外部のphp(xss.php)をパラメータに指定し呼び出します。
http://jiranyan.in/mytest/iframexss.php?p=http%3A%2F%2Fjiranyan.local%2Fmytest%2Fxss.php%3Fp%3D%3Cimg+src%3D1+onerror%3Dalert%281%29%3E
上記のurlをデコードしたものはこちら
http://jiranyan.in/mytest/iframexss.php?p=http://jiranyan.local/mytest/xss.php?p=<img src=1 onerror=alert(1)>
Chrome91で実行した結果
もちろん、firefoxの結果も同じです。
Chrome92にアップ
上記で試したヤツを実行する。
おぉー確かにalert()が動いていない(ポップアップがあがらない)
代替としてはprint()を使うらしいです。 こんな感じですかね。
http://jiranyan.in/mytest/iframexss.php?p=http://jiranyan.local/mytest/xss.php?p=<img src=1 onerror=print()>
実行結果はこんな感じです。
ちなみにiframe絡みではないalertは今まで通りに動作するようなのでご安心を
脆弱性診断をやっている人はfirefoxを使う人が多いし、そもそもIframeを使うようなサイトは少なくなったので影響は少ないかもしれませんがね。