← Listeye dön

Nginx'in 18 Yıldır Gizli Kalan Açığı CVE-2026-42945: Çalışma Prensibi, PoC ve Düzeltmenin Tam Analizi

itadol5j

Nginx CVE-2026-42945

🚨 Nginx'in 18 Yıldır Gizli Kalan Yüksek Riskli Açığı CVE-2026-42945: Çalışma Prensibi, PoC ve Düzeltme

13 Mayıs 2026'da güvenlik araştırma kuruluşudepthfirst, F5 ile birlikte NGINX tarihinin en yüksek riskli açığını duyurdu —CVE-2026-42945:

  • CVSS v4.0 puanı 9.2: yüksek riskli açıklar kategorisinde
  • Yığın (heap) tamponu taşması: uzaktan kod yürütmeye (RCE) yol açabilir
  • 18 yıldır gizli: 2008 yılından beri kod tabanında
  • Dünyada 9,75 milyon siteyi etkiliyor: Çin'de 2,54 milyondan fazla web sitesi etkilendi
  • PoC herkese açık: QiAnXin başarıyla yeniden üretti

Bu,NGINX çekirdek modülündekitarihi bir açıktır; saldırgan yalnızca özel hazırlanmış bir HTTP isteği göndererek sunucuyu uzaktan ele geçirebilir.

🔍 Açığa Genel Bakış

Temel bilgiler

Açık özelliği Ayrıntı
Açık kimliği (CVE) CVE-2026-42945
CVSS puanı v4.0: 9.2 | v3.1: 8.1
Açık türü Yığın tabanlı tampon taşması (Heap-based Buffer Overflow)
Tehdit türü Uzaktan kod yürütme (RCE), hizmet reddi (DoS)
Sömürme koşulları Kimlik doğrulama gerekmez, yalnızca bir HTTP isteği oluşturmak yeterli
Etkilenen bileşen ngx_http_rewrite_module (NGINX çekirdek yerleşik modülü)
Keşfeden kuruluş depthfirst (otomatik sistem 6 saat içinde keşfetti)

Etki kapsamı

  • Dünyada 9,75 milyon siteetkilendi
  • Çin'de 2,54 milyon web sitesietkilendi
  • NGINX, dünyadaki web sitelerinin yaklaşık 1/3'ünü barındırıyor, etki alanı son derece geniş
  • Kod2008 yılındanberi mevcut, gizli kalış süresi18 yıl

⚠️ Tetikleme Koşulları

Üç koşul aynı anda sağlanmalı

Açığın tetiklenmesi içinyapılandırmanın belirli bir koşul kombinasyonunu karşılamasıgerekiyor:

Koşul Açıklama Örnek
1. İsimsiz PCRE yakalama rewrite yönergesi isimsiz yakalama grupları kullanıyor $1, $2, $3…
2. Değiştirme dizesinde soru işareti Değiştirme dizesi ? karakteri içeriyor /profile.php?id=$1&tab=$2
3. Ardından rewrite/if/set gelmesi rewrite yönergesinden hemen sonra başka yönergeler geliyor rewrite … last; if (…) { … }

Savunmasız örnek

# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
    set $debug_flag 1;
}

Bu yapılandırma üç koşulu da aynı anda karşılıyor:isimsiz yakalama $1/$2, değiştirme dizesi ? içeriyor, ardından if yönergesi geliyor.

🔬 Açığın Çalışma Prensibi

İki aşamalı işlemede durum tutarsızlığı

NGINX betik motoruiki aşamalı işleme kullanıyor:

  • Birinci aşama: gereken tampon boyutunu hesaplar
  • İkinci aşama: verileri tampona kopyalar

Açağın özüis_args bayrağının hatalı yönetimindeyatıyor:

Aşama is_args durumu İşleme mantığı Sonuç
Uzunluk hesaplama aşaması is_args = 0 Orijinal yakalama uzunluğunu döndürür Tampon boyutu küçük tahmin edilir
Veri kopyalama aşaması is_args = 1 ngx_escape_uri çağrılır; her bayt 3 bayta genişler Yığın tamponu taşması

Adım adım akış

  1. rewrite yönergesiisimsiz yakalamalar $1/$2 içeriyor
  2. Değiştirme dizesi? içeriyor, is_args = 1'i tetikliyor
  3. Uzunluk hesaplama aşaması: yeni başlatılan alt motor kullanılır, is_args = 0
  4. Orijinal uzunluk döndürülür: çok küçük bir yığın tamponu ayrılır
  5. Veri kopyalama aşaması: ana motor kullanılır, is_args = 1
  6. ngx_escape_uri çağrılır: baytlar genişler, tampon taşar
  7. Saldırgan kontrollü URI verisitaşma bölgesine yazılır

