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

🚨 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ış
- rewrite yönergesiisimsiz yakalamalar $1/$2 içeriyor
- Değiştirme dizesi? içeriyor, is_args = 1'i tetikliyor
- Uzunluk hesaplama aşaması: yeni başlatılan alt motor kullanılır, is_args = 0
- Orijinal uzunluk döndürülür: çok küçük bir yığın tamponu ayrılır
- Veri kopyalama aşaması: ana motor kullanılır, is_args = 1
- ngx_escape_uri çağrılır: baytlar genişler, tampon taşar
- 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