
حاوية nginx 1.25.5 مبنية من المصدر مع إصلاح CVE-2026-42945 المنقول، ترقية OpenSSL، سلسلة إثبات كاملة، وشهادة VEX.
| CVE | المكون | الخطورة | التقنية | نموذج التحقق |
|---|
| 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 مقابل الصورة الأولية الحية.
الاختلافات المعروفة عن الإصدار الأصلي (لم يتم التحقق من تطابقها):
built with OpenSSL X.X.X في nginx -V يعكس إصدار 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 ويتم تتبعها بواسطة آلية ملفات conffile الخاصة بـ dpkg. هذا مطلوب لبرنامج نقطة الدخول 10-listen-on-ipv6-by-default.sh، الذي يستخدم dpkg-query للكشف عما إذا كان default.conf قد تم تعديله من قبل المستخدم.
./configure && make داخل حاوية Debian نظيفة. لا توجد ثنائيات من المنبع، ولا apt install nginx.build.sh يقوم فقط بجلب أرشيفات المصدر المثبتة.البناء قابل للتكرار في الغالب لكنه ليس محكم الإغلاق:
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-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 `libssl3 3.0.20` في قاعدة بيانات dpkg ويتعرفان على أن 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 CHANGES: "heap memory buffer overflow in rewrite module" |
الثغرة:
فشلت الدالة ngx_http_script_regex_end_code() في src/http/ngx_http_script.c في إعادة تعيين
e->is_args عند معالجة نتيجة regex لإعادة الكتابة. إذا تم تعيين 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 |
| طلب السحب في المستودع الأصلي | [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` لا تتعطل العامل
- سلاسل الاستعلام الطويلة (4 كيلوبايت+) لا تسبب آثار تجاوز سعة المخزن المؤقت (بايتات فارغة، رؤوس Location طويلة جدًا)
- 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.
بالنسبة للإصلاحات المنقولة (backported)، لا يمكن للماسح الضوئي تحديد أن الكود المعرض للثغرة
قد تم تصحيحه. يبقى الإصدار عمدًا 1.25.5 للحفاظ على
توافق الحزمة. يوفر VEX إثباتًا قابلاً للقراءة آليًا بأن
الثغرة الأمنية قد تمت معالجتها، مرتبطة بأدلة قابلة للتحقق.
### سلسلة مصداقية VEX
بيان VEX لـ CVE-2026-42945 ليس مجرد أوراق. إنه مدعوم بـ:
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 ضيق عمدًا: فقط الثغرات الأمنية التي قام هذا المشروع بمعالجتها بنشاط
مع أدلة قابلة للتحقق هي المشمولة. النتائج التي من المتوقع فقط "أن يتم تخفيفها"
بواسطة الإصدار المقدم لا يتم قمعها - هذا يتجنب استخدام 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 لا تعتمد على حالة قاعدة بيانات الماسح الضوئي - بل يمكن التحقق منها بشكل مستقل عبر سلسلة الإثبات أعلاه.
تم تسمية الحزمة باسم nginx (وليس nginx-custom). هذا أمر بالغ الأهمية للأسباب التالية:
nginx يسمح لها بتلبية التبعيات وإدارتها بواسطة أدوات Debian القياسية.يتم إعادة بناء قواعد بيانات نصائح الماسح الضوئي بشكل دوري. قد يكون CVE موجودًا هذا الأسبوع وغائبًا الأسبوع التالي. هذا المشروع لا يعتمد على مخرجات الماسح الضوئي كدليل أساسي على المعالجة. سلسلة الأدلة هي:
ملفات المسح المحفوظة هي أدلة وقتية فقط.
| الحزمة | الإصدار | CVE-2024-6119 | CVE-2026-42945 |
|---|---|---|---|
| libssl3 | 3.0.20-1~deb12u1 | غير مبلغ عنه (تم إصلاحه بالإصدار) | غير متاح |
| nginx | 1.25.5-1~bookworm+echo1 | غير متاح | يتم الإبلاغ عنه عند وجوده في قاعدة البيانات (الترقية غير مرئية للماسح) |
مع --vex vex.json، يتم قمع نتائج CVE-2026-42945 (إذا كانت موجودة في قاعدة بيانات الماسح الضوئي). يتم إثبات صحة مستند VEX بواسطة سلسلة الإثبات (اشتقاق التصحيح، شهادة البناء، اختبار الانحدار)، وليس بواسطة مخرجات الماسح الضوئي وحدها.
مجموعة الاختبارات (test/compat.py) تشغل كلًا من nginx:1.25-bookworm و nginx-fixed كحاويات Docker وتقارن السلوك. كل تأكيد يختبر مباشرة الصورة المُصلحة الحية مقابل الصورة العلوية الحية.
89 تأكيدًا. جميعها ناجحة.
بالإضافة إلى ذلك، يوفر test/test_cve_2026_42945.py حوالي 20 تأكيدًا تستهدف تحديدًا إصلاح CVE المُرجع (انظر "اختبار الانحدار" أعلاه).
| الفئة | ما تتم مقارنته | عدد التأكيدات |
|---|---|---|
| بيانات الصورة الوصفية | نقطة الدخول، الأمر، المنافذ المكشوفة، المستخدم، إشارة الإيقاف، البيئة، التسميات | 7 |
| وسائط nginx -V | علامات التهيئة متطابقة (موحدة لمسار -ffile-prefix-map) | 1 |
| الوحدات الديناميكية | جميع ملفات .so الـ12 العلوية موجودة + رابط رمزي /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 |
--with-http_v3_module؛ لا يتم إرسال حركة مرور UDP/QUIC).so على القرصشغّل:```bash make test
---
## حجم الصورة
| الصورة | الحجم (arm64, `docker images`) |
| ------------------------- | ----------------------------- |
| `nginx:1.25-bookworm` | ~278 MB |
| `nginx-fixed` | ~332 MB |
الصورة الثابتة أكبر من الصورة الرسمية. هذا متوقع: الصورة الرسمية تستخدم ملفات ثنائية مُجمَّعة مسبقًا في طبقات مُحسَّنة، بينما تقوم صورتنا بتثبيت القطع الأثرية للبناء وتبعيات وقت التشغيل الكاملة (بما في ذلك المكتبات لجميع الوحدات الديناميكية الـ 12) في قاعدة `debian:bookworm-slim`. فارق الحجم هو مقايضة من أجل التحكم في البناء على مستوى المصدر، وليس تراجعًا في الوظائف.
---
## تقييم المخاطر المتبقية
### الثغرات الأمنية المتبقية في الصورة الثابتة
لا تزال الصورة الثابتة تحتوي على ثغرات أمنية في مكتبات النظام التي لم يتم معالجتها بواسطة هذا المشروع (نقطة زمنية؛ قم بتشغيل `make scan` للحصول على الحالة الحالية):
| مستوى المخاطرة | الحزمة | CVE(s) | ملاحظات |
| ------------- | -------------- | ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| مرتفع | nginx | CVE-2023-44487 | تم التخفيف في nginx ≥ 1.25.3 وفقًا للمصدر الرسمي؛ لا يزال الماسح الضوئي يضع علامات لأن متتبع Debian لم يغلق الإشعار |
| حرج | libgnutls30 | CVE-2026-42010, CVE-2026-33845 | لا يوجد إصلاح متاح في bookworm |
| حرج | libc6/libc-bin | CVE-2026-5450 | لن يتم الإصلاح في هذا الإصدار من Debian |
| مرتفع | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | لن يتم إصلاح glibc لـ bookworm |
| مرتفع | 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 في هذا المشروع.
### حدود هذه الطريقة
1. **ليست مغلقة.** يتم حل الصورة الأساسية وحزم apt في وقت البناء من مستودعات Debian الحية. تثبيت بصمة الصورة الأساسية SHA واستخدام snapshots apt من شأنه تحسين قابلية التكرار.
2. **لا اختبار سلوك QUIC.** دعم HTTP/3 مُجمَّع (تم التحقق منه بواسطة العلم) ولكن لا يتم تمرير حركة مرور QUIC في مجموعة الاختبارات.
3. **لا تحقق من الأداء.** اختبار الطلبات المتزامنة 50 يثبت الصحة، وليس تكافؤ النقل أو الكمون.
4. **تحميل الوحدات فقط.** يتم التحقق من وجود الوحدات الديناميكية (GeoIP, image_filter, XSLT) وقابليتها للتحميل، ولكن لا يتم اختبار سلوك ميزاتها بما يتجاوز التحميل الأساسي.
5. **دليل أحادي المعمارية.** يتم تشغيل الاختبارات على معمارية المضيف فقط (arm64 في التطوير؛ قد يحتاج إلى CI لمعماريات متعددة).
### تحسينات مستقبلية (غير مطبقة)
1. تثبيت بصمة الصورة الأساسية واستخدام عناوين URL لـ apt snapshot للبناءات المغلقة.
2. إزالة الحزم غير الضرورية (ncurses, util-linux) المسحوبة كتبعيات غير مباشرة.
3. إنشاء SBOM (هدف `make sbom` موجود، يستخدم `syft`) وربطه بـ VEX عبر purl SBOM.
4. توقيع الصورة بـ `cosign` وإرفاق VEX + SBOM + شهادة التصحيح كإثباتات OCI.
5. إضافة خط أنابيب CI (إجراءات GitHub) للبناء الآلي → اختبار → مسح → دفع.
6. إضافة اختبار بروتوكول HTTP/3 (عميل QUIC، إعداد الشهادة، منفذ UDP).
7. النظر في قاعدة distroless لإزالة ضوضاء CVE على مستوى النظام بالكامل.
8. إضافة متغير بناء ASan (AddressSanitizer) لإثبات عدم وجود تلف في الكومة تحت حمل الاختبار.
---
## أعلام البناء مقابل الصورة الرسمية
أعلام `./configure` في `build.sh` مطابقة لتلك التي تم الإبلاغ عنها بواسطة `nginx -V` في الصورة الرسمية `nginx:1.25-bookworm`. تم التحقق من ذلك بواسطة `test/compat.py::test_nginx_version`، الذي يقوم بتطبيع فرق `-ffile-prefix-map=<path>` ويقارن الأعلام المتبقية حرفًا بحرف.
العلم / الميزة | الغرض
| ------------------ | ----------------------------------------------------------------------------- |
| `--prefix=/etc/nginx` | اتفاقية صورة Docker (وليس `/usr/share/nginx` الخاص بـ Debian)
| `--with-http_v3_module` | مكدس QUIC مدمج (مستقل عن واجهة برمجة تطبيقات QUIC من OpenSSL)
| `--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 مبني بشكل منفصل بأعلام متطابقة + التصحيح |
---
## حزمة Debian
بيانات حزمة `.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 (مطابق للمصدر - تم التحقق منه في مجموعة الاختبارات)..so الـ 12، شجرة تهيئة /etc/nginx الكاملة، ملفات init.d/systemd/logrotate، صفحة الدليل، إعدادات HTML الافتراضية، والرابط الرمزي /etc/nginx/modules → /usr/lib/nginx/modules.الحزمة مسماة nginx، وليس nginx-custom. إذا تمت إعادة التسمية، لن تتعرف عليها الماسحات الضوئية مقابل استشارات nginx – ستختفي جميع ثغرات nginx بصمت من التقارير، بما فيها غير المُصلَحة. الاحتفاظ بالاسم nginx يضمن تقريرًا صادقًا من الماسح ويجعل VEX ذا معنى.
VEX يتطلب رؤية CVE. الغرض من VEX هو كبت CVE تم الإبلاغ عنها بالفعل. إذا لم يجد الماسح CVE (بسبب إعادة تسمية الحزمة أو توقيت قاعدة البيانات)، فلن يكون لدى VEX ما يكبته.
libssl3 (>= 3.0.14) كاعتماد للحزمة. بدلًا من الأمل في أن تحتوي البيئة الأساسية وقت التشغيل على OpenSSL مُصحَّح، يفرض ملف .deb نسخة تحتوي على إصلاح CVE-2024-6119.
تقلب قاعدة بيانات الماسح. قواعد بيانات الاستشارات تُعاد بناؤها دوريًا. قد تكون CVE موجودة في أسبوع وتغيب في الأسبوع التالي. ملفات المسح المحفوظة في هذا المستودع هي أدلة مؤقتة؛ قد تختلف عمليات المسح الحالية.
أدوات الذكاء الاصطناعي المستخدمة. ساعد GitHub Copilot في تحليل التصحيحات (مقارنة شيفرات مصدر nginx 1.25.5 و 1.30.1)، وهيكل مجموعة الاختبارات، وتحديد مشكلة تهرب الماسح بسبب إعادة تسمية الحزمة، وتأليف مستند VEX. تطلبت تفاصيل تعبئة Debian وخوارزميات مطابقة إصدار Grype تحققًا يدويًا.