Yapay Zeka Destekli Siber Saldırılar: Akıllı Tehditler Nasıl Tespit Edilir, Önlenir ve Savunulur?

Şimdi Oku
Site çevirileri için yapay zeka kullanıyoruz ve doğruluk için çaba göstersek de her zaman %100 kesin olmayabilir. Anlayışınız için teşekkür ederiz.

IngressNightmare: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme

tarafından OPSWAT
Bu Gönderiyi Paylaş

Mayıs 2025, bulut yerel altyapılarında yaygın olarak kullanılan Kubernetes ingress-nginx denetleyicisini etkileyen ve IngressNightmare olarak adlandırılan CVE-2025-1974 adlı kritik bir güvenlik açığının kamuya açıklanmasına işaret etti. Bu güvenlik açığı, kimliği doğrulanmamış saldırganların NGINX'e keyfi yapılandırmalar enjekte etmesine olanak tanıyarak yetkisiz RCE'ye (uzaktan kod yürütme) ve kümenin tamamen ele geçirilmesine yol açabilir.

OPSWAT Burs programının bir parçası olarak, bursiyerlerimiz bu yüksek önem derecesine sahip sorunun temel nedenini, istismar yolunu ve hafifletme stratejilerini daha iyi anlamak için derinlemesine bir teknik analiz gerçekleştirdiler.

CVE-2025-1974'e Genel Bakış 

CVE-2025-1974, 1.11.4 ve özellikle 1.12.0'a kadar olan ingress-nginx sürümlerinde tespit edilen kritik bir şablon enjeksiyonu güvenlik açığıdır. Bir Kubernetes kümesine düğüm düzeyinde erişimi olan saldırganlar, varsayılan olarak küme içindeki kritik sırlara erişim de dahil olmak üzere kapsamlı ayrıcalıklara sahip olan ingress-nginx denetleyicisi aracılığıyla RCE kullanarak rastgele kod çalıştırmak için bu kusurdan yararlanabilir.

Kubernetes Güvenlik Müdahale Komitesi bu güvenlik açığına 9.8 (kritik önem derecesi) CVSS v3.1 puanı vermiştir:

IngressNightmare için istismar edilebilirlik ve etki seçeneklerini gösteren CVE-2025-1974 için CVSS metrikleri kullanıcı arayüzü

Bu Analizdeki Temel Bileşenler

Kubernetes'e Genel Bakış

Kubernetes (K8s), konteynerli uygulamaların dağıtımını, ölçeklendirilmesini ve operasyonel yönetimini otomatikleştirmek için kullanılan açık kaynaklı bir platformdur. Kubernetes kümeleri tipik olarak hem fiziksel donanım hem de sanal makineler içerebilen ve yüksek oranda kullanılabilir, ölçeklenebilir ve yönetilebilir uygulama ortamları sağlamak için birlikte çalışan birden fazla makineden oluşur.

NGINX Giriş Denetleyicisi

NGINX giriş denetleyicisi (ingress-nginx), NGINX web sunucusunun üzerine inşa edilmiş açık kaynaklı bir giriş denetleyicisidir. Bir Kubernetes kümesi içinde çalışır ve öncelikle bir ters proxy ve yük dengeleyici olarak işlev görür. Bu denetleyici, kullanıcılar tarafından tanımlanan Ingress kaynaklarını yorumlar ve trafik akışını kümeye ve küme içine yönlendirmek için bunları eyleme geçirilebilir NGINX yapılandırmalarına dönüştürür.

Kabul İncelemesi ve Rolü

Ingress-nginx, AdmissionReview adlı bir web kancası hizmeti kullanarak Kubernetes ile entegre olur. Bu hizmet, yerel Kubernetes Ingress nesnelerini işlemek ve bunları doğrulanmış ve sözdizimsel olarak doğru NGINX yapılandırmalarına çevirmek için çok önemlidir. AdmissionReview yapılandırma doğruluğunu sağlarken, ingress-nginx denetleyicisinden bağımsız olarak çalışır ve genellikle sıkı kimlik doğrulama kontrollerinden yoksundur. Bu sıkı kimlik doğrulama eksikliği, CVE-2025-1974'ün istismar edilebilirliğine katkıda bulunan önemli bir faktördür.

