Benny Czarny’nin “Cybersecurity Upside Down” adlı kitabı hakkında daha fazla bilgi edinin

Daha Fazla Bilgi
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

Yazan OPSWAT

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.

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

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: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme

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.

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

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.

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

Şablon Enjeksiyonu Güvenlik Açığı

AdmissionReview webhook’unda, gelen istekler işlenirken CheckIngress işlevi, Kubernetes Ingress nesnelerini geçerli NGINX yapılandırma dosyalarına dönüştürür. İş akışı şu şekilde ilerler:

IngressNightmare: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme
  1. Her yapılandırma ayrıştırılır ve önceden tanımlanmış NGINX şablonlarına göre biçimlendirilmek üzere generateTemplate işlevine aktarılır.
  2. Ardından, testTemplate oluşturulan yapılandırmayı altta yatan NGINX ikili dosyasıyla karşılaştırarak 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:

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

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

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

Ancak, girdi doğrulama ve temizleme işlemleri yetersizdir. Özellikle, bir Ingress Nesnesinden alınan uid alanı doğrudan NGINX yapılandırma şablonuna eklenmekte ve bu da bir enjeksiyon noktası oluşturmaktadır. Bir saldırgan, uid="1234#;\n\n}\n}\n}\n injection_value" gibi özel olarak hazırlanmış bir girdi sağlayarak bu durumu istismar edebilir.

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.

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

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

testTemplate() Fonksiyonunun Açıklaması

generateTemplate işlevi tarafından NGINX yapılandırması oluşturulduktan sonra, testTemplate işlevi geçici bir yapılandırma dosyası oluşturur ve nginx -c {config_file} -t komutuyla NGINX kütüphanesini çalıştırır. Bu işlem, NGINX ikili dosyasının yapılandırmayı ayrıştırmasını ve doğrulamasını sağlar.

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

Bu güvenlik açığından yararlanmak için, bir saldırganın kötü amaçlı kod çalıştırabilen bir yönergeyi belirlemesi gerekir. Başlangıçta, ekip arkadaşlarımız load_module yönergesini potansiyel olarak kullanışlı buldular; çünkü bu yönerge, NGINX’in harici eklentileri yüklemesine olanak tanır. Ancak bu yönerge, yapılandırma çözümlemesinin yalnızca ilk aşamasında izin verilmektedir ve bu da bizim enjeksiyon noktamızla uyuşmamaktadır.

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

Bu sorunu çözmek için araştırmalarımıza devam ettik; bu da, “Modül, yapılandırma testleri sırasında OpenSSL tarafından dinamik olarak yüklenebilir” şeklinde tanımlanan ssl_engine yönergesine yol açtı. Modülleri dinamik olarak yükleyebilme özelliği nedeniyle bu durum merak uyandırdı ve daha derinlemesine bir inceleme gerektirdi.

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

ssl_engine Yönergesini Anlama

NGINX’in ssl_engine yönergesini nasıl işlediğini 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 amacıyla NGINX kaynak kodunu inceledik.

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

NGINX, başlatıldığında başlangıç durumunu yükler, ardından yapılandırma dosyalarını satır satır işler. Her bir yönerge, nginx_command_tstructure tarafından işlenir; ssl_engine yönergesi ise doğrudan ngx_openssl_commands’ı çağırır.

IngressNightmare: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme
Şekil 1. ngx_command_s tanımı
IngressNightmare: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme
Şekil 2 ssl_engine ngx_command_t yapısı

ngx_openssl_commands işlevini inceledikten sonra, ekip arkadaşlarımız bu işlevin OpenSSL desteğine dayandığını, özellikle de donanım hızlandırmalı SSL modülleri için kullanılan ENGINE_by_id işlevine bağlı olduğunu keşfettiler.

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

ENGINE_by_id işlevini incelerken, bu işlevin paylaşımlı kütüphanelerin dinamik olarak yüklenmesini sağladığını tespit ettik. Ayrıca, kütüphane __attribute__((constructor)) uzantısıyla derlenmişse, ilgili işlev yüklendiği anda hemen çalıştırılabilir. Bu durum, bir saldırganın ssl_engine yönergesini istismar ederek ana bilgisayara rastgele paylaşımlı kütüphaneler yükleyebileceğini ve bunun da potansiyel olarak uzaktan komut yürütme (RCE) sorununa yol açabileceğini göstermektedir.

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.

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

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.

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

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.

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

Yüklenen dosyanın içeriği kontrol edilebilse de, dosya adı rastgele oluşturulduğu için dosyanın dosya sistemindeki konumunu belirlemek zordur. Depolama yolu client_body_temp_path kullanılarak yapılandırılabilir, ancak dosya adı çalışma zamanında rastgele oluşturulur ve bu da onu öngörülemez kılar. Bu rastgelelik, kaba kuvvet yöntemiyle bile hedefe yönelik erişimi önemli ölçüde engeller. Bu sorunu aşmak için ekip, Linux işletim sistemine özgü davranışlardan yararlandı. Aşağıdaki örneği ele alalım:

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

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).

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

İ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.
IngressNightmare: CVE-2025-1974 Uzaktan Kod Yürütme Güvenlik Açığı ve Düzeltme

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.

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

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.

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

Ardından, ekip üyelerimiz boyut uyuşmazlığı yaratmak için Content-Length değeri abartılmış (örneğin, 1 MB) bir istek oluşturdular. Bu durum, NGINX’in gövdeyi hemen işlemek yerine tamamını arabelleğe almasına neden oldu ve böylece paylaşılan nesnenin öngörülebilir bir konuma yazılmasını sağladı.

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

Enjeksiyon Yoluyla Paylaşılan Kitaplığı Tetikleme

Paylaşımlı kütüphane hazır hale geldikten sonra, güvenlik açığı bulunan uidfield'ı kullanarak NGINX yapılandırmasına kötü amaçlı bir yönerge ekledik. Bu yönerge, tamponlanmış dosya yoluna işaret eden ssl_engine'i içeriyordu:

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

RCE'nin başarılı olması için, `ssl_engine` yönergesinin tamponlanmış dosyaya giden doğru yolu belirtmesi gerekir. Bu, tamponlanmış paylaşımlı nesneye işaret eden geçerli sembolik bağlantıyı tespit etmek amacıyla işlem kimlikleri ve dosya tanımlayıcılarının olası kombinasyonlarını sistematik olarak tarayan otomatik bir kaba kuvvet komut dosyası aracılığıyla gerçekleştirilebilir.

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

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

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

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.

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

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.

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

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!

Şirketle ilgili en son gelişmeleri, haberleri, etkinlik bilgilerini ve daha fazlasını almak için bugün kaydolun.