
स्रोत-निर्मित nginx 1.25.5 कंटेनर जिसमें बैकपोर्टेड CVE-2026-42945 फिक्स, OpenSSL अपग्रेड, पूर्ण प्रोवेनेंस चेन, और VEX प्रमाणीकरण शामिल है।
nginx:1.25-bookworm के लिए स्रोत-निर्मित ड्रॉप-इनएक स्रोत-निर्मित nginx 1.25.5 कंटेनर इमेज जो आधिकारिक nginx:1.25-bookworm इमेज में मौजूद दो CVEs को ठीक करता है, जबकि अपस्ट्रीम रनटाइम व्यवहार को संरक्षित रखता है।
| CVE | Component | Severity | Technique | Verification model |
|---|---|---|---|---|
| CVE-2024-6119 | OpenSSL / libssl3 | उच्च | निर्भरता संस्करण वृद्धि | स्कैनर-सत्यापन योग्य: libssl3 3.0.20 dpkg डेटाबेस में दृश्यमान |
| 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) 89 अभिकथनों को मान्य करता है जो इमेज मेटाडेटा, डायनामिक मॉड्यूल, फ़ाइलसिस्टम लेआउट, एंट्रीपॉइंट व्यवहार, dpkg पैकेजिंग और लाइव अपस्ट्रीम इमेज के विरुद्ध HTTP अनुरोध हैंडलिंग को कवर करते हैं।
अपस्ट्रीम से ज्ञात अंतर (समान के रूप में मान्य नहीं):
nginx -V में built with OpenSSL X.X.X लाइन बिल्डर के libssl-dev संस्करण को दर्शाती है, जो अपस्ट्रीम के कंपाइल-टाइम OpenSSL से भिन्न हो सकता है।debian:bookworm-slim आधार।libssl3 संस्करण वही है जो bookworm वर्तमान में प्रदान करता है (लेखन के समय 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 केवल पिन किए गए स्रोत आर्काइव प्राप्त करता है।निर्माण अधिकतर पुनरुत्पादनीय है लेकिन हर्मेटिक नहीं है:
Dockerfile.build में गिनाई गई हैं लेकिन संस्करण-पिन नहीं की गई हैं।पुनरुत्पादनीयता में सुधार करने के लिए, आधार इमेज digest को पिन करें:```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 नाम जांच के माध्यम से सेवा अस्वीकृति (Denial of Service) |
| **आधार संस्करण** | 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 CVEs को ठीक करता है (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
भेद्यता:
ngx_http_script_regex_end_code() फ़ंक्शन src/http/ngx_http_script.c में, रीराइट regex परिणाम को प्रोसेस करते समय e->is_args को रीसेट करने में विफल रहा। यदि is_args को पिछले स्क्रिप्ट इंजन ऑपरेशन द्वारा सेट किया गया था, तो रीडायरेक्ट/रीराइट पथ में बाद की बफर लंबाई गणनाएं गलत होंगी, जिसके परिणामस्वरूप क्राफ्टेड अनुरोध URIs के माध्यम से हमलावर-नियंत्रित आकार का हीप बफर ओवरफ्लो होता है।
फिक्स (एक पंक्ति):```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;
**पैच उत्पत्ति:**
| साक्ष्य | स्थान/मान |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| अपस्ट्रीम कमिट | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9) |
| अपस्ट्रीम लेखक | Roman Arutyunyan (arut) द्वारा लिखित, Sergey Kandaurov (pluknet) द्वारा प्रतिबद्ध, 2026-05-13 |
| अपस्ट्रीम PR | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350) |
| अपस्ट्रीम टैग | `release-1.31.0`, `release-1.30.1` |
| संबंधित पूर्व फिक्स | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, समान `is_args` एस्केपिंग समस्या) |
| पैच फ़ाइल | `build/patches/CVE-2026-42945.patch` |
| प्रोवेनेंस मेटाडेटा | `build/patches/CVE-2026-42945.provenance.json` |
| स्रोत टारबॉल (कमजोर) | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...` |
| स्रोत टारबॉल (ठीक किया गया) | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...` |
| कमजोर फ़ाइल SHA256 | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a` |
| ठीक की गई फ़ाइल SHA256 | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403` |
| व्युत्पत्ति विधि | दोनों टारबॉल के बीच `diff src/http/ngx_http_script.c` (अपस्ट्रीम कमिट से समरूप होने की पुष्टि की गई) |
| बदली गई पंक्तियाँ | 1 (केवल जोड़) |
| पैच स्वच्छता से लागू होता है | सत्यापित: `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` 0 पर बाहर निकलता है |
| बिल्ड-समय सत्यापन | `build.sh` सत्यापित करता है कि पैचिंग के बाद स्रोत में `e->is_args = 0` मौजूद है, विफलता पर बिल्ड रोकता है |
| बिल्ड-समय प्रमाणन | बिल्ड के दौरान `artifacts/patch-attestation.json` पर लिखा गया |
| रिग्रेशन परीक्षण | `test/test_cve_2026_42945.py` - कमजोर कोड पथ का अभ्यास करता है |
| पैच सत्यापन स्क्रिप्ट | `make verify-patch` - स्वतंत्र रूप से अपस्ट्रीम टारबॉल से पैच पुनः प्राप्त करता है |
**पैच कैसे बनाया गया:**
1. `nginx-1.25.5.tar.gz` डाउनलोड किया (SHA256 पिन किए गए हैश के विरुद्ध सत्यापित)
2. `nginx-1.30.1.tar.gz` डाउनलोड किया (SHA256 सत्यापित: `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. दोनों ट्री के बीच `diff src/http/ngx_http_script.c` चलाया
4. डिफ ने बिल्कुल एक पंक्ति उत्पन्न की - `e->is_args = 0;` जोड़
5. संदर्भ पंक्तियों के साथ एक यूनिफाइड डिफ पैच के रूप में निकाला गया
6. सत्यापित किया कि पैच nginx 1.25.5 पर स्वच्छता से लागू होता है
7. दोनों स्रोत ट्री स्वतंत्र सत्यापन के लिए `research/` में रखे गए हैं
**रिग्रेशन परीक्षण:**
परीक्षण सूट `test/test_cve_2026_42945.py` कमजोर कोड पथ का अभ्यास करता है, क्वेरी स्ट्रिंग स्थिति (`is_args`) में हेरफेर करने वाले रीराइट नियमों के माध्यम से अनुरोध भेजकर। यह मान्य करता है:
- ट्रेलिंग `?` (क्वेरी स्ट्रिप) के साथ रीराइट रीडायरेक्ट अच्छी तरह से बने प्रतिसाद उत्पन्न करते हैं
- श्रृंखलित रीराइट जो `is_args` स्थिति को टॉगल करते हैं, वर्कर को क्रैश नहीं करते
- लंबी क्वेरी स्ट्रिंग्स (4KB+) बफर ओवरफ्लो कलाकृतियाँ (नल बाइट्स, ओवरलॉन्ग लोकेशन हेडर) उत्पन्न नहीं करतीं
- 100 तीव्र मिश्रित अनुरोध वर्कर क्रैश का कारण नहीं बनते
- वर्कर प्रक्रिया सभी परीक्षण मामलों को SIGSEGV या हीप भ्रष्टाचार के बिना सहन करती है
चलाएँ: `make test-cve`
**स्कैनर व्यवहार:**
चूंकि पैकेज संस्करण `1.25.5` ही रहता है, स्कैनर अपने डेटाबेस में सलाह मौजूद होने पर CVE-2026-42945 को फ़्लैग करेंगे। यह अपेक्षित है - स्कैनर `(पैकेज-नाम, अपस्ट्रीम-संस्करण)` से मिलान करते हैं और यह जांच नहीं सकते कि स्रोत को पैच किया गया है या नहीं। VEX दस्तावेज़ इस निष्कर्ष को मशीन-पठनीय औचित्य के साथ दबाता है। स्कैनर दमन एक संचार तंत्र है, उपचार का प्राथमिक साक्ष्य नहीं। प्राथमिक साक्ष्य ऊपर दी गई पैच प्रोवेनेंस श्रृंखला और रिग्रेशन परीक्षण है।
---
## VEX (भेद्यता शोषण क्षमता आदान-प्रदान)
### VEX की आवश्यकता क्यों है
स्कैनर dpkg डेटाबेस से `(नाम, संस्करण)` द्वारा पैकेजों की पहचान करते हैं। हमारा पैकेज `nginx 1.25.5-1~bookworm+echo1` है - स्कैनर इसे अपस्ट्रीम संस्करण 1.25.5 के रूप में पार्स करते हैं और nginx ≤ 1.25.5 को प्रभावित करने वाले सभी CVE को फ़्लैग करते हैं।
बैकपोर्टेड फिक्स के लिए, स्कैनर यह निर्धारित नहीं कर सकता कि कमजोर कोड को पैच किया गया है। संस्करण जानबूझकर 1.25.5 ही रहता है ताकि पैकेज संगतता बनी रहे। VEX एक मशीन-पठनीय प्रमाणन प्रदान करता है कि CVE को संबोधित किया गया है, जो सत्यापन योग्य साक्ष्य से जुड़ा है।
### VEX विश्वसनीयता श्रृंखला
CVE-2026-42945 के लिए VEX कथन केवल कागजी कार्रवाई नहीं है। यह निम्न द्वारा समर्थित है:
1. **पैच प्रोवेनेंस** - `build/patches/CVE-2026-42945.provenance.json` सटीक अपस्ट्रीम स्रोत, व्युत्पत्ति विधि और फ़ाइल हैश का दस्तावेजीकरण करता है
2. **बिल्ड-समय सत्यापन** - `build.sh` यह सुनिश्चित करता है कि फिक्स मार्कर संकलित स्रोत में मौजूद है, विफलता पर बिल्ड को रोकता है
3. **बिल्ड प्रमाणन** - `artifacts/patch-attestation.json` बिल्ड के दौरान उत्पन्न पैच-पूर्व/पश्चात फ़ाइल हैश रिकॉर्ड करता है
4. **रिग्रेशन परीक्षण** - `test/test_cve_2026_42945.py` बिना क्रैश या भ्रष्टाचार के कमजोर कोड पथ का अभ्यास करता है
5. **स्वतंत्र पुनः व्युत्पत्ति** - `make verify-patch` दोनों अपस्ट्रीम टारबॉल डाउनलोड करता है और प्रदर्शित करता है कि प्रतिबद्ध पैच न्यूनतम सुरक्षा अंतर है
### VEX क्या कवर करता है
| CVE | स्थिति | औचित्य | साक्ष्य |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | `fixed` | `vulnerable_code_not_present` | बैकपोर्ट पैच + प्रोवेनेंस + रिग्रेशन परीक्षण + बिल्ड गेट |
VEX का दायरा जानबूझकर संकीर्ण है: केवल वे CVE कवर किए जाते हैं जिन्हें इस परियोजना ने सत्यापन योग्य साक्ष्य के साथ सक्रिय रूप से उपचारित किया है। जो निष्कर्ष केवल "शिप किए गए संस्करण द्वारा कम होने की उम्मीद" है, उन्हें दबाया नहीं जाता - यह VEX को एक सामान्य दमन उपकरण के रूप में उपयोग करने से बचाता है।
### यह कैसे काम करता है
`build/generate-vex.sh` स्क्रिप्ट एक OpenVEX v0.2.0 दस्तावेज़ उत्पन्न करती है। इसे लागू करने के लिए स्कैनर कमांड:```bash
# Without VEX - CVE is reported (version-based match):
grype nginx-fixed > fixed-grype.txt
# With VEX - CVE is suppressed with justification:
grype nginx-fixed --vex vex.json > fixed-grype-vex.txt
VEX दमन सहेजे गए स्कैन आर्टिफैक्ट्स में देखने योग्य है। ध्यान दें कि स्कैनर डेटाबेस समय-समय पर पुनर्निर्मित होते हैं और CVE उपस्थिति रनों के बीच भिन्न हो सकती है। सहेजी गई baseline-grype.txt और fixed-grype.txt फाइलें समय-बिंदु साक्ष्य हैं। VEX दस्तावेज़ की वैधता स्कैनर DB स्थिति पर निर्भर नहीं करती - यह ऊपर दी गई प्रोवेनेंस श्रृंखला के माध्यम से स्वतंत्र रूप से सत्यापन योग्य है।
पैकेज का नाम nginx है (nginx-custom नहीं)। यह महत्वपूर्ण है क्योंकि:
nginx नाम देना इसे निर्भरताओं को संतुष्ट करने और मानक Debian टूलिंग द्वारा प्रबंधित होने की अनुमति देता है।स्कैनर सलाहकार डेटाबेस समय-समय पर पुनर्निर्मित होते हैं। एक सप्ताह उपस्थित CVE अगले सप्ताह अनुपस्थित हो सकता है। यह परियोजना उपचार के प्राथमिक प्रमाण के रूप में स्कैनर आउटपुट पर निर्भर नहीं करती है। साक्ष्य श्रृंखला है:
सहेजी गई स्कैन फाइलें केवल समय-बिंदु साक्ष्य हैं।
| Package | Version | CVE-2024-6119 | CVE-2026-42945 |
|---|---|---|---|
| libssl3 | 3.0.20-1~deb12u1 | रिपोर्ट नहीं किया गया (संस्करण द्वारा फिक्स्ड) | n/a |
| nginx | 1.25.5-1~bookworm+echo1 | n/a | DB में होने पर रिपोर्ट किया गया (बैकपोर्ट स्कैनर को दिखाई नहीं देता) |
--vex vex.json के साथ, CVE-2026-42945 खोज (यदि स्कैनर DB में मौजूद है) दबा दी जाती है। VEX दस्तावेज़ की वैधता प्रोवेनेंस श्रृंखला (पैच व्युत्पत्ति, बिल्ड प्रमाणन, रिग्रेशन परीक्षण) द्वारा स्थापित की जाती है, न कि केवल स्कैनर आउटपुट द्वारा।
परीक्षण सूट (test/compat.py) nginx:1.25-bookworm और nginx-fixed दोनों को Docker कंटेनर के रूप में बूट करता है और व्यवहार की तुलना करता है। प्रत्येक अभिकथन सीधे लाइव फिक्स्ड इमेज का लाइव अपस्ट्रीम इमेज के विरुद्ध परीक्षण करता है।
89 अभिकथन। सभी पास।
इसके अतिरिक्त, test/test_cve_2026_42945.py बैकपोर्टेड CVE फिक्स को विशेष रूप से लक्षित करते हुए लगभग 20 अभिकथन प्रदान करता है (ऊपर "रिग्रेशन परीक्षण" देखें)।
--with-http_v3_module फ़्लैग उपस्थिति सत्यापित की गई है; कोई UDP/QUIC ट्रैफ़िक नहीं भेजा गया है).so फ़ाइलों की उपस्थिति सत्यापित करने के अलावाRun:```bash make test
## छवि का आकार
| छवि | आकार (arm64, `docker images`) |
| ------------------------ | ----------------------------- |
| `nginx:1.25-bookworm` | ~278 MB |
| `nginx-fixed` | ~332 MB |
निर्धारित छवि अपस्ट्रीम से बड़ी है। यह अपेक्षित है: आधिकारिक छवि अनुकूलित परतों में प्री-कंपाइल बाइनरी का उपयोग करती है, जबकि हमारी छवि बिल्ड आर्टिफैक्ट्स और पूर्ण रनटाइम निर्भरताओं (सभी 12 गतिशील मॉड्यूल के लिए पुस्तकालयों सहित) को `debian:bookworm-slim` आधार में स्थापित करती है। आकार का अंतर स्रोत-स्तरीय बिल्ड नियंत्रण के लिए एक व्यापार-बंद है, न कि कार्यक्षमता में प्रतिगमन।
---
## अवशिष्ट जोखिम मूल्यांकन
### निर्धारित छवि में शेष CVEs
निर्धारित छवि में अभी भी सिस्टम पुस्तकालयों में कमजोरियां हैं जो इस परियोजना द्वारा संबोधित नहीं की गई हैं (बिंदु-समय; वर्तमान स्थिति के लिए `make scan` चलाएं):
| जोखिम स्तर | पैकेज | CVE(s) | नोट्स |
| ----------- | ------------------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| उच्च | nginx | CVE-2023-44487 | अपस्ट्रीम के अनुसार nginx ≥ 1.25.3 में कम किया गया; स्कैनर अभी भी फ़्लैग करता है क्योंकि डेबियन ट्रैकर ने सलाह को बंद नहीं किया है |
| गंभीर | libgnut30 | CVE-2026-42010, CVE-2026-33845 | बुकवर्म में कोई फिक्स उपलब्ध नहीं |
| गंभीर | libc6/libc-bin | CVE-2026-5450 | इस डेबियन रिलीज़ में ठीक नहीं किया जाएगा |
| उच्च | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | बुकवर्म के लिए glibc ठीक नहीं किया जाएगा |
| उच्च | dpkg | CVE-2025-6297, CVE-2026-2219 | ठीक करने योग्य (1.21.23 में अपग्रेड करें) |
| उच्च | libldap-2.5-0 | CVE-2023-2953 | ठीक नहीं किया जाएगा |
| उच्च | curl/libcurl4 | CVE-2026-5773, CVE-2026-6276 | ठीक नहीं किया जाएगा |
| उच्च | ncurses | CVE-2025-69720 | ठीक नहीं किया जाएगा |
ये `debian:bookworm-slim` से विरासत में मिले हैं और इस परियोजना के nginx-केंद्रित CVE उपचार के दायरे से बाहर हैं।
### इस दृष्टिकोण की सीमाएं
1. **हर्मेटिक नहीं।** आधार छवि और apt पैकेज बिल्ड समय पर लाइव डेबियन रिपॉजिटरीज से हल किए जाते हैं। आधार छवि SHA को पिन करना और apt स्नैपशॉट का उपयोग करने से पुनरुत्पादनीयता में सुधार होगा।
2. **कोई व्यवहारिक QUIC परीक्षण नहीं।** HTTP/3 समर्थन संकलित है (ध्वज द्वारा सत्यापित) लेकिन परीक्षण सूट में कोई QUIC ट्रैफ़िक का अभ्यास नहीं किया जाता।
3. **कोई प्रदर्शन सत्यापन नहीं।** 50-समवर्ती-अनुरोध परीक्षण शुद्धता साबित करता है, थ्रूपुट या विलंबता समानता नहीं।
4. **केवल मॉड्यूल लोडिंग।** गतिशील मॉड्यूल (GeoIP, image_filter, XSLT) मौजूद और लोड करने योग्य होने की पुष्टि की जाती है, लेकिन उनका फीचर व्यवहार बुनियादी लोड से परे अभ्यास नहीं किया जाता।
5. **एकल-आर्किटेक्चर साक्ष्य।** परीक्षण केवल बिल्ड होस्ट आर्किटेक्चर पर चलते हैं (विकास में arm64; मल्टी-आर्क के लिए CI की आवश्यकता होगी)।
### भविष्य में सुधार (लागू नहीं)
1. हर्मेटिक बिल्ड के लिए आधार छवि डाइजेस्ट को पिन करें और apt स्नैपशॉट URL का उपयोग करें।
2. ट्रांज़िटिव डिप्स के रूप में खींचे गए अनावश्यक पैकेज (ncurses, util-linux) को हटाएं।
3. SBOM उत्पन्न करें (`make sbom` लक्ष्य मौजूद है, `syft` का उपयोग करता है) और SBOM purl के माध्यम से VEX से लिंक करें।
4. `cosign` के साथ छवि पर हस्ताक्षर करें और VEX + SBOM + पैच-प्रमाणपत्र को OCI प्रमाणपत्र के रूप में संलग्न करें।
5. स्वचालित बिल्ड → परीक्षण → स्कैन → पुश के लिए CI पाइपलाइन (GitHub Actions) जोड़ें।
6. HTTP/3 प्रोटोकॉल परीक्षण जोड़ें (QUIC क्लाइंट, प्रमाणपत्र सेटअप, UDP पोर्ट)।
7. OS-स्तरीय CVE शोर को पूरी तरह समाप्त करने के लिए डिस्ट्रोलेस बेस पर विचार करें।
8. परीक्षण लोड के तहत कोई हीप भ्रष्टाचार साबित करने के लिए ASan (AddressSanitizer) बिल्ड वेरिएंट जोड़ें।
---
## बिल्ड फ़्लैग्स बनाम अपस्ट्रीम
`build.sh` में `./configure` फ़्लैग्स आधिकारिक `nginx:1.25-bookworm` छवि में `nginx -V` द्वारा रिपोर्ट किए गए फ़्लैग्स के समान हैं। यह `test/compat.py::test_nginx_version` द्वारा सत्यापित किया जाता है, जो `-ffile-prefix-map=<path>` अंतर को सामान्य करता है और शेष फ़्लैग्स की तुलना वर्ण-दर-वर्ण करता है।
उल्लेखनीय फ़्लैग्स (दोनों छवियों में मौजूद):
| फ़्लैग / सुविधा | उद्देश्य |
| ---------------------------- | ------------------------------------------------------------------------------ |
| `--prefix=/etc/nginx` | डॉकर छवि सम्मेलन (डेबियन के `/usr/share/nginx` का नहीं) |
| `--with-http_v3_module` | अंतर्निहित QUIC स्टैक (OpenSSL QUIC API से स्वतंत्र) |
| `--with-pcre` (PCRE2) | `libpcre2-8-0` से लिंक करता है (लीगेसी PCRE1 नहीं) |
| `--with-stream` | TCP/UDP प्रॉक्सी मॉड्यूल (गतिशील) |
| सुरक्षा कठोरीकरण | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE |
| गतिशील मॉड्यूल (×12) | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (रिलीज़ + डीबग) |
| `--with-debug` (डीबग) | nginx-debug बाइनरी समान फ़्लैग्स + डीबग के साथ अलग से बनाई गई |
---
## डेबियन पैकेज
`.deb` पैकेज मेटाडेटा:```
Package: nginx
Version: 1.25.5-1~bookworm+echo1
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre2-8-0 (>= 10.22),
libssl3 (>= 3.0.14), zlib1g (>= 1:1.2.11), libgeoip1 (>= 1.6.12),
libgd3 (>= 2.1.0~alpha~), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25),
lsb-base (>= 3.0-6), adduser
Provides: httpd, nginx, nginx-r1.25.5
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core
मुख्य पैकेजिंग निर्णय:
libssl3 (>= 3.0.14) - स्पष्ट रूप से पैच किए गए OpenSSL की आवश्यकता है (अपस्ट्रीम
में >= 3.0.0 घोषित है)। यह वह तंत्र है जो CVE-2024-6119 फिक्स को लागू करता है।Provides: nginx-r1.25.5 - डायनामिक मॉड्यूल पैकेजों को संतुष्ट करता है जो
इस वर्चुअल पैकेज पर निर्भर हैं।/etc/nginx/nginx.conf और
/etc/nginx/conf.d/default.conf। IPv6 एंट्रीपॉइंट स्क्रिप्ट की dpkg-query --showformat
जांच के लिए यह आवश्यक है।/bin/false (अपस्ट्रीम से मेल खाता है - परीक्षण सूट में सत्यापित)
के साथ nginx उपयोगकर्ता/समूह बनाता है।.so मॉड्यूल, पूर्ण
/etc/nginx कॉन्फ़िग ट्री, init.d/systemd/logrotate फ़ाइलें, मैन पेज, HTML
डिफ़ॉल्ट, और /etc/nginx/modules → /usr/lib/nginx/modules सिमलिंक।पैकेज का नाम nginx है, nginx-custom नहीं। यदि नाम बदला जाता, तो स्कैनर
इसे nginx सलाहकारों से मेल नहीं कर पाते - सभी nginx CVE, जिनमें अनफिक्स्ड भी शामिल हैं,
रिपोर्ट से चुपचाप गायब हो जाते। नाम nginx रखने से स्कैनर की ईमानदार रिपोर्टिंग सुनिश्चित
होती है और VEX को सार्थक बनाता है।
VEX के लिए CVE दृश्यता आवश्यक है। VEX का उद्देश्य एक ऐसे CVE को दबाना है जो पहले से रिपोर्ट किया गया है। यदि स्कैनर को CVE नहीं मिलता (पैकेज का नाम बदलने या DB टाइमिंग के कारण), तो VEX के पास दबाने के लिए कुछ नहीं होता।
libssl3 (>= 3.0.14) पैकेज निर्भरता के रूप में। यह उम्मीद करने के बजाय कि रनटाइम बेस में
संयोग से पैच किया गया OpenSSL हो, .deb एक ऐसे संस्करण की कठोर आवश्यकता रखता है जिसमें
CVE-2024-6119 का फिक्स शामिल है।
स्कैनर डेटाबेस अस्थिरता। सलाहकार डेटाबेस समय-समय पर पुनर्निर्मित होते हैं। एक CVE जो एक सप्ताह मौजूद है, अगले सप्ताह अनुपस्थित हो सकता है। इस रिपो में सहेजी गई स्कैन फ़ाइलें समय-बिंदु साक्ष्य हैं; वर्तमान स्कैन भिन्न हो सकते हैं।
AI उपकरणों का उपयोग। GitHub Copilot ने पैच विश्लेषण (nginx 1.25.5 और 1.30.1 स्रोत ट्री की तुलना), परीक्षण सूट संरचना, पैकेज-नाम-बदलने वाले स्कैनर से बचने की समस्या की पहचान, और VEX दस्तावेज़ लेखन में सहायता की। डेबियन पैकेजिंग विवरण और Grype संस्करण-मिलान अनुमानों के लिए मैन्युअल सत्यापन आवश्यक था।
| फ़ील्ड | मान |
|---|
| घटक | 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 CHANGES: "रीराइट मॉड्यूल में हीप मेमोरी बफर ओवरफ्लो" |
| श्रेणी | क्या तुलना की जाती है | अभिकथन गणना |
|---|
| इमेज मेटाडेटा | Entrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels | 7 |
| nginx -V आर्गुमेंट्स | कॉन्फ़िगर फ़्लैग्स समान (-ffile-prefix-map पथ के लिए सामान्यीकृत) | 1 |
| डायनामिक मॉड्यूल | सभी 12 अपस्ट्रीम .so फ़ाइलें मौजूद + /etc/nginx/modules सिमलिंक | 13 |
| nginx-debug बाइनरी | --with-debug और --with-http_v3_module डीबग -V में मौजूद | 2 |
| फाइलसिस्टम लेआउट | ~20 प्रमुख पथ, /dev/stdout और /dev/stderr के लिए लॉग सिमलिंक | ~20 |
| उपयोगकर्ता/समूह कॉन्फ़िग | getent passwd/group nginx आउटपुट समान | 2 |
| dpkg कॉन्फ़ाइल्स | dpkg-query default.conf और nginx.conf को कॉन्फ़ाइल के रूप में रिपोर्ट करता है | 1 |
| पैकेज प्रदान | dpkg -s nginx Provides: nginx-r1.25.5 दिखाता है | 1 |
| NJS बाइनरी | njs -v 0.8.4 लौटाता है | 1 |
| IPv6 एंट्रीपॉइंट | 10-listen-on-ipv6-by-default.sh default.conf को समान रूप से परिवर्तित करता है | 1 |
| Envsubst टेम्पलेट्स | NGINX_ENVSUBST टेम्पलेट प्रतिस्थापन समान आउटपुट उत्पन्न करता है | 1 |
| स्टार्टअप लॉग | सभी एंट्रीपॉइंट लॉग लाइनें अपस्ट्रीम फॉर्मेट से मेल खाती हैं | 1 |
| HTTP GET/HEAD/POST | कई एंडपॉइंट्स के लिए प्रतिक्रिया बॉडी, स्थिति, हेडर मेल खाते हैं | ~10 |
| दूषित अनुरोध | रॉ TCP त्रुटि प्रतिक्रिया समान | 1 |
| स्थैतिक फ़ाइल सर्विंग | माउंटेड फ़ाइल सही सामग्री के साथ सर्व की गई | 1 |
| TLS समाप्ति | स्व-हस्ताक्षरित प्रमाणपत्र के साथ HTTPS समान रूप से काम करता है | 1 |
| ग्रेसफुल शटडाउन | SIGQUIT स्वच्छ निकास (कोड 0) उत्पन्न करता है | 1 |
| कॉन्फ़िग रीलोड | SIGHUP बिना रीस्टार्ट के नया कॉन्फ़िग लागू करता है | 1 |
| समवर्ती अनुरोध | 50 समानांतर अनुरोध सभी 200 लौटाते हैं | 1 |