マクドナルドユーザーのパスワードを盗み出すことが可能
By Shinichi Sugiyama
JavaScriptで書かれたオープンソースのウェブアプリケーションフレームワークであるAngularJSのサンドボックスをバイパスすることで、ユーザーのパスワードを盗む攻撃のXSSをマクドナルドの公式サイトで行えることをエンジニアのTijme Gommersさんが実証しています。
Stealing passwords from McDonald's users - Tijme Gommers
https://finnwea.com/blog/stealing-passwords-from-mcdonalds-users
Gommersさんは、「安全ではない暗号ストレージの脆弱性をついたり、XSSを用いたりすることでマクドナルドのユーザーが使用するパスワードを盗み出すことが可能」と主張。この方法を用いればパスワードの他に氏名・住所・連絡先などの個人情報も盗むことができるそうです。
アメリカのマクドナルドのホームページには検索ページがあり、このページは検索パラメーターを反映させたページを生成します。
例えば検索ページで「***********-test-reflected-test-***********」という文字を入力して検索すれば……
「https://www.mcdonalds.com/us/en-us/search-results.html?q=***********-test-reflected-test-***********」というURLが生成され、ソースコードには「***********-test-reflected-test-***********」という文字列が含まれることがわかります。
マクドナルドはAngularJSを使用しているので、検索値を使ってスコープIDを探ることも可能。AngularJSのタグ「{{$id}}」を入力すると、AngularJSが「{{$id}}」を「9」に変換していることがわかります。
セキュリティ企業のPortSwiggerがブログの中で「AngularJSのサンドボックスを使用しない方が良い」と説明しているように、AngularJSのサンドボックスは脆弱性を持つことで知られています。なお、AngularJSのバージョン1.6以降ではサンドボックスが廃止されています。
しかし、マクドナルドのホームページがどのバージョンのAngularJSを使用しているのか調べてみたところ、バージョン1.5.3のAngularJSを使用していることがわかりました。
そしてタグを入力してみるとコードが実行されることも判明。
さらに、外部サイトのJavaScriptファイルを読み込ませることにも成功。
続いて、マクドナルドのサインインページを表示してみると、通常は「Remember me」などと表示されるところに、「Remmember my password」と表示されていることがわかります。
この「password」という単語に食いついたGommersさん。全てのJavaScript上で「password」という単語を調査したところ、面白いコードを発見。
ここからクッキーに保存されていた「penc」という値を発見。この中に暗号化されたパスワードを発見。
さらに、マクドナルドのホームページでは全てのユーザーのパスワードが同じ暗号化鍵を使用して暗号化されていることも判明。暗号化に使用されているのはCryptoJSという暗号化スクリプトでした。
Gommersさんはマクドナルドのホームページをiframeで読み込み、サイトを偽装することでクッキーを盗み出すことに成功。クッキー内の暗号化されたパスワードから、自身の作成した暗号化前のパスワードを表示させることにも成功しています。
なお、Gommersさんはマクドナルドに複数回にわたってこの問題を報告しているそうですが、「返事はない」と自身のブログに記しています。
・関連記事
最もよく使われている危険なパスワードトップ25リスト、年度ごとにパスワードにも流行があることも明らかに - GIGAZINE
パスワードを定期的に変更させるシステム仕様には問題がある - GIGAZINE
MMSを受け取るだけでiPhoneの各種認証情報・パスワードを抜き取れる脆弱性が明らかに - GIGAZINE
パスワードをかけていないVNCサーバーのスクリーンショットをまとめた「World of VNC」 - GIGAZINE
・関連コンテンツ