الهجمات الإلكترونية المدعومة بالذكاء الاصطناعي: كيفية الكشف عن التهديدات الذكية ومنعها والدفاع ضدها

اقرأ الآن
نستخدمُ الذكاء الاصطناعي في ترجمات الموقع، ومع أننا نسعى جاهدين لبلوغ الدقة قد لا تكون هذه الترجمات دقيقةً بنسبة 100% دائمًا. تفهّمك لهذا الأمر هو موضع تقدير لدينا.

IngressNightmare: الثغرة الأمنية في تنفيذ التعليمات البرمجية عن بُعد CVE-2025-1974 وعلاجها

ب OPSWAT
شارك هذا المنشور

شهد شهر مايو 2025 الكشف العلني عن ثغرة أمنية خطيرة، CVE-2025-1974، التي أطلق عليها اسم IngressNightmare، والتي تؤثر على وحدة تحكم Kubernetes ingress-nginx المنتشرة على نطاق واسع عبر البنى التحتية السحابية الأصلية. تسمح هذه الثغرة للمهاجمين غير المصادق عليهم بحقن تكوينات عشوائية في NGINX، مما قد يؤدي إلى تنفيذ تعليمات برمجية عن بُعد غير مصرح بها واختراق كامل للمجموعة.

كجزء من برنامج زمالة OPSWAT أجرى زملاؤنا تحليلاً تقنيًا متعمقًا لفهم السبب الجذري لهذه المشكلة شديدة الخطورة ومسار استغلالها واستراتيجيات التخفيف من حدتها.

نظرة عامة على CVE-2025-1974 

CVE-2025-1974 هي ثغرة أمنية خطيرة في حقن القوالب تم تحديدها في إصدارات ingress-nginx حتى الإصدار 1.11.4 وتحديدًا 1.12.0. يمكن للمهاجمين الذين لديهم وصول على مستوى العقدة إلى مجموعة Kubernetes استغلال هذه الثغرة لتنفيذ تعليمات برمجية عشوائية باستخدام RCE عبر وحدة تحكم ingress-nginx التي تتمتع، افتراضيًا، بامتيازات واسعة، بما في ذلك الوصول إلى الأسرار المهمة داخل المجموعة.

قامت لجنة الاستجابة الأمنية في Kubernetes بتعيين هذه الثغرة الأمنية بدرجة CVSS v3.1 من 9.8 (خطورة حرجة):

واجهة المستخدم الخاصة بمقاييس CVSS ل CVE-2025-1974 التي تُظهر خيارات إمكانية الاستغلال والتأثير في IngressNightmare

المكونات الرئيسية في هذا التحليل

نظرة عامة على Kubernetes

Kubernetes (K8s) عبارة عن منصة مفتوحة المصدر لأتمتة النشر والتوسع والإدارة التشغيلية للتطبيقات المعبأة في حاويات. تتكون مجموعات Kubernetes عادةً من عدة أجهزة، والتي يمكن أن تشمل أجهزة مادية وأجهزة افتراضية، تعمل بشكل جماعي لتوفير بيئات تطبيقات متاحة وقابلة للتطوير والإدارة بشكل كبير.

وحدة تحكم NGINX Ingress Controller

وحدة تحكم دخول NGINX (ingress-nginx) هي وحدة تحكم دخول مفتوحة المصدر مبنية على خادم الويب NGINX. وهي تعمل داخل مجموعة Kubernetes، وتعمل بشكل أساسي كوكيل عكسي وموازن تحميل. تفسر وحدة التحكم هذه موارد Ingress التي يحددها المستخدمون وتترجمها إلى تكوينات NGINX قابلة للتنفيذ لتوجيه تدفق حركة المرور إلى الكتلة وداخلها.

مراجعة القبول ودورها

يتكامل Ingress-nginx مع Kubernetes باستخدام خدمة خطاف الويب المسماة AdmissionReview. تعد هذه الخدمة ضرورية لمعالجة كائنات Kubernetes Ingress الأصلية وترجمتها إلى تكوينات NGINX صحيحة وصحيحة من الناحية النحوية. بينما تضمن AdmissionReview دقة التهيئة، إلا أنها تعمل بشكل مستقل عن وحدة تحكم NGINX للدخول وتفتقر بشكل عام إلى ضوابط مصادقة صارمة. يعد هذا الافتقار إلى المصادقة الصارمة عاملاً رئيسيًا ساهم في قابلية استغلال CVE-2025-1974.

