
CVE-2026-49975
HTTP/2 원격 서비스 거부 취약점 재현 도구
CVE-2026-49975는 주요 웹 서버에 영향을 미치는 HTTP/2 서비스 거부 취약점입니다. 이 취약점은 보안 회사 Calif(OpenAI Codex 사용)에 의해 2026년 6월 초에 발견되었습니다.
HPACK 압축 폭탄: 매우 작은 헤더(예: "x: a")를 서버 HPACK 동적 테이블에 삽입한 후, 수천 개의 1바이트 인덱스 참조를 전송합니다. 각 참조는 서버가 많은 양의 부기 메모리를 할당하도록 강제하지만, 클라이언트는 최소한의 대역폭만 소비합니다. 메모리 증폭 비율은 약 ~5700:1(Envoy) 및 ~4000:1(Apache httpd)에 이릅니다.
Slowloris 흐름 제어 유지: 0바이트 흐름 제어 창을 통해 서버가 응답을 보내지 못하도록 차단하고, WINDOW_UPDATE 프레임을 드립-피드하여 연결을 유지함으로써 메모리 할당이 "고정"되도록 합니다.
쿠키 분할 우회: 큰 쿠키를 여러 개의 작은 조각으로 분할하여 서버의 헤더 개수 제한을 우회합니다.
| 소프트웨어 | 영향 버전 | 수정 버전 |
|---|---|---|
| Apache httpd (mod_http2) | < 2.0.41 | 2.0.41+ |
| nginx | < 1.29.8 | 1.29.8+ |
| OpenResty | nginx < 1.29.8 기반 | 1.29.8+ |
| Envoy (CVE-2026-47774) | ≤ 1.37.2 | 1.35.11, 1.36.7, 1.37.3, 1.38.1+ |
| Microsoft IIS | Windows Server 2025 | 패치 없음 |
| Cloudflare Pingora | 기본 구성 | 패치 없음 |
본 도구는 보안 연구 및 승인된 테스트를 위해 사용되며, CVE-2026-49975 취약점의 공격 메커니즘을 시연합니다.
pip install -r requirements.txt
# 기본 공격
python http2_bomb.py example.com
# 로컬 HTTP/2 테스트 서버 대상 (TLS 없음)
python http2_bomb.py localhost -p 8080 --no-tls
# 고강도 공격 (50개 스트림, 각 스트림당 50000개 참조)
python http2_bomb.py example.com -s 50 -n 50000
# 쿠키 분할 우회 활성화
python http2_bomb.py example.com --cookie-fragments 1000
# 빠른 모드 (전송 후 연결 유지 안 함)
python http2_bomb.py example.com --no-hold
test_server.py를 사용하여 로컬 검증용 간단한 HTTP/2 서버를 시작합니다:
# 자체 서명 인증서 생성
openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -nodes
# 테스트 서버 시작
python test_server.py --port 8443
# 공격 실행
python http2_bomb.py localhost -p 8443
즉시 완화: 즉시 패치할 수 없는 경우 임시로 HTTP/2 비활성화
Protocols http/1.1http2 off;패치 업그레이드:
구성 강화:
max_headers 제한 설정 (nginx 1.29.8+ 기본 1000)모니터링 및 알림:
⚠️ 본 도구는 보안 연구 및 승인된 침투 테스트용으로만 사용하십시오.
승인 없이 타인 시스템에 본 도구를 사용하는 것은 불법 행위입니다. 사용자는 현지 법률 및 규정을 준수해야 하며, 합법적인 권한을 보유한 대상에 대해서만 테스트를 수행해야 합니다.
MIT License - 보안 연구 및 교육 목적으로 사용됩니다.
| 매개변수 | 설명 | 기본값 |
|---|
target | 대상 호스트 주소 | 필수 |
-p, --port | 대상 포트 | 443 |
--no-tls | TLS 비활성화 | false |
-s, --streams | 동시 스트림 수 | 10 |
-n, --headers-per-stream | 스트림당 헤더 참조 수 | 10000 |
--cookie-fragments | 쿠키 분할 조각 수 | 0 |
--stream-delay | 스트림 간 전송 지연(초) | 0.01 |
--window-update-interval | WINDOW_UPDATE 전송 간격 | 5.0s |
--no-hold | 전송 후 연결 유지 안 함 | false |
--timeout | 소켓 타임아웃 | 30 |