Sömürme yöntemi

İstekler arası Heap Feng Shui:

  • POST istek gövdeleriyığın belleğini püskürtür (URI null bayt içeremediği için)
  • Taşan verikomşu ngx_pool_t'nin cleanup işaretçisini bozar
  • Sahte ngx_pool_cleanup_soluşturulur, system()'ı işaret eder
  • Havuz yok edilirkensystem() çağrısı tetiklenir
  • RCE gerçekleştirilir

ASLR etkisi

  • ASLR etkin: yalnızca Worker süreçlerinin çökmesine yol açar (DoS)
  • ASLR devre dışı: uzaktan kod yürütme (RCE) mümkündür

📊 Etkilenen Sürümler

NGINX Open Source

Sürüm aralığı Düzeltilmiş sürüm
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

Sürüm aralığı Düzeltilmiş sürüm
R32 – R36 R36 P4, R35 P2, R32 P6

Diğer etkilenen bileşenler

  • NGINX Instance Manager: 2.16.0 – 2.21.1
  • NGINX App Protect WAF: 4.9.0 – 5.8.0
  • NGINX Ingress Controller: 3.5.0 – 5.4.1
  • NGINX Gateway Fabric: 1.3.0 – 2.5.1
  • F5 DoS for NGINX: 4.8.0

🔥 PoC Durumu

PoC herkese açık

  • GitHub deposu:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • QiAnXin yeniden üretti: Tehdit İstihbarat Merkezi güvenlik araştırmacıları başarıyla yeniden üretti
  • Teknik ayrıntılar yayımlandı: depthfirst teknik analiz yayımladı
  • Doğada istismar: henüz tespit edilmedi

PoC kullanımı

# 构建容器
./setup.sh

# 启动易受攻击的 NGINX 服务器
docker compose -f env/docker-compose.yml up

# 执行 PoC 获取 Shell
python3 poc.py --shell

✅ Düzeltme Çözümleri

Yöntem 1: Sürüm yükseltme

# 升级到修复版本
NGINX Open Source >= 1.31.0
NGINX Open Source >= 1.30.1
NGINX Plus >= R32 P6
NGINX Plus >= R36 P4

# 升级后重启 NGINX
nginx -s reload

Yöntem 2: Yapılandırma değişikliği (azaltma önlemi)

Yapılandırmadakiisimsiz yakalama gruplarınıadlandırılmış yakalama gruplarıyladeğiştirin:

# 易受攻击配置(未命名捕获)
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;

# 修复后配置(命名捕获)
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;

Adlandırılmış yakalama gruplarıaçığı tetiklemez.

Yöntem 3: Yapılandırmayı kontrol etme

Savunmasız yapılandırma olup olmadığını kontrol edin:

# 搜索易受攻击的 rewrite 指令
grep -E "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/nginx.conf
grep -rE "rewrite.*\$[0-9]+.*\?.*(rewrite|if|set)" /etc/nginx/conf.d/

🔍 Keşif Süreci

Otomatik sistem keşfi

depthfirstgüvenlik analiz sistemi:

  • 6 saat içinde5 sorun buldu
  • 4'ü NGINX tarafından doğrulandı
  • CVE-2026-42945en ciddi açıktır
  • 2008 yılına kadar izlenebiliyor, neredeyse tüm standart derlemelerde bulunuyor

Diğer ilgili açıklar

  • CVE-2026-42946: bellek bozulma sorunu
  • CVE-2026-40701: bellek bozulma sorunu
  • CVE-2026-42934: bellek bozulma sorunu

📝 Özet

CVE-2026-42945NGINX tarihinin en yüksek riskli açığıdır:

  • 18 yıldır gizli: 2008'de kod tabanına yazıldı
  • CVSS 9.2: yığın tamponu taşması, RCE'ye yol açabilir
  • Tetikleme koşulları: rewrite yönergesinin isimsiz yakalama kullanması + değiştirme dizesinin ? içermesi + ardından başka yönergeler gelmesi
  • Etki kapsamı: dünyada 9,75 milyon site, Çin'de 2,54 milyon web sitesi
  • PoC herkese açık: GitHub deposu + QiAnXin yeniden üretti
  • Düzeltme: sürümü yükseltin veya adlandırılmış yakalama grupları kullanın

18 yıldır gizli kalan açık patlak verdi; mümkün olan en kısa sürede yükseltmenizi veya yapılandırmanızı değiştirmenizi öneririz.

Resmî duyuru:https://my.f5.com/manage/s/article/K000161019

PoC deposu:https://github.com/DepthFirstDisclosures/Nginx-Rift

Teknik analiz:https://depthfirst.com/research/nginx-rift