alert() is dead!?

2021年7月2日(UTC)にpostswigger.netに「alert() is dead, long live print()」と言うタイトルの記事が掲載されました。

portswigger.net

「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で実行した結果 f:id:jiranyan:20210713092507p:plain

もちろん、firefoxの結果も同じです。 f:id:jiranyan:20210713092959p:plain

もしくは、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で実行した結果 f:id:jiranyan:20210713141629p:plain

もちろん、firefoxの結果も同じです。 f:id:jiranyan:20210713141647p:plain

Chrome92にアップ f:id:jiranyan:20210721191240p:plain

上記で試したヤツを実行する。 f:id:jiranyan:20210721191401p:plain

おぉー確かにalert()が動いていない(ポップアップがあがらない)

代替としてはprint()を使うらしいです。 こんな感じですかね。

http://jiranyan.in/mytest/iframexss.php?p=http://jiranyan.local/mytest/xss.php?p=<img src=1 onerror=print()>

実行結果はこんな感じです。 f:id:jiranyan:20210721191628p:plain

ちなみにiframe絡みではないalertは今まで通りに動作するようなのでご安心を f:id:jiranyan:20210721191750p:plain

脆弱性診断をやっている人はfirefoxを使う人が多いし、そもそもIframeを使うようなサイトは少なくなったので影響は少ないかもしれませんがね。