
مسح ثغرات CVE في إعادة كتابة Nginx (CVE-2026-42945 nginx-rift CVE-2026-9256)
اللغة: 中文 | English
هذا نص برمجي خفيف للتحقق من وجود أنماط الخطر في تكوينات NGINX المتعلقة بـ CVE-2026-42945 (NGINX Rift) و CVE-2026-9256.
تم الكشف عن الثغرة بواسطة depthfirst في مقال NGINX Rift: Achieving NGINX RCE via an 18-Year-Old Vulnerability. وفقًا للمقال ووصف F5/NVD، يرتبط الخطر بمجموعات تكوين محددة من ngx_http_rewrite_module: في نفس سياق التكوين، تحتوي سلسلة استبدال rewrite على ?، وتشير rewrite أو if أو set اللاحقة إلى متغيرات التقاط PCRE غير المسماة، مثل $1، $2.
يتحقق هذه الأداة بشكل أساسي من وجود الأنماط عالية الخطورة التالية في ملفات تكوين NGINX.
تسلسل عالي الخطورة مشابه لما يلي:
location ~ ^/api/(.*)$ {
rewrite ^/api/(.*)$ /internal?migrated=true;
set $original_endpoint $1;
}
نقطة الخطر ليست rewrite أو set منفردة، بل ترتيب تنفيذها في نفس السياق:
rewrite التقاطًا بالتعبير العادي، وتحتوي سلسلة الاستبدال على ?rewrite أو if أو set اللاحقة متغيرات التقاط غير مسماة مثل $1، $2قد يؤدي هذا المزيج إلى عدم تطابق بين حساب طول محرك النصوص البرمجية لـ NGINX ومرحلة النسخ الفعلية، مما يسبب تجاوز سعة المخزن المؤقت (heap buffer overflow).
rewrite عالي الخطورة مشابه لما يلي:
location / {
rewrite /wengine-auth-static/((.*)) /?$1$2 break;
}
شروط الخطر:
^/((.*))$ تحتوي $1 على $2$1$2ملاحظة: لا يستبعد break الخطر؛ طالما تظهر مجموعات التقاط المتداخلة المتعددة في جزء الوسائط بعد ?، فإنها لا تزال تنتمي إلى سياق الوسائط. إعادة كتابة URI العادية مثل /$1$2 break لا تنتمي إلى شروط تشغيل CVE.
عندما يصادف النص البرمجي هذا النمط، سيتم تمييزه بوضوح على أنه CVE-2026-9256.
النطاق المتأثر المدرج في مقال depthfirst يشمل:
يرجى الرجوع إلى الإعلان الرسمي لـ F5 أو نشرة الأمان الخاصة بالإصدارات للحصول على الإصدارات التي تم إصلاحها ومصفوفة المنتجات الفعلية. حتى إذا كان الإصدار ضمن النطاق المتأثر، فعادةً ما يكون من الضروري وجود تسلسل تكوين rewrite محدد لتشغيل الثغرة.
يقوم النص البرمجي بإخراج إصدار NGINX الحالي ونتيجة فحص التكوين في نفس الوقت:
0.6.27 - 1.30.1 والتكوين يطابق التسلسل الخطير: يجب ترقية NGINX أو تعديل التكوين.0.6.27 - 1.30.1 ولكن التكوين لا يطابق التسلسل الخطير: يوصى بالترقية، لكن الأداة لم تجد شرط تشغيل التكوين.امسح تكوين NGINX الكامل للجهاز الحالي مباشرة:
python3 scan_rift.py
سينفذ النص البرمجي:
nginx -T
إذا لم يكن لدى المستخدم الحالي صلاحية قراءة التكوين الكامل، يرجى استخدام sudo:
sudo python3 scan_rift.py
يمكنك أيضًا مسح ملف تكوين تم تصديره مسبقًا:
python3 scan_rift.py /path/to/nginx-full.conf
على سبيل المثال، قم بتصدير التكوين أولاً ثم امسح:
sudo nginx -T > nginx-full.conf
python3 scan_rift.py nginx-full.conf
عند عدم العثور على تسلسل خطر:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[+] No vulnerable CVE-2026-42945 sequences or CVE-2026-9256 patterns detected.
[Recommendation]: Current NGINX version is in the affected range, but no vulnerable config pattern was detected. Upgrade is recommended, but config risk was not found by this scanner.
عند العثور على تسلسل مشبوه:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE SEQUENCE FOUND (CVE-2026-42945):
Context: location ~ ^/api/(.*)$ {
[1. Rewrite With ?] rewrite ^/api/(.*)$ /internal?migrated=true;
[2. Follow-up $N] set $original_endpoint $1;
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
عند العثور على نمط مشبوه لـ CVE-2026-9256:
--- NGINX Rift Config Scanner (CVE-2026-42945 / CVE-2026-9256) ---
Current NGINX Version: nginx version: nginx/1.23.3
Version Status: Affected version range for NGINX Open Source (0.6.27 - 1.30.1)
[!] VULNERABLE PATTERN FOUND (CVE-2026-9256):
Context: location ^~ /wengine-auth-static/ {
[Rewrite Overlapping Captures] rewrite /wengine-auth-static/((.*)) /?$1$2 break;
[Context] arguments; overlapping refs: $1/$2
[Action Required]: Current NGINX version is affected and vulnerable config was found. Upgrade NGINX or adjust the reported rewrite pattern.
بعد العثور على تطابق، يجب تأكيد يدويًا ما إذا كان سياق التكوين هذا يمكن الوصول إليه من خلال الطلبات الخارجية، وترقية NGINX أو تعديل التكوين في أقرب وقت.
rewrite / set في سياقات location و server و if وما شابه.$1، $2 بعد rewrite التي تحتوي على ?.^/((.*))$ مع ?$1$2.break وسيلة لتجنب CVE-2026-9256؛ /?$1$2 break لا يزال يطابق.هذا النص البرمجي هو أداة فحص ثابتة للتكوين، تهدف إلى اكتشاف الأنماط عالية الخطورة بسرعة، وهو لا يعادل التحقق من استغلال الثغرات.
include غير الطبيعي، أو التكوينات المولدة ديناميكيًا على نتائج الفحص.