Kubernetes Ingress NGINX denetleyici iş akışında AdmissionReview'i gösteren CVE-2025-1974 (IngressNightmare) diyagramı

Güvenlik Açığı İstismarı ve Teknik Analiz

İstismar Mekanizması

CVE-2025-1974'ün istismarı özünde kötü niyetli bir istekle başlar. Saldırganlar, AdmissionReview web kancasına kötü niyetli bir istek göndererek NGINX'i çalışma zamanında paylaşılan bir kütüphaneyi dinamik olarak yüklemeye zorlar. Bu mekanizmaya dayanarak, arkadaşlarımız bu istismar yolunu anlamak için hem AdmissionReview webhook'unu hem de NGINX iş akışını analiz etti.

Kötü niyetli giriş nesnesi ve NGINX aracılığıyla Kubernetes istismar yolunu gösteren CVE-2025-1974 (IngressNightmare) diyagramı

Şablon Enjeksiyonu Güvenlik Açığı

AdmissionReview web kancasında, gelen istekler işlenirken CheckIngress işlevi Kubernetes Ingress Objects'i geçerli NGINX yapılandırma dosyalarına dönüştürür. Akış aşağıdaki gibi ilerler:

CVE-2025-1974 (IngressNightmare) güvenlik açığı ile ilgili şablon ekleme mantığını gösteren Go kod parçası
  1. Her yapılandırma ayrıştırılır ve önceden tanımlanmış NGINX şablonlarına göre biçimlendirilmek üzere generateTemplate 'e aktarılır.
  2. Daha sonra, testTemplate oluşturulan yapılandırmayı temel NGINX ikili dosyasına karşı doğrular.

Tüm NGINX yapılandırmaları, ingress-nginx kaynak kodu içindeki nginx.tmpl dosyasında bulunan önceden tanımlanmış şablonlara dayanmaktadır:

CVE-2025-1974 (IngressNightmare) ile ilgili şablon ekleme güvenlik açığını gösteren kod parçacığı

generateTemplate işlevi içinde, yapılandırma aşağıdaki kod parçasında gösterildiği gibi işlenir:

CVE-2025-1974 (IngressNightmare) şablon enjeksiyonu ile ilgili açıklama ayrıştırma mantığını gösteren Go kod parçası

Ancak girdi doğrulama ve sanitizasyon yetersizdir. Özellikle, bir Ingress Nesnesinden gelen uid alanı doğrudan NGINX yapılandırma şablonuna eklenir ve bir enjeksiyon noktası oluşturur. Bir saldırgan, uid="1234#;\n\n}\n}\n}\n injection_value" gibi hazırlanmış bir girdi sağlayarak bu durumdan yararlanabilir.

Bu kötü amaçlı girdi, NGINX şablonuna global kapsam enjeksiyonuna izin vererek saldırganların keyfi NGINX yönergelerini tetiklemesine ve potansiyel olarak RCE elde etmesine olanak tanır.

CVE-2025-1974 (IngressNightmare) güvenlik açığı ile ilgili şablon enjeksiyonunu gösteren Nginx yapılandırma kodu

Şablon Enjeksiyonundan Uzak Kod Çalıştırmaya

testTemplate() Fonksiyonunun Açıklaması

NGINX yapılandırması generateTemplate fonksiyonu tarafından oluşturulduktan sonra, testTemplate fonksiyonu geçici bir yapılandırma dosyası oluşturur ve NGINX kütüphanesini nginx -c {config_file} komutuyla çalıştırır. -t. Bu, NGINX ikilisini yapılandırmayı ayrıştırmaya ve doğrulamaya zorlar.

CVE-2025-1974 (IngressNightmare) güvenlik açığı ile ilgili testTemplate() işlevi ve arayüzler için go kodu

Güvenlik açığından faydalanmak için, bir saldırganın kötü amaçlı kod çalıştırabilecek bir yönerge belirlemesi gerekir. Başlangıçta, arkadaşlarımız load_module yönergesini potansiyel olarak yararlı olarak tanımladılar, çünkü bu yönerge NGINX'in harici eklentileri yüklemesine izin veriyor. Ancak, bu yönergeye yalnızca yapılandırma ayrıştırmasının ilk aşamasında izin verilir, bu da enjeksiyon noktamızla eşleşmez.