مخطط CVE-2025-1974 (IngressNightmare) الذي يوضح مخطط AdmissionReview في سير عمل وحدة التحكم في دخول NGINX في Kubernetes Ingress

استغلال الثغرات الأمنية والتحليل الفني

آلية الاستغلال

يبدأ استغلال CVE-2025-1974 في جوهره بطلب خبيث. يصمم المهاجمون طلبًا خبيثًا إلى خطاف الويب AdmissionReview، مما يجبر NGINX على تحميل مكتبة مشتركة ديناميكيًا في وقت التشغيل. وبناءً على هذه الآلية، قام زملاؤنا بتحليل كل من خطاف الويب AdmissionReview وسير عمل NGINX لفهم مسار الاستغلال هذا.

مخطط CVE-2025-1974 (IngressNightmare) الذي يوضح مسار استغلال Kubernetes عبر كائن دخول خبيث و NGINX

ثغرة حقن القالب

في خطاف الويب AdmissionReview، عند معالجة الطلبات الواردة، تقوم الدالة CheckIngress بتحويل كائنات Kubernetes Ingress إلى ملفات تكوين NGINX صالحة. يستمر التدفق على النحو التالي:

مقتطف من التعليمات البرمجية من Go يُظهر منطق حقن القوالب المتعلق بالثغرة CVE-2025-1974 (IngressNightmare)
  1. يتم تحليل كل تهيئة وتمريرها إلى generTemplate ليتم تنسيقها وفقًا لقوالب NGINX المحددة مسبقًا.
  2. بعد ذلك، يقوم testTemplate بالتحقق من صحة التكوين الذي تم إنشاؤه مقابل ثنائي NGINX الأساسي.

تستند جميع تكوينات NGINX إلى قوالب محددة مسبقًا موجودة في ملف nginx.tmpl ضمن الشيفرة المصدرية لـ ingress-nginx:

مقتطف من التعليمات البرمجية يُظهر ثغرة حقن القوالب المتعلقة ب CVE-2025-1974 (IngressNightmare)

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

مقتطف من التعليمات البرمجية من Go يُظهر منطق تحليل التعليقات التوضيحية المتعلقة بحقن قالب CVE-2025-1974 (IngressNightmare)

ومع ذلك، فإن التحقق من صحة المدخلات والتعقيم غير كافيين. على وجه التحديد، يتم إدراج حقل uid من كائن Ingress مباشرةً في قالب تكوين NGINX، مما يؤدي إلى إنشاء نقطة حقن. يمكن للمهاجم استغلال ذلك من خلال توفير مدخلات مصممة مثل uid="1234#؛ \n\n\n\n\nn\nحقن_قيمة_الحقنة".

تسمح هذه المدخلات الخبيثة بحقن النطاق العام في قالب NGINX، مما يتيح للمهاجمين تشغيل توجيهات NGINX عشوائية واحتمال تحقيق RCE.

رمز تكوين Nginx يُظهر حقن القالب المتعلق بالثغرة CVE-2025-1974 (IngressNightmare)

من حقن القالب إلى تنفيذ التعليمات البرمجية عن بُعد

شرح الدالة testTemplate() اختبار القالب()

بعد أن يتم إنشاء تكوين NGINX بواسطة دالة إنشاء القالب، تقوم الدالة testTemplate بإنشاء ملف تكوين مؤقت وتشغيل مكتبة NGINX باستخدام الأمر nginx -c {config_file} -t. هذا يجبر ثنائي NGINX على تحليل التكوين والتحقق من صحته.

انتقل إلى رمز الانتقال لدالة testTemplate() والواجهات المتعلقة بالثغرة CVE-2025-1974 (IngressNightmare)

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

لقطة شاشة للرمز تُظهر بناء جملة تحميل_الوحدة النمطية وسياقها، ذات الصلة ب CVE-2025-1974 (IngressNightmare)
تظهر مخرجات المحطة الطرفية فشل اختبار تكوين nginx المرتبط بخطأ في CVE-2025-1974 (IngressNightmare) خطأ في تحميل_وحدة نمطية

