
James Kettle의 (CVE-2025-32094) HTTP/1.1 must die: the desync endgame을 테스트하기 위한 Go 도구 및 Nuclei 템플릿
이 저장소는 PortSwigger의 James Kettle이 수행한 획기적인 연구를 기반으로 HTTP/1 요청 스머글링(desync) 취약점을 탐지하기 위한 방어적 보안 도구를 포함합니다.
이 작업은 다음의 기술에서 직접 영감을 받아 구현되었습니다:
이 도구에 구현된 공격 패턴, 기술 및 탐지 방법은 주요 웹 인프라 제공업체 전반에서 HTTP/1.1 프로토콜 구현의 근본적인 결함을 밝힌 James Kettle의 선구적인 연구를 기반으로 합니다.
James Kettle의 연구는 다음에 영향을 미치는 취약점을 입증했습니다:
HTTP/1.1의 모호한 요청 경계 정의는 요청이 시작되고 끝나는 위치에 대해 James Kettle이 '극도의 모호성'이라고 부른 것을 만듭니다. 이로 인해 프런트엔드와 백엔드 서버 간의 파서 불일치가 발생하여 정교한 요청 스머글링 공격이 가능해집니다. 이러한 도구는 방어적 보안 테스트를 위해 이러한 취약점을 식별하는 데 도움을 줍니다.
http1-desync-test.go)여러 공격 패턴을 구현한 포괄적인 HTTP/1 desync 취약점 테스터입니다.
# Clone the repository
git clone https://github.com/nconsolo/echteeteepee.git
cd echteeteepee
# Install dependencies
go mod download
# Build the tool
go build -o http1-desync-test http1-desync-test.go
# Test all attack patterns
./http1-desync-test -target https://example.com
# Test specific attack pattern
./http1-desync-test -target https://example.com -test vh
# Enable verbose output
./http1-desync-test -target https://example.com -verbose
# Set custom timeout
./http1-desync-test -target https://example.com -timeout 10s
-target: 대상 URL (필수)-test: 테스트 유형: all, vh, 0cl, expect, double, clte (기본값: all)-timeout: 요청 타임아웃 (기본값: 5s)-verbose: 자세한 출력을 활성화하여 원시 요청/응답 확인nuclei-templates/http1-desync.yaml)HTTP/1 desync 취약점을 대규모로 탐지하기 위한 Nuclei 자동 스캐닝 템플릿입니다.
# Install Nuclei (if not already installed)
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
# Copy template to Nuclei templates directory
cp nuclei-templates/http1-desync.yaml ~/.nuclei-templates/
# Scan single target
nuclei -u https://example.com -t nuclei-templates/http1-desync.yaml
# Scan multiple targets
nuclei -l targets.txt -t nuclei-templates/http1-desync.yaml
# Scan with rate limiting
nuclei -u https://example.com -t nuclei-templates/http1-desync.yaml -rl 10
모든 공격 패턴은 James Kettle의 연구 결과와 입증된 익스플로잇 기술을 기반으로 합니다.
출처: James Kettle의 "HTTP/1 Must Die" 연구
프런트엔드 프록시가 하나의 요청 경계를 보는 반면 백엔드 서버는 다른 요청 경계를 보는 불일치를 악용합니다. 공격 페이로드는 프런트엔드에는 헤더 데이터로 보이지만 백엔드에서는 별도의 요청으로 해석되는 숨겨진 요청을 포함합니다.
연구 예시: 주요 CDN 제공업체의 파서 차이를 입증하는 데 사용됨.
출처: James Kettle의 IIS 및 T-Mobile 취약점 발견
서버 간 Content-Length: 0 헤더의 서로 다른 해석을 활용합니다. 일부 서버는 CL=0일 때 본문을 무시하는 반면, 다른 서버는 여전히 처리하여 요청 경계 혼란을 초래합니다.
실제 영향: IIS 서버 및 T-Mobile 인프라에서 성공적으로 악용됨.
출처: James Kettle의 T-Mobile 및 LastPass 연구
프런트엔드와 백엔드가 지속 처리를 다르게 처리하는 Expect: 100-continue 메커니즘을 악용합니다. 이는 프런트엔드가 100-continue 응답을 기다리는 동안 요청을 밀반입할 기회를 만듭니다.
연구 배경: T-Mobile 및 LastPass 인증 시스템에서 입증됨.
출처: James Kettle의 고급 desync 방법론
여러 desync 공격을 연결하여 응답 큐를 오염시키고, 공격자가 다른 사용자가 받는 응답을 제어할 수 있도록 합니다. 이는 연구에서 가장 정교한 공격 중 하나를 나타냅니다.
중요 발견: 합법적인 사용자에게 악의적인 응답을 제공하여 완전한 사이트 장악을 가능하게 함.
출처: James Kettle의 핵심 HTTP/1.1 모호성 연구
Content-Length와 Transfer-Encoding: chunked 헤더 간의 충돌을 악용합니다. 서로 다른 서버는 이러한 헤더를 다르게 우선 처리하여 파서 불일치를 만들어 요청 스머글링을 가능하게 합니다.
기초: 이러한 충돌은 James Kettle이 HTTP/1.1 사양에서 식별한 근본적인 결함을 나타냅니다.
James Kettle의 연구 방법론을 기반으로, 이 도구들은 다음을 찾습니다:
James Kettle의 영향 분류에 따라:
이 도구는 다음을 위해 설계되었습니다:
이 도구를 사용하지 마십시오:
James Kettle의 방법론에 따라, 이 도구는 desync 조건을 적절히 테스트하기 위해 지속적인 HTTP/1.1 연결을 유지합니다. 각 테스트는 단일 TCP 연결을 생성하고 여러 요청을 전송하여 파싱 차이를 관찰합니다.
공격 페이로드는 James Kettle이 자신의 연구에서 사용한 정확한 패턴을 기반으로 신중하게 구성되어, 그가 문서화한 서버 동작과의 호환성을 보장합니다.
탐지 로직은 James Kettle이 $350K+ 버그 바운티 연구에서 성공적인 desync 공격을 식별하는 데 사용한 동일한 지표를 구현합니다.
James Kettle의 발견 및 권장 사항 기반:
MIT 라이선스 - 자세한 내용은 LICENSE 파일 참조
이 도구는 교육 및 방어적 보안 목적으로만 제공됩니다. 사용자는 시스템을 테스트하기 전에 적절한 권한이 있는지 확인할 책임이 있습니다. 저자는 이 도구의 오용이나 이로 인한 손해에 대해 어떠한 책임도 지지 않습니다.