CVE-2025-1974 (IngressNightmare) ile ilgili load_module sözdizimini ve bağlamını gösteren kod ekran görüntüsü
CVE-2025-1974 (IngressNightmare) load_module hatasıyla ilgili nginx yapılandırma testi başarısızlığını gösteren terminal çıktısı

Bu zorluğu çözmek için araştırmaya devam ettik ve "Modül, yapılandırma testi sırasında OpenSSL tarafından dinamik olarak yüklenebilir." şeklinde tanımlanan ssl_engine yönergesine ulaştık. Bu, modülleri dinamik olarak yükleyebilme özelliği nedeniyle merak uyandırdı ve daha derin bir inceleme gerektirdi.

CVE-2025-1974 (IngressNightmare) bağlamı için ssl_engine aygıt sözdizimini açıklayan kod ekran görüntüsü

ssl_engine Yönergesini Anlama

NGINX'in ssl_engine yönergesini nasıl ele aldığını daha iyi anlamak ve NGINX'in bu yönerge aracılığıyla ek modüllerin dinamik olarak yüklenmesine hangi koşullarda izin verdiğini belirlemek için NGINX kaynak kodunu inceledik.

CVE-2025-1974 (IngressNightmare) ssl_engine yönergesi ile ilgili NGINX yapılandırma ayrıştırmasını gösteren C kod parçası

Başlangıçta NGINX ilk durumunu yükler, ardından yapılandırma dosyalarını satır satır ayrıştırır. Her yönerge nginx_command_t yapısı tarafından ele alınır, ssl_engine yönergesi doğrudan ngx_openssl_commands'ı çağırır.

CVE-2025-1974 (IngressNightmare) ssl_engine yönergesi ile ilgili ngx_command_s için C yapısı tanımı
Şekil 1. ngx_command_s tanımı
CVE-2025-1974 (IngressNightmare) bağlamıyla ilgili ssl_engine yönerge dizisini gösteren kod parçası
Şekil 2 ssl_engine ngx_command_t yapısı

ngx_openssl_commands işlevini analiz eden arkadaşlarımız, bu işlevin OpenSSL desteğine, özellikle de donanım hızlandırmalı SSL modülleri için kullanılan ENGINE_by_id işlevine dayandığını keşfetmişlerdir.

CVE-2025-1974 (IngressNightmare) analiziyle ilgili ssl_engine yönerge mantığını gösteren C kod parçası

ENGINE_by_id fonksiyonunu analiz ederken, paylaşılan kütüphanelerin dinamik olarak yüklenmesini sağladığını tespit ettik. Dahası, eğer kütüphane __attribute__ ((constructor)) uzantısı ile derlenmişse, ilgili fonksiyon yüklendikten hemen sonra çalıştırılabilir. Bu, bir saldırganın ssl_engine yönergesinden yararlanarak ana bilgisayara rastgele paylaşılan kütüphaneler yükleyebileceğini ve potansiyel olarak RCE'ye yol açabileceğini gösterir.

Paylaşılan Kütüphaneleri Hedefleme ve Saldırı Stratejisi

Kodun yürütülmesini güvenilir bir şekilde kolaylaştırmak için, bir sonraki adım paylaşılan bir kütüphane tanımlamayı içerir. Harici kütüphanelere güvenmek yerine, NGINX'in kendi davranışından daha uygulanabilir ve kontrollü bir yaklaşım ortaya çıkar: istemci gövde tampon mekanizması. Bu özellik, NGINX'in gelen büyük istekleri geçici dosyalara aktarmasını sağlayarak öngörülebilir dosya işleme davranışına dayalı istismar fırsatları sunar.

CVE-2025-1974 (IngressNightmare) saldırısıyla ilgili geçici yolları ve tampon ayarlarını gösteren nginx.conf kodu

Varsayılan olarak, gelen bir istek 8KB'yi aştığında, NGINX istek gövdesini /tmp/nginx/client-body adresinde bulunan geçici bir dosyaya cfg-{random_value} biçiminde bir dosya adı kullanarak yazar. Bu geçici dosyalar, alınan bir iletinin başarılı parçaları arasında 60 saniyeye kadar tutulur.

NGINX paylaşılan kütüphanelerini ve geçici dosyaları hedef alan saldırı akışını gösteren CVE-2025-1974 (IngressNightmare) diyagramı

