الثغرات الأمنية في ingress-nginx التي تسمح بتنفيذ التعليمات البرمجية والاستيلاء على مجموعات Kubernetes

تم تحديد أربع ثغرات أمنية في وحدة التحكم ingress-nginx التي طورها مشروع Kubernetes، والتي تسمح للمهاجم بتنفيذ الكود الخاص به على خوادم أنظمة السحابة التي تستخدم منصة Kubernetes والحصول على وصول كامل إلى مجموعة Kubernetes. تم تصنيف القضايا على أنها حرجة (9.8 من 10). أطلق الباحثون الذين حددوا المشكلات على الثغرات الأمنية اسم IngressNightmare، وأشاروا إلى أن الثغرات الأمنية تؤثر على حوالي 43% من بيئات السحابة. تم إصلاح الثغرات الأمنية في إصدارات ingress-nginx 1.11.5 و 1.12.1.

Ingress-контроллер выступает в роли шлюза и используется в Kubernetes для организации доступа из внешней сети к сервисам внутри кластера. Контроллер ingress-nginx является наиболее популярным и применяет الخادم NGINX для проброса обращений к кластеру, маршрутизации внешних запросов и балансировки нагрузки. Проект Kubernetes предоставляет базовые ingress-контроллеры для AWS, GCE и nginx, последний из которых никак не связан с контроллером kubernetes-ingress, сопровождением которого занимается компания F5/NGINX (рассматриваемые уязвимости не затрагивают проекты, развиваемые разработчиками NGINX, упоминание nginx в названии ingress-nginx связано лишь с задействованием nginx в качестве прокси).

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

في التكوين الافتراضي، يمكن للكود الذي يطلقه المهاجم الوصول إلى إعدادات كائن Ingress، والتي تخزن، من بين أمور أخرى، بيانات الاعتماد للوصول إلى خوادم Kubernetes، مما يسمح بالوصول المميز إلى المجموعة بأكملها. كحل مؤقت، يوصى بتعطيل ميزة "التحقق من صحة وحدة التحكم في القبول" في ingress-nginx.

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

تتيح لك الثغرات الأمنية التي تم تحديدها استبدال إعداداتك في nginx عن طريق إرسال كائن دخول مصمم خصيصًا مباشرة إلى وحدة التحكم في القبول. وجد الباحثون أن بعض خصائص طلبات الاختبار، المحددة في الحقل ".request.object.annotations"، يتم استبدالها مباشرة في تكوين nginx. في هذه الحالة، لا يتم تطبيق التكوين الناتج، ولكن يتم اختباره فقط عن طريق تشغيل الملف القابل للتنفيذ "nginx" مع الخيار "-t".

على وجه الخصوص، يتم إجراء استبدال البيانات الخارجية في التكوين للمعلمات "mirror-target" و"mirror-host" (CVE-2025-1098) و"auth-tls-match-cn" (CVE-2025-1097) و"auth-url" (CVE-2025-24514). على سبيل المثال، في سطر التكوين "set $target {{ $externalAuth.URL }};" بدلاً من "{{ $externalAuth.URL }}"، يتم استبدال عنوان URL المحدد في معلمة "auth-url". في هذه الحالة، لا يتم التحقق من صحة عنوان URL. وبناءً على ذلك، يمكن للمهاجم تمرير قيمة URL مثل "http://example.com/#;\nsettings" واستبدال إعداداته الخاصة في ملف التكوين.

لتنفيذ تعليمات برمجية عشوائية أثناء فحص الإعدادات باستخدام الأمر "nginx -t"، استغل الباحثون حقيقة أن nginx، بالإضافة إلى فحص بناء الجملة، يقوم بتحميل المكتبات التي تحتوي على وحدات نمطية ويفتح الملفات المذكورة في الإعدادات لتقييم مدى توفرها. ومن بين أمور أخرى، عند معالجة توجيه ssl_engine، يتم تحميل المكتبة المشتركة المحددة في هذا التوجيه. بروتوكول طبقة المقابس الآمنة (SSL)-محرك.

لتحميل مكتبتهم على خادم Kubernetes، استغل الباحثون (CVE-2025-1974) أنه عند معالجة الطلبات الكبيرة، يحفظ nginx نص الطلب في ملف مؤقت يتم حذفه على الفور، ولكن يبقى موصوف الملف المفتوح لهذا الملف في نظام الملفات "/proc". بهذه الطريقة، من الممكن إرسال طلبات لحفظ ملف مؤقت وبدء فحص التكوين في نفس الوقت حيث تحدد التعليمات "ssl_engine" مسارًا إلى الوصف في نظام الملفات "/proc".

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

للتحقق مما إذا كان يتم استخدام ingress-nginx المعرض للخطر، يمكنك تشغيل الأمر: kubectl get pods --all-namespaces --selector app.kubernetes.io/name=ingress-nginx

المصدر: opennet.ru

شراء استضافة موثوقة للمواقع مع حماية DDoS وخوادم VPS VDS 🔥 اشترِ استضافة مواقع ويب موثوقة مع حماية من هجمات DDoS، وخوادم VPS وVDS | ProHoster