
Этот скрипт эксплуатирует уязвимость CVE-2024-40094 в graphql-java
Этот скрипт эксплуатирует уязвимость CVE-2024-40094 в graphql-java, вызывая отказ в обслуживании на основе ExecutableNormalizedFields (ENF). Он формирует специально подготовленный GraphQL introspection-запрос с глубоко вложенными алиасами, предназначенный для перегрузки уязвимого сервера.
Скрипт использует асинхронные запросы для отправки серии крупных introspection-запросов на целевой GraphQL-сервер. Запросы отправляются в виде JSON-нагрузок и структурированы таким образом, чтобы эксплуатировать конкретную уязвимость в том, как GraphQL-серверы обрабатывают глубоко вложенные introspection-запросы. Запуская большое количество таких запросов параллельно, скрипт направлен на создание условия отказа в обслуживании на уязвимых системах.
asyncio и aiohttp для эффективных неблокирующих запросов.Этот эксплойт нацелен на серверы, работающие на уязвимой версии graphql-java, в частности на те, которые некорректно обрабатывают глубоко вложенные introspection-запросы.
graphql-java (версии, уязвимые к CVE-2024-40094)Для запуска эксплойта вам понадобится Python 3.7+ со следующими зависимостями:
aiohttp для асинхронных HTTP-запросовurllib3 для обработки SSL (отключает предупреждения о самоподписанных сертификатах)Вы можете установить необходимые зависимости с помощью pip:
pip install aiohttp urllib3
Все ключевые параметры можно задать во время выполнения через опции командной строки:
--url): URL целевого GraphQL API.--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":[...]}...
Не используйте на несанкционированных целях: этот скрипт предназначен для исследований в области безопасности и тестирования в контролируемых средах. Не используйте его на production-серверах или системах без явного разрешения.
Риск отказа в обслуживании: запуск этого скрипта против уязвимого сервера может привести к его зависанию или сбою. Используйте с осторожностью.
Этот скрипт распространяется под лицензией MIT. Подробнее см. в файле LICENSE.