لحل هذا التحدي، واصلنا المزيد من البحث، مما أدى إلى توجيه ssl_engine، الذي وُصف بأنه "قد يتم تحميل الوحدة النمطية ديناميكيًا بواسطة OpenSSL أثناء اختبار التكوين". أثار هذا الأمر الفضول بسبب قدرته على تحميل الوحدات النمطية ديناميكيًا، مما استلزم إجراء فحص أعمق.

لقطة شاشة للرمز تشرح بناء جملة جهاز ssl_engine لسياق CVE-2025-1974 (IngressNightmare)

فهم التوجيه ssl_engine

للحصول على فهم أعمق لكيفية تعامل NGINX مع توجيه ssl_engine، بالإضافة إلى تحديد الشروط التي يسمح NGINX بموجبها بالتحميل الديناميكي لوحدات إضافية عبر هذا التوجيه، بحثنا في شيفرة مصدر NGINX.

مقتطف من التعليمات البرمجية C يُظهر تحليل تكوين NGINX، ذو صلة بتوجيهات CVE-2025-1974 (IngressNightmare) ssl_engine

عند بدء التشغيل، يقوم NGINX بتحميل حالته الأولية، ثم يقوم بتحليل ملفات التكوين سطراً بسطر. يتم التعامل مع كل توجيه من خلال بنية nginx_command_t، حيث يستدعي التوجيه ssl_engine مباشرةً أوامر ngx_openssl_commands.

تعريف بنية C ل ngx_command_s المتعلقة بتوجيهات CVE-2025-1974 (IngressNightmare) ssl_engine
الشكل 1. تعريف ngx_command_s
مقتطف من التعليمات البرمجية يُظهر مصفوفة توجيهات ssl_engine، ذات الصلة بسياق CVE-2025-1974 (IngressNightmare)
الشكل 2 بنية ssl_engine ngx_command_t

عند تحليل دالة ngx_openssl_commands، اكتشف زملاؤنا أنها تعتمد على دعم OpenSSL، وتحديدًا الدالة ENGINE_by_id التي تُستخدم لوحدات SSL المُسرّعة للأجهزة.

مقتطف من التعليمات البرمجية C يُظهر منطق توجيه ssl_engine، المتعلق بتحليل CVE-2025-1974 (IngressNightmare)

وأثناء تحليل الدالة ENGINE_by_id، قررنا أنها تتيح التحميل الديناميكي للمكتبات المشتركة. علاوة على ذلك، إذا تم تجميع المكتبة بامتداد __attribute_____((المُنشئ) )، يمكن تنفيذ الدالة المرتبطة بها فور تحميلها. يشير هذا إلى أنه من خلال استغلال توجيه ssl_engine، يمكن للمهاجم تحميل مكتبات مشتركة عشوائية على المضيف، مما قد يؤدي إلى RCE.

استهداف المكتبات المشتركة واستراتيجية الهجوم

لتسهيل تنفيذ التعليمات البرمجية بشكل موثوق، تتضمن الخطوة التالية تحديد مكتبة مشتركة. بدلاً من الاعتماد على مكتبات خارجية، يظهر نهج أكثر قابلية للتطبيق والتحكم من سلوك NGINX نفسه: آلية المخزن المؤقت لجسم العميل. تتيح هذه الميزة لـ NGINX تفريغ الطلبات الكبيرة الواردة إلى ملفات مؤقتة، مما يتيح فرصًا للاستغلال بناءً على سلوك معالجة الملفات الذي يمكن التنبؤ به.

كود nginx.conf يُظهر المسارات المؤقتة وإعدادات المخزن المؤقت، ذات الصلة بهجوم CVE-2025-1974 (IngressNightmare)

بشكل افتراضي، عندما يتجاوز الطلب الوارد 8 كيلوبايت، يكتب NGINX نص الطلب إلى ملف مؤقت موجود في /tmp/nginx/client-body، باستخدام اسم ملف بالصيغة cfg-{random_value}. يتم الاحتفاظ بهذه الملفات المؤقتة لمدة تصل إلى 60 ثانية بين الأجزاء الناجحة للرسالة المستلمة.

مخطط CVE-2025-1974 (IngressNightmare) الذي يوضح تدفق الهجوم الذي يستهدف مكتبات NGINX المشتركة والملفات المؤقتة

