→ العودة إلى القائمة

ثغرة CVE-2026-42945 الكامنة في Nginx منذ 18 عامًا: تحليل شامل للمبدأ وPoC والإصلاح

itadol5j

Nginx CVE-2026-42945

🚨 ثغرة CVE-2026-42945 شديدة الخطورة الكامنة في Nginx منذ 18 عامًا: المبدأ وPoC وخطة الإصلاح

في 13 مايو 2026، أعلنت جهة أبحاث الأمنdepthfirst بالتعاون مع F5 عن ثغرة خطيرة على نحو غير مسبوق في تاريخ NGINX —CVE-2026-42945:

  • درجة CVSS v4.0 البالغة 9.2: وهي ثغرة عالية الخطورة
  • تجاوز سعة المخزن المؤقت في الكومة: قد يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد (RCE)
  • كامنة منذ 18 عامًا: منذ إدراجها في قاعدة الشيفرة عام 2008
  • تؤثر على 9.75 مليون موقع حول العالم: أكثر من 2.54 مليون موقع في الصين متأثر
  • PoC متاح للعامة: نجحت شركة Qianxin في إعادة إنتاجه

هذهثغرة تاريخية في الوحدة الأساسية لـ NGINX، حيث يكفي المهاجم إرسال طلب HTTP مُحضَّر خصيصًا واحدًا للسيطرة على الخادم عن بُعد.

🔍 نظرة عامة على الثغرة

المعلومات الأساسية

خصائص الثغرة التفاصيل
معرّف الثغرة CVE-2026-42945
درجة CVSS v4.0: 9.2 | v3.1: 8.1
نوع الثغرة تجاوز سعة المخزن المؤقت في الكومة (Heap-based Buffer Overflow)
نوع التهديد تنفيذ التعليمات البرمجية عن بُعد (RCE)، وحرمان من الخدمة (DoS)
شروط الاستغلال لا تتطلب مصادقة، يكفي إنشاء طلب HTTP
المكوّن المتأثر ngx_http_rewrite_module (وحدة أساسية مدمجة في NGINX)
جهة الاكتشاف depthfirst (اكتشفتها الأنظمة الآلية في غضون 6 ساعات)

نطاق التأثير

  • 9.75 مليون موقع حول العالممتأثرة
  • 2.54 مليون موقع في الصينمتأثرة
  • يستضيف NGINX نحو ثلث مواقع العالم، مما يجعل نطاق التأثير واسعًا للغاية
  • الشيفرة مكتوبة منذعام 2008، أي كامنة منذ18 عامًا

⚠️ شروط التفعيل

يجب توفر الشروط الثلاثة معًا

يتطلب تفعيل الثغرةاجتماع الإعدادات لمجموعة شروط محددة:

الشرط الوصف مثال
1. التقاط PCRE غير مسمّى تستخدم تعليمة rewrite مجموعات التقاط غير مسمّاة $1, $2, $3…
2. سلسلة استبدال تحتوي على علامة استفهام تحتوي سلسلة الاستبدال على المحرف ? /profile.php?id=$1&tab=$2
3. وجود rewrite/if/set لاحقة تتبع تعليمة rewrite تعليمات أخرى مباشرة rewrite … last; if (…) { … }

مثال لإعداد قابل للاستغلال

# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
    set $debug_flag 1;
}

يستوفي هذا الإعداد الشروط الثلاثة معًا:التقاط غير مسمّى $1/$2،سلسلة استبدال تحتوي على ?،وتتبعها تعليمة if.

🔬 مبدأ الثغرة

عدم اتساق الحالة في المعالجة على مرحلتين

محرك البرمجة النصية في NGINX يستخدم المعالجة على مرحلتين:

  • المرحلة الأولى: حساب حجم المخزن المؤقت المطلوب
  • المرحلة الثانية: نسخ البيانات إلى المخزن المؤقت

جوهر الثغرة فيإدارة خاطئة لعلم is_args:

المرحلة حالة is_args منطق المعالجة النتيجة
مرحلة حساب الطول is_args = 0 إرجاع طول الالتقاط الأصلي تقدير حجم المخزن المؤقت بأقل من اللازم
مرحلة نسخ البيانات is_args = 1 استدعاء ngx_escape_uri، يتوسع كل بايت إلى 3 بايتات تجاوز سعة المخزن المؤقت في الكومة

سير العمل التفصيلي

  1. تعليمة rewriteتحتوي على التقاط غير مسمّى $1/$2
  2. سلسلة الاستبدالتحتوي على ? مما يضبط is_args = 1
  3. مرحلة حساب الطول: استخدام المحرك الفرعي المُهيأ حديثًا، is_args = 0
  4. إرجاع الطول الأصلي: تخصيص مخزن مؤقت في الكومة أصغر من اللازم
  5. مرحلة نسخ البيانات: استخدام المحرك الرئيسي، is_args = 1
  6. استدعاء ngx_escape_uri: توسيع البايتات وتجاوز سعة المخزن المؤقت
  7. بيانات URI التي يتحكم بها المهاجمتُكتب في منطقة التجاوز

