
このスクリプトは、graphql-javaのCVE-2024-40094脆弱性を悪用します。
このスクリプトは、graphql-java の CVE-2024-40094 脆弱性を悪用し、ExecutableNormalizedFields (ENF) ベースのサービス拒否を引き起こします。深くネストされたエイリアスを含む巧妙に細工されたGraphQLイントロスペクションクエリを構築し、脆弱なサーバーを圧倒するように設計されています。
このスクリプトは非同期リクエストを使用して、ターゲットのGraphQLサーバーに一連の大規模なイントロスペクションクエリを送信します。クエリはJSONペイロードとして送信され、GraphQLサーバーが深くネストされたイントロスペクションクエリを処理する方法の特定の脆弱性を悪用するように構成されています。多数のクエリを並行してトリガーすることで、スクリプトは脆弱なシステムにサービス拒否状態を引き起こすことを目的としています。
asyncio と aiohttp を使用します。このエクスプロイトは、脆弱なバージョンの graphql-java を実行しているサーバー、特に深くネストされたイントロスペクションクエリを適切に処理しないサーバーを対象としています。
graphql-java サーバー(CVE-2024-40094 の影響を受けるバージョン)エクスプロイトを実行するには、Python 3.7+ と以下の依存関係が必要です:
aiohttpurllib3(自己署名証明書の警告を無効化)必要な依存関係は pip を使用してインストールできます:
pip install aiohttp urllib3
すべての主要パラメータは実行時にコマンドラインオプションで指定できます:
--url): ターゲットのGraphQL API URL。--header): Authorizationトークンやその他のヘッダーを必要に応じてカスタマイズします。リクエストはJSONボディを送信するため、Content-Type: application/json を含めてください。このオプションは繰り返し指定できます。--job-count): 起動する同時ジョブ(コルーチン)の数。デフォルトは50。--concurrency-limit): すべてのジョブ全体での同時リクエストの最大数。JOB_COUNT 以上である必要があります。デフォルトはジョブ数と同じです。注意して増やしてください。--alias-count): クエリ内のエイリアスブロックの数。クエリの深さと負荷を制御します。--delay): リクエスト間の遅延(秒)。遅延なしの場合は 0 に設定するか、ターゲットを急激に圧倒しないように調整してください。--max-requests): 各ジョブが送信する最大リクエスト数。無制限の場合は 0 を使用します。リポジトリをローカルマシンにクローンします:
git clone https://github.com/kabiri-labs/CVE-2024-40094.git
cd CVE-2024-40094
スクリプトを実行し、コマンドラインで必要なオプションを指定します:
python CVE-2024-40094.py \
--url https://api.example.com/graphql \
--header "Authorization: Bearer <token>" \
--header "Host: api.example.com" \
--job-count 50 \
--alias-count 500 \
--concurrency-limit 50
スクリプトはターゲットサーバーへのリクエストの送信を開始します。各リクエストのステータスがコンソールに表示され、ログは指定されたログファイルに書き込まれます。
出力例:
[Worker-0] Status: 200, Len: 1000, Time: 0.35s, Snippet: {"data":{"__schema":{"types":[...]}...
[Worker-1] Status: 200, Len: 1050, Time: 0.37s, Snippet: {"data":{"__schema":{"types":[...]}...
許可されていないターゲットでは使用しないでください: このスクリプトは、管理された環境でのセキュリティ研究およびテストを目的としています。明示的な許可なしに本番サーバーやシステムで使用しないでください。
サービス拒否のリスク: 脆弱なサーバーに対してこのスクリプトを実行すると、サーバーが応答不能になったりクラッシュしたりする可能性があります。注意して使用してください。
このスクリプトはMITライセンスの下でライセンスされています。詳細についてはLICENSEファイルを参照してください。