Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2026-42945 — NGINX Rift 漏洞分析与复现 | Kitploit
أدوات/GitHubGitHub/rheodev/cve-2026-42945
تحليل الثغرات الأمنيةالاستغلالأمن الويباختبار الاختراقالتعلم والتعليماستغلال الملفات الثنائيةمختبرات وتدريب عملي
GitHubrheodev/cve-2026-42945

CVE-2026-42945

NGINX Rift 漏洞分析与复现

عرض المستودع
2151منذ 3 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

CVE-2026-42945 - تحليل واستنساخ ثغرة NGINX Rift

نظرة عامة

CVE-2026-42945 (الاسم الرمزي "NGINX Rift") هي ثغرة تجاوز سعة المخزن المؤقت في الكومة (Heap Buffer Overflow) في وحدة NGINX ngx_http_rewrite_module، بدرجة خطورة 9.2 (Critical) وفق معيار CVSS v4.

اكتشفها فريق أبحاث الأمن depthfirst في أبريل 2026، وقد ظلت كامنة لمدة 18 عامًا منذ إدخالها في NGINX إصدار 0.6.27 عام 2008.

النطاق المتأثر

  • NGINX Open Source 0.6.27 ~ 1.30.0
  • NGINX Plus R32 ~ R36
  • NGINX Instance Manager 2.16.0 ~ 2.21.1
  • F5 WAF for NGINX 5.9.0 ~ 5.12.1
  • NGINX App Protect WAF 4.9.0 ~ 4.16.0 و 5.1.0 ~ 5.8.0
  • NGINX Gateway Fabric 1.3.0 ~ 1.6.2 و 2.0.0 ~ 2.5.1
  • NGINX Ingress Controller 3.5.0 ~ 3.7.2, 4.0.0 ~ 4.0.1, 5.0.0 ~ 5.4.1

الإصدارات المصححة

  • NGINX 1.31.0 (صدر في 13 مايو 2026)

شروط الاستغلال

تتطلب الثغرة نمط إعداد NGINX التالي ليتم استغلالها:

root@kitploit:~
location ~ ^/api/(.*)$ {
    rewrite ^/api/(.*)$ /internal?migrated=true;
    set $original_endpoint $1;
}

الشروط الأساسية:

  1. تحتوي سلسلة الاستبدال في توجيه rewrite على ? (علامة استفهام)
  2. يشير توجيه set لاحق إلى مجموعة التقاط من تعبير نمطي (مثل $1)
  3. يحتوي URI الخاص بالطلب على أحرف قابلة للتهريب (مثل +, &, % وغيرها)

تحليل السبب الجذري

المعالجة على مرحلتين في محرك النصوص البرمجية

يستخدم محرك النصوص البرمجية في NGINX معالجة على مرحلتين لتنفيذ توجيهات rewrite/set:

  1. المرحلة الأولى (حساب الطول): حساب حجم الذاكرة المطلوب للسلسلة النهائية
  2. المرحلة الثانية (نسخ البيانات): كتابة البيانات الفعلية في المخزن المؤقت المخصص

عدم اتساق الحالة يؤدي إلى التجاوز

يكمن جوهر الثغرة في عدم اتساق حالة المحرك بين المرحلتين:

المرحلة 1: rewrite يضبط علامة is_args

عندما تحتوي سلسلة الاستبدال في توجيه rewrite على ?، تقوم دالة ngx_http_script_start_args_code بتعيين:

root@kitploit:~
void ngx_http_script_start_args_code(ngx_http_script_engine_t *e)
{
    e->is_args = 1;  // يتم تعيينها بشكل دائم، ولا تتم إعادة تعيينها أبدًا!
    e->args = e->pos;
    e->ip += sizeof(uintptr_t);
}

المرحلة 2: حساب الطول لتوجيه set يستخدم محركًا فرعيًا جديدًا تمامًا

عندما يشير توجيه set لاحق إلى مجموعة التقاط، تقوم دالة ngx_http_script_complex_value_code بإنشاء محرك فرعي مملوء بالأصفار:

root@kitploit:~
void ngx_http_script_complex_value_code(ngx_http_script_engine_t *e)
{
    ngx_http_script_engine_t le;
    // ...
    ngx_memzero(&le, sizeof(ngx_http_script_engine_t)); // le.is_args = 0
    le.ip = code->lengths->elts;

المرحلة 3: الاختلاف بين حساب الطول والنسخ الفعلي

حساب الطول (باستخدام المحرك الفرعي le، حيث is_args=0):

root@kitploit:~
// ngx_http_script_copy_capture_len_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=0، الشرط false، يتم تنفيذ فرع else
    return cap[n + 1] - cap[n];  // إرجاع الطول الأصلي (بدون تهريب)
}

النسخ الفعلي (باستخدام المحرك الرئيسي e، حيث is_args=1):

root@kitploit:~
// ngx_http_script_copy_capture_code
if ((e->is_args || e->quote) && (e->request->quoted_uri || e->request->plus_in_uri))
{
    // is_args=1، الشرط true، يتم تنفيذ فرع if
    e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
                                        cap[n + 1] - cap[n],
                                        NGX_ESCAPE_ARGS);
    // كل حرف قابل للتهريب يتم توسيعه من بايت واحد إلى 3 بايت!
}

حجم التجاوز

  • حجم المخزن المؤقت المخصص: raw_size (طول الالتقاط الأصلي)
  • الحجم المكتوب فعليًا: raw_size + 2 * N (N = عدد الأحرف القابلة للتهريب)
  • مقدار التجاوز = 2 * N بايت

على سبيل المثال، إذا كان هناك 100 علامة + في URI، فإن مقدار التجاوز هو 200 بايت.

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

1. DoS (رفض الخدمة)

أبسط طريقة استغلال - إرسال طلب يحتوي على عدد كبير من الأحرف القابلة للتهريب يكفي لتعطل عملية العامل (worker):

root@kitploit:~
GET /api/+++++++++++++++++++++++++++++++++++ HTTP/1.1
Host: target.com

2. RCE (تنفيذ التعليمات البرمجية عن بُعد)

سلسلة استغلال RCE كاملة (تتطلب تعطيل ASLR أو تجاوزه):

  1. التحكم في تخطيط الكومة: التحكم في تخطيط كومة ngx_pool_t عبر ترتيب الاتصالات
  2. استغلال التجاوز لاستبدال مؤشر cleanup: التجاوز إلى بنية تجمع الذاكرة المجاورة
  3. حقن بنية cleanup مزيفة: عبر جسم طلب POST لحقن بنية مزيفة تحتوي على عنوان دالة system()
  4. تشغيل الاستغلال: إغلاق الاتصال الضحايا، مما يؤدي إلى تشغيل ngx_destroy_pool الذي يجتاز قائمة cleanup المرتبطة

إن البنية متعددة العمليات في NGINX تجعل الاستغلال أكثر موثوقية - فبعد تعطل العامل، يقوم master بإنشاء عامل جديد عبر fork بنفس تخطيط الذاكرة تمامًا.

وصف الملفات

  • README.md - هذا الملف، وثيقة تحليل الثغرة
  • Dockerfile - لبناء بيئة NGINX القابلة للاستغلال
  • nginx.conf - إعداد NGINX الذي يشغل الثغرة
  • poc_crash.py - PoC لـ DoS (يؤدي إلى تعطل العامل)
  • docker-compose.yml - تشغيل بيئة الاختبار بنقرة واحدة

الاستنساخ السريع

root@kitploit:~
# 1. بناء وتشغيل NGINX القابل للاستغلال
docker-compose up -d

# 2. تشغيل PoC لـ DoS
python3 poc_crash.py

# 3. الاطلاع على سجلات أخطاء NGINX لتأكيد التعطل
docker-compose logs nginx

المراجع

  • NGINX الرسمي CHANGES - إعلان الإصلاح
  • تقرير بحث depthfirst - التحليل الفني لمكتشف الثغرة الأصلي
  • نشرة أمان F5 K000160932 - النشرة الأمنية الرسمية

إخلاء المسؤولية

هذه المادة مخصصة لأغراض البحث الأمني والتعليم فقط. يرجى عدم استخدام هذه المعلومات في هجمات غير مصرح بها.

تنزيل الأداة