طريقة الاستغلال

هندسة الكومة عبر الطلبات (Heap Feng Shui):

  • جسم طلب POSTبثّ ذاكرة الكومة (لأن URI لا يمكن أن يحتوي على بايتات null)
  • بيانات التجاوزإتلاف مؤشر cleanup في ngx_pool_t المجاور
  • تزوير ngx_pool_cleanup_s، بحيث يشير إلى system()
  • عند تدمير poolيُفعَّل استدعاء system()
  • تحقيق RCE

تأثير ASLR

  • عند تمكين ASLR: يؤدي فقط إلى انهيار عملية Worker (DoS)
  • عند تعطيل ASLR: يمكن تحقيق تنفيذ التعليمات البرمجية عن بُعد (RCE)

📊 الإصدارات المتأثرة

NGINX Open Source

نطاق الإصدارات إصدار الإصلاح
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

نطاق الإصدارات إصدار الإصلاح
R32 – R36 R36 P4, R35 P2, R32 P6

مكونات أخرى متأثرة

  • NGINX Instance Manager: 2.16.0 – 2.21.1
  • NGINX App Protect WAF: 4.9.0 – 5.8.0
  • NGINX Ingress Controller: 3.5.0 – 5.4.1
  • NGINX Gateway Fabric: 1.3.0 – 2.5.1
  • F5 DoS for NGINX: 4.8.0

🔥 حالة PoC

PoC متاح للعامة

  • مستودع GitHub:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • أعادت Qianxin إنتاجه: نجح باحثو الأمن في مركز الاستخبارات التهديدية في إعادة إنتاجه
  • التفاصيل التقنية متاحة للعامة: نشرت depthfirst تحليلًا تقنيًا
  • الاستغلال في البرية: لم يُرصد حتى الآن

طريقة استخدام PoC

# 构建容器
./setup.sh

# 启动易受攻击的 NGINX 服务器
docker compose -f env/docker-compose.yml up

# 执行 PoC 获取 Shell
python3 poc.py --shell

✅ خطة الإصلاح

الطريقة 1: ترقية الإصدار

# 升级到修复版本
NGINX Open Source >= 1.31.0
NGINX Open Source >= 1.30.1
NGINX Plus >= R32 P6
NGINX Plus >= R36 P4

# 升级后重启 NGINX
nginx -s reload

الطريقة 2: تعديل الإعدادات (إجراء تخفيفي)

استبدالمجموعات الالتقاط غير المسمّاةبـمجموعات الالتقاط المسمّاة:

# 易受攻击配置(未命名捕获)
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

# 修复后配置(命名捕获)
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;

مجموعات الالتقاط المسمّاة لا تفعّل الثغرة.

الطريقة 3: فحص الإعدادات

تحقق من وجود إعدادات قابلة للاستغلال:

# 搜索易受攻击的 rewrite 指令
grep -E "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/nginx.conf
grep -rE "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/conf.d/

🔍 عملية الاكتشاف

اكتشاف بواسطة نظام آلي

depthfirst لديها نظام لتحليل الأمن:

  • في غضون 6 ساعاتاكتشف 5 مشكلات
  • أكدت NGINX 4 منها
  • CVE-2026-42945هي الأشد خطورة
  • يعود تاريخها إلى عام 2008، وهي موجودة في جميع الإصدارات القياسية تقريبًا

ثغرات أخرى ذات صلة

  • CVE-2026-42946: مشكلة إفساد الذاكرة
  • CVE-2026-40701: مشكلة إفساد الذاكرة
  • CVE-2026-42934: مشكلة إفساد الذاكرة

📝 الخلاصة

CVE-2026-42945 هي ثغرة خطيرة على نحو غير مسبوق في تاريخ NGINX:

  • كامنة منذ 18 عامًا: منذ إدراجها في قاعدة الشيفرة عام 2008
  • درجة CVSS 9.2: تجاوز سعة المخزن المؤقت في الكومة قد يؤدي إلى RCE
  • شروط التفعيل: تعليمة rewrite بمجموعات التقاط غير مسمّاة + سلسلة استبدال تحتوي على ? + تعليمة لاحقة
  • نطاق التأثير: 9.75 مليون موقع حول العالم، منها 2.54 مليون موقع في الصين
  • PoC متاح للعامة: مستودع على GitHub + أعادت Qianxin إنتاجه
  • خطة الإصلاح: ترقية الإصدار أو استخدام مجموعات الالتقاط المسمّاة

مع انكشاف ثغرة كامنة منذ 18 عامًا، يُنصح بالترقية أو تعديل الإعدادات في أقرب وقت.

الإعلان الرسمي:https://my.f5.com/manage/s/article/K000161019

مستودع PoC:https://github.com/DepthFirstDisclosures/Nginx-Rift

التحليل التقني:https://depthfirst.com/research/nginx-rift