Kısmi bir istek gövdesini geçici bir dosyaya yazdıktan sonra, NGINX tüm gövde alınana kadar silmeyi erteler. İstek tamamlanmamış olarak kalırsa ve 60 saniyeye kadar veri alınmazsa, dosya sonunda temizlenir. Bununla birlikte, bir saldırgan son veri yığınını kasıtlı olarak saklayarak geçici dosyayı kullanımda tutabilir ve istismar edilebilir hale getirebilir.

NGINX paylaşılan kütüphanelerini ve dosya silmeyi hedefleyen CVE-2025-1974 (IngressNightmare) saldırı akışını gösteren diyagram

Yüklenen dosya içeriği kontrol edilebilmesine rağmen, dosya adının rastgele olması nedeniyle dosya sisteminde yerini bulmak zordur. Depolama yolu client_body_temp_path kullanılarak yapılandırılabilir, ancak dosya adı çalışma zamanında rastgele oluşturulur ve tahmin edilemez hale gelir. Bu rastgelelik, kaba kuvvet yoluyla bile hedeflenen erişimi önemli ölçüde engeller. Ekip bunun üstesinden gelmek için Linux işletim sisteminin doğasında bulunan davranışlardan yararlandı. Aşağıdaki örneği ele alalım:

Dosya yazma ve sonsuz döngü mantığı ile CVE-2025-1974'ten (IngressNightmare) yararlanan Python kodu

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) saldırı stratejisiyle ilgili işlem ve dosya tanımlayıcı ayrıntılarını gösteren terminal çıktısı

İstismar Simülasyonu

Yukarıdaki analize dayanarak, Ingress-NGINX bölmesi içinde RCE için pratik bir istismar yaklaşımı şudur:

  1. Dosya sisteminde geçici olarak depolamak için NGINX'in istemci gövdesi arabellek mekanizmasını kullanarak kötü amaçlı bir paylaşılan kitaplık yükleyin.
  2. NGINX'i savunmasız yönergeler aracılığıyla önceden yüklenmiş paylaşılan kitaplığı yüklemeye zorlayan bir kaba kuvvet girişimi başlatmak için şablon enjeksiyonu kullanın.
Ingress-NGINX üzerinden NGINX'e giden saldırı yolunu gösteren VE-2025-1974 (IngressNightmare) istismar akış diyagramı

Paylaşılan Kitaplığı İçeren Yükün Hazırlanması

Yükleme sırasında kodun yürütülmesini sağlamak için, kötü amaçlı paylaşılan kütüphanede kurucu uzantılı bir giriş noktası işlevi tanımlanmıştır. Bu işlev NGINX tarafından yüklendikten sonra çalıştırılır ve uzak bir ana bilgisayara ters kabuk bağlantısı kurmak için tasarlanmıştır. 

Paylaşımlı kütüphane ve ters kabuk komutu ile CVE-2025-1974 (IngressNightmare) yük işçiliği için C kodu

Derlemeden sonra, ortaya çıkan paylaşılan kütüphanenin boyutu 8KB'yi rahatça aştı ve ek dolgu gerektirmeden NGINX tarafından arabelleğe alınmasına izin verdi.

CVE-2025-1974 (IngressNightmare) yükü oluşturma için danger.so paylaşılan kütüphanesini gösteren terminal listesi

Arkadaşlarımız daha sonra bir boyut uyuşmazlığı yaratmak için şişirilmiş bir İçerik-Uzunluğu değeri (örneğin 1MB) içeren bir istek hazırladılar. Bu, NGINX'in tüm gövdeyi hemen işlemek yerine arabelleğe almasına neden olarak paylaşılan nesnenin öngörülebilir bir konuma yazılmasını sağladı.

CVE-2025-1974 (IngressNightmare) açığı ile ilgili olarak paylaşılan kütüphane ile bir yük oluşturmak için Go kodu

Enjeksiyon Yoluyla Paylaşılan Kitaplığı Tetikleme

Paylaşılan kütüphaneyi yerleştirdikten sonra, savunmasız uid alanını kullanarak NGINX yapılandırmasına kötü amaçlı bir yönerge enjekte ettik. Bu yönerge, tamponlanmış dosya yolunu işaret eden ssl_engine 'i içeriyordu:

CVE-2025-1974 (IngressNightmare) istismarı için enjeksiyonlu Kubernetes Ingress nesnesini gösteren JSON kodu

Başarılı bir RCE, ssl_engine yönergesinin tamponlanmış dosyanın doğru yoluna referans vermesini gerektirir. Bu, tamponlanmış paylaşılan nesneye işaret eden geçerli sembolik bağlantıyı tanımlamak için işlem kimliklerinin ve dosya tanımlayıcılarının olası kombinasyonlarını sistematik olarak yineleyen otomatik bir kaba kuvvet betiği aracılığıyla elde edilebilir.

Paylaşılan kütüphane enjeksiyonu ve web kancası doğrulaması yoluyla CVE-2025-1974'ten (IngressNightmare) yararlanan Go kodu

Aşağıda, istismarı tetikleyen oluşturulan NGINX şablonunun bir örneği yer almaktadır.

ssl_engine ve mirror yönergeleri aracılığıyla CVE-2025-1974 (IngressNightmare) enjeksiyonunu gösteren Nginx yapılandırma kodu

Başarılı bir istismarın ardından saldırgan, varsayılan olarak hassas Kubernetes küme sırlarına erişimi olan ingress-nginx pod bağlamı altında kabuk erişimi elde edebilir.

CVE-2025-1974 (IngressNightmare) ile ilgili kubectl get secrets -A komutunu gösteren terminal çıktısı

Etki Azaltma ve İyileştirme

CVE-2025-1974 ile ilişkili riskleri etkili bir şekilde azaltmak için kuruluşların açık kaynak bileşenleri üzerinde görünürlük ve kontrol sağlayan bir çözüme ihtiyacı vardır.

MetaDefender® platformunda temel bir teknoloji olan OPSWAT SBOM, kullanılan tüm yazılım bileşenlerinin, kütüphanelerin, Docker konteynerlerinin ve bağımlılıkların bir envanterini sağlayarak bu ihtiyacı karşılar. Kurumların bileşenlerini proaktif olarak izlemelerine, güvence altına almalarına ve güncellemelerine olanak tanır.

nginx-ingress-controller'daki CVE-2025-1974 (IngressNightmare) kritik güvenlik açığını gösteren UI ekran görüntüsü

Yukarıdaki örnekte, MetaDefender Core™'daki SBOM teknolojisi, CVE-2025-1974 güvenlik açığını içeren nginx-ingress-controller paketini taradı. Sistem, sorunu otomatik olarak Kritik olarak işaretledi ve mevcut düzeltilmiş sürümler hakkında rehberlik sağlayarak ekiplerin güvenlik açığı istismar edilmeden önce hızlı bir şekilde önceliklendirmesini ve yamalamasını sağladı.

OPSWAT SBOM, MetaDefender Core ve MetaDefender Software Supply Chain™'de mevcuttur ve güvenlik ekiplerinin güvenlik açıklarını daha hızlı tespit etmesini ve harekete geçmesini sağlar. OPSWAT SBOM ile güvenlik ekipleri şunları yapabilir

  • Savunmasız bileşenleri hızla bulun - Derileştirme saldırılarından etkilenen açık kaynaklı bileşenleri hemen belirleyin. Bu, savunmasız kütüphanelerin yamalanması veya değiştirilmesi konusunda hızlı hareket edilmesini sağlar. 
  • Proaktif yama ve güncellemeler sağ layın - Derileştirme güvenlik açıklarının önüne geçmek için OPSWAT SBOM aracılığıyla açık kaynaklı bileşenleri sürekli izleyin. OPSWAT SBOM eski veya güvensiz bileşenleri tespit ederek zamanında güncelleme yapılmasını ve saldırılara daha az maruz kalınmasını sağlayabilir. 
  • Uyumluluğu ve raporlamayı sürdürün - OPSWAT SBOM, düzenleyici çerçevelerin yazılım tedarik zincirlerinde şeffaflığı giderek daha fazla zorunlu kılması nedeniyle kuruluşların uyumluluk gereksinimlerini karşılamasına yardımcı olur.
Etiketler:

OPSWAT ile Güncel Kalın!

En son şirket güncellemelerini almak için bugün kaydolun, hikayeler, etkinlik bilgileri ve daha fazlası.