بعد كتابة نص طلب جزئي إلى ملف مؤقت، يؤجل NGINX الحذف حتى يتم استلام النص بالكامل. إذا ظلّ الطلب غير مكتمل ولم يتم استلام أي بيانات لمدة تصل إلى 60 ثانية، يتم حذف الملف في النهاية. ومع ذلك، من خلال حجب الجزء الأخير من البيانات عن قصد، يمكن للمهاجم الاحتفاظ بالملف المؤقت قيد الاستخدام، مما يجعله قابلاً للاستغلال.

رسم تخطيطي يوضح تدفق هجوم CVE-2025-1974 (IngressNightmare) الذي يستهدف مكتبات NGINX المشتركة وحذف الملفات

على الرغم من أنه يمكن التحكم في محتوى الملف الذي تم تحميله، إلا أن تحديد موقعه على نظام الملفات صعب بسبب اسم الملف العشوائي. يمكن تكوين مسار التخزين باستخدام client_temp_path_temp_path، ولكن اسم الملف يتم إنشاؤه عشوائيًا في وقت التشغيل، مما يجعله غير متوقع. هذه العشوائية تعيق بشكل كبير الوصول المستهدف حتى من خلال القوة الغاشمة. للتغلب على ذلك، استفاد الفريق من السلوكيات المتأصلة في نظام التشغيل Linux. انظر إلى المثال التالي:

كود بايثون يستغل CVE-2025-1974 (IngressNightmare) مع كتابة الملفات ومنطق الحلقة اللانهائية

This code opens a file and keeps it in an active state, closely mimicking the behavior of NGINX's client body buffer mechanism. Using /proc/{pid}/fd directory, attackers can find symbolic links created by the Linux kernel that map open file descriptors to their corresponding file paths. This route allows attackers to reduce the brute-force space to only two variables: the process ID (pid) and the file descriptor (fd).

مخرجات المحطة الطرفية تظهر تفاصيل العملية وواصف الملف ذات الصلة باستراتيجية الهجوم CVE-2025-1974 (IngressNightmare)

محاكاة الاستغلال

استناداً إلى التحليل أعلاه، فإن نهج الاستغلال العملي لنهج الاستغلال العملي لـ RCE داخل جراب Ingress-NGINX هو

  1. تحميل مكتبة مشتركة خبيثة باستخدام آلية المخزن المؤقت لجسم العميل في NGINX لتخزينها مؤقتًا على نظام الملفات.
  2. استخدم حقن القوالب لبدء محاولة القوة الغاشمة التي تجبر NGINX على تحميل المكتبة المشتركة التي تم تحميلها مسبقًا عبر توجيهات ضعيفة.
VE-2025-1974 (IngressNightmare) مخطط تدفق استغلال الهجوم عبر Ingress-NGINX إلى NGINX

صياغة الحمولة التي تحتوي على المكتبة المشتركة

لضمان تنفيذ التعليمات البرمجية عند التحميل، يتم تعريف دالة نقطة دخول مع امتداد منشئ داخل المكتبة المشتركة الخبيثة. يتم تنفيذ هذه الدالة عند التحميل من قبل NGINX وهي مصممة لإنشاء اتصال غلاف عكسي بمضيف بعيد. 

كود C للحمولة CVE-2025-1974 (IngressNightmare) التي تم تصنيعها باستخدام مكتبة مشتركة وأمر عكسي

بعد التجميع، تجاوز حجم المكتبة المشتركة الناتجة 8 كيلوبايت بشكل مريح، مما سمح بتخزينها بواسطة NGINX دون الحاجة إلى حشو إضافي.

قائمة المحطة الطرفية التي تعرض مكتبة danger.so المشتركة ل CVE-2025-1974 (IngressNightmare) إنشاء حمولة CVE-2025-1974

ثم صاغ زملاؤنا طلبًا بقيمة مضخمة لطول المحتوى (على سبيل المثال، 1 ميغابايت) لإحداث عدم تطابق في الحجم. وقد تسبب ذلك في قيام NGINX بتخزين الجسم بالكامل بدلاً من معالجته على الفور، مما يضمن كتابة الكائن المشترك في موقع يمكن التنبؤ به.

كود Go لصياغة حمولة بمكتبة مشتركة، تتعلق بثغرة CVE-2025-1974 (IngressNightmare)

تشغيل المكتبة المشتركة من خلال الحقن

مع وجود المكتبة المشتركة في مكانها، قمنا بعد ذلك بحقن توجيه خبيث في تكوين NGINX باستخدام حقل uid الضعيف. تضمّن هذا التوجيه ssl_engine يشير إلى مسار الملف المخزن:

