http80

Web security research

Safari address bar spoofing technic / Safariのアドレスバー偽装のテクニック

 <追記:2018>本稿の内容は修正されたことを確認しました。諸般の事情により、PoCおよび一部解説と核心に触れる内容を削除しました。

 アドレスバー偽装系の攻撃アプローチは幾つかありますが、その内の一つに触れます。この手法は、Safariのフィッシング対策設定の無効化することで、アドレスバー偽装が可能です。この設定はデフォルトで有効になっており、意図的に無効化にしない限りは影響を受けません。抜本的な対策はされていませんが、一応フィッシング警告画面が出ますし、特にCVE番号が割り当てられていないようですし、自ら悪意のあるコードを入力しなければならないので、その一部分を明かします。本件を試行中、いくつかバグが出てきたので、なにかの脆弱性に繋がる足掛かりになるかも。

 ふとカレンダーを見ましたが、未だ23日目だけ誰も書いていないので、一ヶ月以上も遅れていますが、脆弱性"&'<<>\ Advent Calendar 2016 の23日目の記事です。

www.adventar.org

 

●下準備

1. Safariの「詐欺Webサイトを閲覧しようとしたときに警告」のチェックを外す

f:id:reinforchu:20170203180004p:plain

環境設定→セキュリティ設定→詐欺サイト

2. Safariの横幅ウィンドウサイズを約2000px以下に小さくしておく(必須ではないですが、「微妙」と言っている所以です)

 

●PoC

 PoCはGitHubに上げてます。ある文字を仕込んでいるので、コピペだと上手く動かないかも。ZIPでダウンロードして展開して開いてください。

 諸般の事情により削除しました。

github.com

 開くとJavaScriptのwindow.locationで変なURLが自動的に開きます。

 PoCでは、ウチのサイト(hack.vet)を、www.google.co.jp に偽装しています。

f:id:reinforchu:20170203181236p:plain

バグでアドレスバーが真っ白になっているので、アドレスバーをクリックして選択してください。匠はこれを一体何に使うつもりなのでしょうか。

f:id:reinforchu:20170203181155p:plain

なんということでしょう!匠によって、Googleに生まれ変わりました!

 

●解説

 本質的な部分は以前投稿した「Basic認証を用いたオープンリダイレクトの攻撃手法」と同じで、それを応用した攻撃です。詳しくは過去記事をご覧ください。

端的に言うと、Basic認証を埋め込んだURLは@より前を自由に表記出来るので、アドレスバー偽装に応用利くのでは?と思いぽこぽこ叩いた結果、都合のいいことにSafariは@より前をそのまま表示させる仕様でした。(認証情報は表示させないと決められているようで、RFC違反っぽい)

 詳しい試行過程は割愛しますが、パスワードは必要のようです。まず、基本形は「http://www.google.co.jp:443@hack.vet」となります。このままだと、偽装とは呼べないので、邪魔な「:443@hack.vet」を空白文字で埋めてアドレスバーから見えなくする方法を思いつきました。そう簡単にいかなく、よくある空白文字はパーセントエンコーディングされるので上手くいきませんでした。なので、一見空白文字に見える文字を使えば良いのでは?という発想から、Unicode文字表とにらめっこした結果、幾つか見つけたのでアドレスバー偽装が出来ました。

 PoCに埋め込んでいるのは、<検問済み>です。(諸般の事情により削除しました)

 ただ、ユーザ名部分に文字数制限があるようで、ある程度の空白に見える文字しか挿入できないので、横幅約2000px以上の解像度のディスプレイだと見えちゃいけない部分が見えてしまいます。とは言え、世の中的に1920x1080, 1920x1200より大きい解像度のディスプレイはそう多くはないと思うのでそれなりに使えるかも。ただ、Retinaディスプレイの解像度を標準を超えて表示させている環境だとダメですが、MacBook Pro Retina 15-inch(FullHD)だと隠れていました。

ちなみに下記のように見えちゃいけない部分が見えてしまいます。

f:id:reinforchu:20170203184241p:plain

 ゴミが見えたり、アドレスバーが真っ白になったり、基本的に警告画面が表示されるので、挙動として微妙であり、これまでに報告・改修されているAddress bar spoofingの脆弱性と比べれれば程度は軽いと思われます。

xss.hateblo.jp

 

●考察

 RFC3986の定義上、@より前のユーザ名:パスワードの組み合わせのパスワード部分は平文で表示で表示させるな、とされているのでRFC違反にあたります。とは言え、ユーザ名の部分が肝になっているので、このRFC違反はしょーもないです。

@より前はアドレスバーに表示させない、というのがブラウザの実装上の落とし所でしょう。警告画面は出るので、フィッシングに悪用される危険性は認識はしていると思われます。

 

●対策方法

 フィッシング対策の設定を有効にすれば良いです。ちなみに、下記のような警告画面が出てきます。

f:id:reinforchu:20170203180610p:plain

iOSデバイスも同様に警告画面が出てくるかと思われます。

 

●余談

 脆弱性を見つけてもAppleからはThank youしか貰えません。

 新しいMacBook Pro Late 2016(Retina, 15-inch)をください。