
CVE-2026-25050에 대한 개념 증명 익스플로잇으로, GraphQL 인증을 통한 사용자 열거를 가능하게 하는 타이밍 공격입니다. 응답 시간을 측정하여 기존 계정을 식별함으로써 표적 공격을 용이하게 합니다.
이 저장소는 NativeAuthenticationStrategy.authenticate() 메서드에 영향을 미치는 타이밍 공격을 시연하는 개념 증명(PoC)을 포함합니다.
이 PoC는 블로그/연구 목적의 기술 데모로 제공됩니다.
인증 로직은 사용자가 존재하지 않을 때 즉시 반환하는 반면, 사용자가 존재할 때는 비용이 많이 드는 비밀번호 해시 검증을 수행합니다.
const user = await this.userService.getUserByEmailAddress(ctx, data.username);
if (!user) {
return false;
}
const passwordMatch = await this.verifyUserPassword(ctx, user.id, data.password);
이로 인해 기존 사용자와 비기존 사용자에 대한 인증 시도 간에 측정 가능한 타이밍 차이가 발생합니다.
여러 요청에 걸쳐 응답 시간을 측정함으로써, 공격자는 사용자 이름(이메일 주소)이 존재하는지 여부를 신뢰할 수 있게 판별할 수 있습니다.
이 PoC는 사용자 이름당 여러 번의 인증 시도를 수행하고 평균 응답 시간을 계산하여 계정을 다음과 같이 분류합니다:
python3 exploit.py -u http://target.tld -w users.txt
이 도구는 취약한 엔드포인트를 자동으로 추가합니다:
/admin-api?languageCode=en
-u, --url 대상 기본 URL
-w, --wordlist 사용자 이름 / 이메일 워드리스트
--silent 자동 모드 (진행 상황 + 유효한 사용자만 표시)
--shuffle 테스트 전 워드리스트 섞기
--delay MIN:MAX 요청 간 임의 지연 시간 (ms)
--resume state.json 이전 스캔 재개
--json results.json 결과를 JSON으로 내보내기
--delay를 사용하면 탐지 및 속도 제한을 피하는 데 도움이 됩니다.이 개념 증명은 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 저자는 오용에 대해 어떠한 책임도 지지 않습니다.