كود JSON يُظهر كائن Kubernetes Ingress مع حقن لثغرة CVE-2025-1974 (IngressNightmare)

يتطلب نجاح RCE بنجاح أن يشير توجيه ssl_engine إلى المسار الصحيح للملف المخزن مؤقتًا. يمكن تحقيق ذلك من خلال برنامج نصي آلي للقوة الغاشمة يقوم بشكل منهجي بتكرار مجموعات محتملة من معرّفات العمليات وواصفات الملفات لتحديد الرابط الرمزي الصحيح الذي يشير إلى الكائن المشترك المخزن مؤقتًا.

كود Go الذي يستغل CVE-2025-1974 (IngressNightmare) من خلال حقن المكتبة المشتركة والتحقق من صحة خطاف الويب

فيما يلي عينة من قالب NGINX الذي تم إنشاؤه والذي أدى إلى تشغيل الثغرة.

كود تكوين Nginx يُظهر حقن CVE-2025-1974 (IngressNightmare) عبر توجيهات ssl_engine و مرآة

عند الاستغلال الناجح، يمكن للمهاجم الوصول إلى shell في سياق جراب ingress-nginx، والذي يمكنه افتراضيًا الوصول إلى أسرار مجموعة Kubernetes الحساسة.

مخرجات المحطة الطرفية التي تُظهر الأمر kubectl get secrets -A، ذات الصلة ب CVE-2025-1974 (IngressNightmare)

التخفيف والمعالجة

للتخفيف بشكل فعال من المخاطر المرتبطة بفيروس CVE-2025-1974، تحتاج المؤسسات إلى حل يوفر رؤية وتحكمًا في مكوناتها مفتوحة المصدر.

يلبي OPSWAT SBOM، وهي تقنية أساسية في منصة MetaDefender®، هذه الحاجة من خلال توفير مخزون لجميع مكونات البرامج والمكتبات وحاويات Docker والتبعيات المستخدمة. وهي تسمح للمؤسسات بتتبع مكوناتها وتأمينها وتحديثها بشكل استباقي.

لقطة شاشة لواجهة المستخدم تُظهر الثغرة الأمنية الحرجة CVE-2025-1974 (IngressNightmare) في وحدة تحكم nginx-ingress-ingress

في المثال أعلاه، قامت تقنية SBOM في MetaDefender Core™ بفحص حزمة nginx-ingress-controller التي تحتوي على الثغرة CVE-2025-1974. قام النظام تلقائيًا بوضع علامة على المشكلة على أنها حرجة وقدم إرشادات حول الإصدارات الثابتة المتاحة، مما مكّن الفرق من تحديد أولويات الثغرة وتصحيحها بسرعة قبل استغلالها.

يتوفر OPSWAT SBOM في MetaDefender Core MetaDefender Software Supply Chain™، مما يمكّن فرق الأمن من تحديد الثغرات الأمنية والتصرف حيالها بشكل أسرع. باستخدام OPSWAT SBOM، يمكن لفرق الأمن:

  • تحديد موقع المكونات المعرضة للخطر بسرعة - تحديد المكونات مفتوحة المصدر المتأثرة بهجمات إلغاء التسلسل فوراً. وهذا يضمن اتخاذ إجراء سريع إما في تصحيح المكتبات الضعيفة أو استبدالها. 
  • ضمان التصحيح والتحديثات الاستباقية - مراقبة المكونات مفتوحة المصدر باستمرار من خلال OPSWAT SBOM للبقاء في طليعة الثغرات الأمنية في عملية التصحيح. يمكن ل OPSWAT SBOM اكتشاف المكونات القديمة أو غير الآمنة، مما يتيح إجراء التحديثات في الوقت المناسب وتقليل التعرض للهجمات. 
  • الحفاظ على الامتثال وإعداد التقارير - يساعد نظام OPSWAT SBOM المؤسسات على تلبية متطلبات الامتثال حيث تفرض الأطر التنظيمية الشفافية في سلاسل توريد البرمجيات بشكل متزايد.
العلامات:

ابق على اطلاع دائم OPSWAT!

اشترك اليوم لتلقي آخر تحديثات الشركة, والقصص ومعلومات عن الفعاليات والمزيد.