
이 스크립트는 graphql-java의 CVE-2024-40094 취약점을 악용합니다.
이 스크립트는 graphql-java의 CVE-2024-40094 취약점을 익스플로잇하여 ExecutableNormalizedFields (ENF) 기반 서비스 거부를 유발합니다. 깊게 중첩된 별칭(aliases)을 포함한 조작된 GraphQL 인트로스펙션 쿼리를 생성하여 취약한 서버를 압도하도록 설계되었습니다.
이 스크립트는 비동기 요청을 사용하여 대상 GraphQL 서버에 일련의 대규모 인트로스펙션 쿼리를 전송합니다. 쿼리는 JSON 페이로드로 전송되며, GraphQL 서버가 깊게 중첩된 인트로스펙션 쿼리를 처리하는 방식의 특정 취약점을 악용하도록 구성됩니다. 이러한 쿼리를 대량으로 병렬 실행하여 취약한 시스템에서 서비스 거부 상태를 유발하는 것이 목표입니다.
asyncio와 aiohttp를 사용하여 효율적이고 블로킹되지 않는 요청을 처리합니다.이 익스플로잇은 취약한 버전의 graphql-java를 실행하는 서버, 특히 깊게 중첩된 인트로스펙션 쿼리를 적절히 처리하지 못하는 서버를 대상으로 합니다.
graphql-java 서버 (CVE-2024-40094에 취약한 버전)익스플로잇을 실행하려면 Python 3.7+와 다음 종속성이 필요합니다:
aiohttp for asynchronous HTTP requestsurllib3 for SSL handling (disables self-signed certificate warnings)필요한 종속성은 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 파일을 참조하십시오.