
CVE-2026-49975에 대한 개념 증명(PoC) – HPACK 증폭 및 연결 유지를 활용한 HTTP/2 서버 메모리 고갈 공격(HTTP/2 Slowloris).
서비스 거부(DoS) 개념 증명으로, HTTP/2 서버를 대상으로 합니다. HPACK 증폭과 스트림 유지를 결합하여, 적당한 네트워크 연결을 가진 단일 머신이 취약한 서버를 몇 초 내에 사용 불가능하게 만들 수 있습니다.
CVE-2026-49975mod_http2 모듈에서 과도한 크기의 메모리 할당 취약점(CWE-789)으로 인해 특수하게 조작된 HTTP 요청을 통해 서비스 거부 공격이 가능합니다.이 익스플로잇은 실행 로그에 나타난 대로 여러 단계로 진행됩니다:
TCP/TLS 연결 설정
대상 서버에 여러 개의 동시 TCP/TLS 연결이 열립니다.
HTTP/2 협상
클라이언트는 서버가 허용하는 최대 동시 스트림 수(보통 100 또는 128)를 감지합니다.
HPACK 프라이밍
신중하게 조작된 HTTP 헤더를 전송하여 서버가 과도하게 큰 HPACK 압축 테이블을 할당하도록 강제하여 메모리 소비를 빠르게 증가시킵니다.
연결 유지
스트림이 열리면 연결이 무기한 유지되어 할당된 메모리가 해제되는 것을 방지하고 결국 서버의 사용 가능한 RAM을 소진시킵니다.
여러 웹 서버를 기본 구성으로 테스트했습니다.
| 웹 서버 | 테스트 버전 | RAM | 메모리 소진 시간 | 관찰된 동작 |
|---|---|---|---|---|
| Envoy | 1.37.2 | 32 GB | ~10초 | 매우 빠르게 메모리를 성공적으로 소진했습니다. |
| Apache HTTP Server | 2.4.67 | 32 GB | ~18초 | 스트림 제한은 보통 100입니다. HPACK 프라이밍과 무기한 연결 유지를 통한 표준 공격 진행. |
| nginx | 1.29.7 | 32 GB | ~45초 | 스트림 제한은 보통 128입니다. 공격은 성공하지만 사용 가능한 메모리를 소비하는 데 더 많은 시간이 필요합니다. |
| Microsoft IIS | 지정되지 않음 | 64 GB | ~45초 | 비정상적으로 큰 스트림 제한(예: 4294967297)을 광고할 수 있습니다. |
| 취약하지 않은 대상 | 다양함 | - | - | 서버의 구성된 스트림 제한을 초과하려고 할 때 즉시 TLS 실패 또는 TooManyStreamsError 발생. |
h2.exceptions.TooManyStreamsError--streams에 제공된 값이 서버가 지원하는 최대 동시 스트림 수를 초과할 때 발생합니다.
해결 방법: 공격을 시작하기 전에 서버의 스트림 제한을 확인하세요.
NameError: name 'SettingsAcknowledued' is not definedPoC 소스 코드의 간단한 오타입니다.
해결 방법: 다음을 교체하세요:
SettingsAcknowledued
with:
SettingsAcknowledged
[SSL] unknown error일반적으로 대상이 TLS를 통한 HTTP/2를 지원하지 않거나 들어오는 연결을 거부하고 있음을 나타냅니다.
EOF occurred in violation of protocol원격 서버가 예기치 않게 연결을 종료했습니다.
이는 서버가 리소스 소진을 시작하고 새 연결을 거부하기 시작할 때 자주 발생합니다.
Invalid input ConnectionInputs.SEND_HEADERS모든 요청 헤더가 전송되기 전에 서버가 HTTP/2 연결을 종료했습니다.
개념 증명은 Python 스크립트로 구현되었습니다.
git clone https://github.com/califio/http2-bomb.git
cd http2-bomb
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
10개의 연결과 100개의 스트림을 사용한 기본 공격:
python bomb.py example.com --streams 100 --connections 10
(대상이 연결당 최소 100개의 동시 스트림을 허용해야 합니다.)
자동 스트림 제한 감지:
python bomb.py example.com --connections 10
대규모 공격:
python bomb.py target.example.com --connections 50
대량 연결 테스트:
python h2bomb.py -t target.example.com:443 -c 1000
매우 대규모 연결 테스트:
python h2bomb.py -t example.com -c 20000
이 소프트웨어는 보안 연구, 교육 목적 및 명시적 승인을 받은 시스템 테스트를 위해서만 제공됩니다.
소유하지 않거나 테스트 권한이 없는 시스템에 대해 이 도구를 무단 사용하면 관련 법률 및 규정을 위반할 수 있습니다. 저자와 기여자는 이 소프트웨어 사용으로 인한 오용이나 손해에 대해 책임을 지지 않습니다.