
ماسح ضوئي محلي للقراءة فقط لـ CVE-2026-42945 (NGINX Rift) يتحقق من حالات NGINX و OpenResty و Tengine بحثًا عن تكوينات إعادة الكتابة الضعيفة دون تنفيذ هجمات أو تعديل الخدمات.
اللغة: الصينية | الإنجليزية
يوفر هذا المستودع سكريبتين للفحص المحلي، للتحقق من وجود مخاطر متعلقة بـ CVE-2026-42945 في Nginx وOpenResty وTengine على خوادم Linux/Windows.
السكريبت يعمل فقط على جمع البيانات للقراءة فقط وتقييم محلي، ولا ينفذ PoC للثغرة، ولا يرسل طلبات هجوم، ولا يعدل الإعدادات، ولا يعيد تشغيل الخدمات، ولا يقوم بترقية البرنامج.
CVE-2026-42945 يُعرف أيضًا باسم NGINX Rift، وتصفه المصادر العامة بأنه مشكلة تجاوز سعة المخزن المؤقت (heap buffer overflow) في ngx_http_rewrite_module.
وفقًا لوصف NVD، عندما تشكل تعليمة rewrite مع تعليمات rewrite/if/set اللاحقة تركيبة محددة، وتتضمن متغيرات التقاط PCRE غير مسماة (مثل $1، $2) بالإضافة إلى سلسلة استبدال تحتوي على علامة استفهام ، قد يتمكن المهاجم من تفعيل تجاوز سعة المخزن المؤقت في عملية worker NGINX عن طريق بناء طلب HTTP.
?قد تتسبب هذه المشكلة في إعادة تشغيل عملية worker؛ وفي ظل ظروف معينة مثل إيقاف ASLR، يوجد خطر تنفيذ التعليمات البرمجية.
تصنف النشرة الأمنية الرسمية لـ NGINX CVE-2026-42945 على أنها تجاوز سعة مخزن مؤقت في ngx_http_rewrite_module، وتقدم حدود الإصلاح لـ NGINX Open Source:
| الحالة | إصدار NGINX Open Source |
|---|---|
| تم الإصلاح | 1.31.0+ / 1.30.1+ |
| يشتبه تأثره | 0.6.27-1.30.0 |
قد توجد فروقات في التصحيحات أو تعيين الإصدارات في التوزيعات والمنتجات التجارية وOpenResty وTengine أو الإصدارات الخاصة، وسيحاول السكريبت جمع الأدلة بقدر الإمكان، لكن يُنصح في النهاية بالتحقق يدويًا بالتزامن مع إعلانات الموردين.
هذه الأداة ليست أداة تحقق من استغلال الثغرة، بل هي أداة لجمع البيانات المحلية وفحص الإعدادات الثابتة. وتركز على تحديد التركيبات التالية:
$1، $2) غير مفسرة في سلسلة استبدال تعليمة rewrite.rewrite نفسها على ? غير مفسرة، علامة الاستفهام الحرفية مثل \? لا تعتبر شرط خطر.rewrite أو if أو set لاحقة.مثال على نمط الخطر:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?endpoint=$1 last;
set $flag 1;
}
الخطر لا يأتي من تعليمة rewrite أو set واحدة، بل من ظروف التشغيل المشتركة بين الإصدار وسياق الإعدادات وترتيب التنفيذ. بعد التطابق، يُنصح بالتحقق يدويًا مما إذا كان هذا الإعداد هو الإعداد النشط فعليًا، وما إذا كان يمكن الوصول إليه بواسطة طلبات خارجية، وما إذا كان قد تم إصلاحه بواسطة التوزيعة.
| ملف | شرح |
|---|---|
check_nginx_linux.sh | سكريبت الفحص المحلي لنظام Linux |
check_nginx_windows.ps1 | سكريبت الفحص المحلي لنظام Windows |
README.md | شرح بالصينية |
README.en.md | README بالإنجليزية |
الإصدار الأول يدعم:
rewrite الخطيرة المتعلقة بـ CVE-2026-42945.summary.txt و summary.json ودليل الأدلة الخام.الإصدار الأول لا يتضمن:
يُوصى بتشغيله بصلاحيات المسؤول:
root أو حساب بصلاحيات sudo.بدون صلاحيات المسؤول، سيحاول السكريبت جمع البيانات بقدر الإمكان؛ إذا لم يتمكن من تصدير الإعدادات النشطة الكاملة nginx -T، فسيتم وضع علامة على النتيجة كـ يتطلب التحقق اليدوي.
قم برفع check_nginx_linux.sh إلى الخادم ثم نفذ:
chmod +x check_nginx_linux.sh
sudo ./check_nginx_linux.sh
إذا لم تتمكن من استخدام sudo، يمكن التنفيذ مباشرة:
./check_nginx_linux.sh
قم برفع check_nginx_windows.ps1 إلى الخادم، ثم استخدم PowerShell مع تشغيله كمسؤول ونفذ:
powershell -ExecutionPolicy Bypass -File .\check_nginx_windows.ps1
سينشئ السكريبت دليل نتائج في نفس المجلد. يحتوي اسم الدليل على اسم المضيف والوقت ومعرف عملية السكريبت، لتجنب خلط الأدلة عند التنفيذ المتكرر في نفس الثانية.
nginx_check_<اسم_المضيف>_<الوقت>_<معرف_العملية>/
summary.txt
summary.json
raw/
host_info.txt
process_info.txt
service_info.txt
package_info.txt
nginx_paths.txt
instances/
instance_01/
nginx_invocation.txt
nginx_version.txt
nginx_build.txt
nginx_config_dump.txt
risky_config_matches.txt
instance_02/
...
| ملف أو دليل | شرح |
|---|---|
summary.txt | ملخص بالصينية، مناسب للمراجعة اليدوية وإعادة الإرسال |
summary.json | نتائج منظمة، تسهل التجميع الدفعي لاحقًا |
raw/ | مخرجات الأوامر الأولية وملفات الأدلة |
raw/instances/instance_XX/ | الإصدار والإعدادات وأدلة المخاطر المستقلة لكل مثيل |
سيتم تسجيل ما يلي في الملخص:
| حقل | شرح |
|---|---|
عدد المثيلات | عدد مثيلات Nginx / OpenResty / Tengine المرشحة التي تم العثور عليها وفحصها واحدًا تلو الآخر على الجهاز |
حجم الإعدادات | حجم ملف نتائج الإعدادات الأولية المصدرة من nginx -T |
عدد الأسطر الممسوحة | عدد أسطر مخرجات الإعدادات التي قام السكريبت بمسحها فعليًا |
عدد الإعدادات الخطيرة المتطابقة | عدد قواعد rewrite الخطيرة المتطابقة |
ملخص الأدلة | معاينة لأدلة المثيل الأعلى خطورة، الأدلة الكاملة في دليل المثيل المقابل |
إذا كانت إعدادات Nginx كبيرة، لن يطبع السكريبت الإعدادات الكاملة في وحدة التحكم؛ يتم حفظ الإعدادات النشطة الكاملة في nginx_config_dump.txt في دليل المثيل المناظر. عندما يتجاوز ملف الإعدادات المصدرة 10 ميغابايت، سيستمر السكريبت في المسح التلقائي، وسيشير إلى توصية بإجراء تدقيق يدوي بالاشتراك مع نتائج raw/.
إذا تم العثور على عدة ملفات تنفيذية مرشحة nginx أو openresty أو tengine على الخادم، فسيقوم السكريبت بفحص كل منها على حدة وإنشاء تفاصيل المثيلات.
الاستنتاج في الملخص العام يأخذ أعلى مثيل خطر. الأولوية العامة محافظة:
متأثر بإعدادات خطيرةيتطلب التحقق اليدويمتأثر بدون إعدادات خطيرةغير متأثرلم يتم تثبيت Nginxحيث يتطلب التحقق اليدوي أعلى من متأثر بدون إعدادات خطيرة، مما يشير إلى وجود مثيلات غير مؤكدة تحتاج إلى مزيد من التحقق، ولا يعادل تأكيد وجود إعدادات خطيرة.
| الاستنتاج | المعنى |
|---|---|
لم يتم تثبيت Nginx | لم يتم العثور على أوامر أو عمليات أو خدمات Nginx / OpenResty / Tengine |
غير متأثر | تم تحديده كإصدار تم إصلاحه، ولم يتم العثور على إعدادات خطيرة |
متأثر بدون إعدادات خطيرة | الإصدار يشتبه تأثره، لكن لم يتم العثور على إعدادات rewrite خطيرة |
متأثر بإعدادات خطيرة | الإصدار يشتبه تأثره أو إصدار مشتق يحتاج إلى تدقيق، وتم العثور على إعدادات rewrite خطيرة |
يتطلب التحقق اليدوي | الإصدار غير معروف، أو إصدار مشتق، أو فشل جمع الإعدادات، أو نقص الصلاحيات، أو أدلة غير كافية |
| المنتج | تحديد الإصدار |
|---|---|
NGINX 1.31.0+ | تم الإصلاح، السكريبت يعرضه كـ تم الإصلاح (mainline) |
NGINX 1.30.1+ | تم الإصلاح، السكريبت يعرضه كـ تم الإصلاح (stable) |
NGINX 0.6.27-1.30.0 | يشتبه تأثره |
| OpenResty / Tengine | يمكن جمع الإصدار والإعدادات، لكن علاقة تأثير الإصدار تتطلب افتراضيًا التحقق اليدوي |
قد توجد حالات في التوزيعات حيث يكون رقم الإصدار قديمًا ولكن تم تطبيق التصحيحات. إذا كان من الممكن تقديم دليل على التصحيح من المورد، يمكن إجراء التحقق اليدوي بالاشتراك مع summary.txt ومعلومات إصدار الحزمة.
rewrite/if/set في سياقات location وserver وif وغيرها.$1 و$2 في سلسلة استبدال rewrite التي تحتوي على ?.nginx -T من تصدير الإعدادات بالكامل، فلن يحكم السكريبت بأنه آمن.