
소스 빌드된 nginx 1.25.5 컨테이너, 백포트된 CVE-2026-42945 수정, OpenSSL 업그레이드, 완전한 공급망 증명 체인, VEX 증명 포함.
nginx:1.25-bookworm용 소스 빌드 드롭인공식 nginx:1.25-bookworm 이미지에 존재하는 두 개의 CVE를 수정하면서 업스트림 런타임 동작을 유지하는 소스 빌드 nginx 1.25.5 컨테이너 이미지입니다.
| CVE | 구성 요소 | 심각도 | 기법 | 검증 모델 |
|---|---|---|---|---|
| CVE-2024-6119 | OpenSSL / libssl3 | 높음 | 종속성 버전 업 | 스캐너 검증 가능: dpkg 데이터베이스에서 libssl3 3.0.20 확인 가능 |
| CVE-2026-42945 | nginx ngx_http_rewrite_module | 심각 | 백포트된 소스 패치 | 출처 검증 가능: 패치 파생 + 회귀 테스트 + 빌드 증명 + VEX |
이 두 가지는 서로 다른 수정 모델을 나타냅니다:
이 이미지의 nginx -V 구성 인수는 nginx:1.25-bookworm의 구성 인수와 일치합니다 (-ffile-prefix-map 빌드 경로를 정규화한 후 문자별로 비교; test/compat.py::test_nginx_version에서 확인). 테스트 스위트(make test)는 라이브 업스트림 이미지에 대해 이미지 메타데이터, 동적 모듈, 파일시스템 레이아웃, 엔트리포인트 동작, dpkg 패키징, HTTP 요청 처리를 포함한 89개의 어설션을 검증합니다.
업스트림과의 알려진 차이점 (동일한 것으로 검증되지 않음):
nginx -V의 built with OpenSSL X.X.X 줄은 빌더의 libssl-dev 버전을 반영하며, 이는 업스트림의 컴파일 타임 OpenSSL과 다를 수 있습니다.debian:bookworm-slim 베이스를 사용합니다.libssl3 버전은 북웜이 현재 제공하는 버전(작성 시점 기준 3.0.20)이며, 업스트림 이미지의 고정 버전이 아닙니다.make image
make test
make test-cve
make verify-patch
make scan
하나의 명령으로 빌드, 테스트, 스캔:```bash
make all
build/ Dockerfile.build Builder image (debian:bookworm-slim + compilation deps) build.sh Fetch → verify → patch → compile → package nginx generate-vex.sh Generate OpenVEX document for backported CVE verify-patch.sh Re-derive patch from upstream tarballs (audit tool) patches/ CVE-2026-42945.patch Backported one-line fix from nginx 1.30.1 CVE-2026-42945.provenance.json Machine-readable patch provenance and derivation metadata
test/ compat.py 89-assertion compatibility test suite (runs against live upstream) test_cve_2026_42945.py CVE-specific regression test (exercises vulnerable code path)
artifacts/
patch-attestation.json Build-time patch attestation (tracked)
nginx_*.deb Compiled package (gitignored - rebuilt via make build-source)
nginx Compiled binary (gitignored)
Containerfile Final runtime image definition
Makefile Orchestrates build → test → scan pipeline
vex.json Generated OpenVEX v0.2.0 document
baseline-trivy.txt Point-in-time Trivy scan of nginx:1.25-bookworm
baseline-grype.txt Point-in-time Grype scan of nginx:1.25-bookworm
fixed-trivy.txt Trivy scan of the fixed image
fixed-grype.txt Grype scan of the fixed image (without VEX)
fixed-grype-vex.txt Grype scan of the fixed image (with VEX applied)
---
## 빌드 과정
### 아키텍처```
debian:bookworm-slim (builder)
└─ build.sh
├─ curl nginx-1.25.5.tar.gz (SHA256-verified)
├─ curl njs-0.8.4 from github.com/nginx/njs
├─ patch -p1 < CVE-2026-42945.patch
├─ ./configure (flags identical to upstream nginx -V)
├─ make: release binary, debug binary, 4 dynamic module families (×2 release/debug)
├─ make: NJS modules (×2 release/debug) + njs CLI binary
└─ dpkg-deb → nginx_1.25.5-1~bookworm+echo1_<arch>.deb
debian:bookworm-slim (runtime)
├─ apt-get install runtime deps (libssl3 ≥ 3.0.14 enforced)
├─ dpkg -i nginx_*.deb
└─ COPY --from=upstream /docker-entrypoint.sh + /docker-entrypoint.d/
Containerfile은 /etc/nginx를 업스트림에서 복사하지 않습니다. 모든 구성
파일은 .deb 안에 포함되어 있으며 dpkg의 conffile 메커니즘으로 추적됩니다.
이는 10-listen-on-ipv6-by-default.sh 진입점 스크립트에 필요하며,
이 스크립트는 dpkg-query를 사용하여 default.conf가 사용자에 의해 수정되었는지 감지합니다.
./configure && make를 실행합니다.
업스트림 바이너리나 apt install nginx는 사용하지 않습니다.build.sh는 고정된 소스 아카이브만 가져옵니다.빌드는 대부분 재현 가능하지만 완전히 밀폐(hermetic)되지는 않습니다:
Dockerfile.build에 열거되지만 버전이 고정되지는 않습니다.재현성을 개선하려면 기본 이미지 다이제스트를 고정하세요:```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'
---
## CVE 수정 세부 정보
### CVE-2024-6119 - OpenSSL 버전 업그레이드
| 필드 | 값 |
| -------------------- | ---------------------------------------------------- |
| **구성 요소** | OpenSSL / libssl3 |
| **심각도** | 높음 (CVSS 7.5) |
| **유형** | X.509 이름 검사를 통한 서비스 거부 |
| **기준 버전** | 3.0.11-1~deb12u2 |
| **수정 버전** | 3.0.14-1~deb12u2 (또는 이후) |
| **당사 버전** | 3.0.20-1~deb12u1 |
| **NVD** | https://nvd.nist.gov/vuln/detail/CVE-2024-6119 |
| **권고** | https://openssl-library.org/news/secadv/20240903.txt |
**수정 작동 방식:**
`.deb` 패키지는 `Depends: libssl3 (>= 3.0.14)`를 선언하므로,
`apt-get install`은 수정 사항이 포함된 OpenSSL 버전을 가져오도록 강제됩니다.
현재 Debian bookworm 저장소는 3.0.20을 제공하며, 이는 CVE-2024-6119 및
기준 버전의 다른 수많은 OpenSSL CVE(CVE-2024-2511, CVE-2024-5535,
CVE-2024-4741, CVE-2023-5678, CVE-2023-6129, CVE-2023-6237, CVE-2024-9143,
CVE-2025-15467, CVE-2025-69420)를 수정합니다.
**스캐너 동작:** Grype와 Trivy는 dpkg 데이터베이스에서 `libssl3 3.0.20`을 확인하고
3.0.20 ≥ 3.0.14임을 인식하므로 CVE-2024-6119가 더 이상 보고되지 않습니다.
VEX가 필요하지 않습니다. 버전 업그레이드만으로 충분히 명백합니다.
**검증:**```bash
grep "CVE-2024-6119" baseline-grype.txt # present
grep "CVE-2024-6119" fixed-grype.txt # absent
| 필드 | 값 |
|---|---|
| 구성 요소 | nginx ngx_http_rewrite_module |
| 심각도 | 중간 (nginx.org 분류) |
| 기준 버전 | nginx 1.25.5 |
| 수정 버전 | nginx 1.30.1 (2026-05-13 출시) |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-42945 |
| 권고 | https://my.f5.com/manage/s/article/K000161019 |
| 업스트림 변경 사항 | nginx 1.30.1 변경 사항: "재작성 모듈의 힙 메모리 버퍼 오버플로우" |
취약점:
src/http/ngx_http_script.c에 있는 ngx_http_script_regex_end_code()는 재작성 정규식 결과를 처리할 때 e->is_args를 재설정하지 못했습니다. 이전 스크립트 엔진 작업에 의해 is_args가 설정된 경우, 리다이렉트/재작성 경로의 후속 버퍼 길이 계산이 잘못되어 제작된 요청 URI를 통해 공격자가 제어할 수 있는 크기의 힙 버퍼 오버플로우가 발생합니다.
수정 (한 줄):
--- a/src/http/ngx_http_script.c
+++ b/src/http/ngx_http_script.c
@@ -3176,6 +3176,7 @@ ngx_http_script_regex_end_code(ngx_http_request_t *r,
}
e->status = NGX_HTTP_MOVED_TEMPORARILY;
+ e->is_args = 0;