INT 4: HACKER

Web security research

javascript Scheme XSS attack via meta refresh for Opera Presto / Prestoはjavascriptスキームによるナビゲートが可能

f:id:reinforchu:20190919124055p:plain

 ある脆弱性の調査をしていたところ、少し面白い挙動を発見したのでメモ書きしておきます。モダンな環境では、meta refreshなどのリダイレクト(ページリロード)において、javascriptスキームのトップレベルのナビゲートは禁止されています。しかしながら、ある特定のウェブブラウザはそのまま実行されてしまいます。

 

概要


 ある特定のウェブブラウザとは、Prestoレンダリングエンジンだった古いバージョンのOpera 12.16です。ここではOperaという名詞を使うとややこしいので、“モダンなOpera”と“古いバージョンのPresto”は区別して呼ぶことにします。

 前述の通り、リダイレクト処理の際にjavascriptスキームは禁止されているのですが、Prestoは実行されるので、javascript:alert(0)が通ります。

 

再現方法


  下記のHTMLドキュメントをPrestoで開きます。

refresh.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=javascript:alert(0)//">
    </head>
</html>

 

● Presto

f:id:reinforchu:20190919122359p:plain

alert(0)が実行されます。

 

●Chrome

f:id:reinforchu:20190919122424p:plain

Refused to refresh file:///Users/reinforchu/Desktop/refresh.html to a javascript: URL」というエラーです。トップレベルでのjavascriptスキームのページリロードは拒否されます。その他のFirefox, Safari, IEともに実行されませんでした。

 

古いバージョンのウェブブラウザを使う理由


 特定のアプリケーションを使う必要性のある場合を除き、通常のブラウジングにおいては、特定の古いバージョンのウェブブラウザを使う必要性は、はっきり無いと思われます。しかしながら、Webアプリケーション脆弱性診断に関しては、特定の条件でXSS攻撃が成立する場面に遭遇することがままあります。その条件が環境依存の場合、可能な限り環境を準備すべきでしょう。

 例えば今回の内容も、meta refreshの際にjavascriptスキームは禁止されているとはいえ、Webアプリケーション側の診断をしている訳ですから、アプリケーションに問題が内在している判断基準のもと、リスクレベルを協議して報告する方が良いと思われます。

※私は特定の診断ベンダーに所属している訳ではなく、過去の脆弱性診断の経験則上で語っているに過ぎません。

 

古いバージョンのウェブブラウザの固有の問題


  私が過去に取り上げた、ウェブブラウザ固有の問題をいくつかご紹介します。

●<input type="hidden">でXSSを発火させる

www.hack.vet

Prestoはhiddenでも発火します。何故でしょう。

 

●いわゆる画像でXSSの手法

www.hack.vet

MIME-sniffingの話です。

 

古いバージョンのウェブブラウザの入手方法


●Presto (古いバージョンのOpera)

 未だに配布されているので、下記のURLから入手できます。

get.geo.opera.com

 

●Internet Explorer 6

 IE6はWindows XPを入手すれば良いのですが、どちらかというと、Windows 7のXP Modeで使えるようにするのが楽です。

www.microsoft.com

 

●Internet Explorer 7

 抹消されたバージョンなのでインストーラー自体の入手が難しいですが、Windows Vistaにくっついてくるので、なんとかしてVistaマシンを入手しましょう。

developer.microsoft.com

昔は配布していたんですが、消されてしまいましたね。 

 

あとがき


 本来は別の内容の記事の予定でしたが、おいしい部分は事情により一旦お蔵入りになりました。