← Înapoi la listă

Vulnerabilitatea Nginx ascunsă timp de 18 ani, CVE-2026-42945: explicație completă – principiu, PoC și remediere

itadol5j

Nginx CVE-2026-42945

🚨 Vulnerabilitatea critică Nginx ascunsă 18 ani, CVE-2026-42945: principiu, PoC și remediere

Pe 13 mai 2026, firma de cercetare în securitatedepthfirsta dezvăluit, împreună cu F5, o vulnerabilitate gravă din istoria NGINX –CVE-2026-42945:

  • scor CVSS v4.0 de 9.2: o vulnerabilitate de severitate înaltă
  • depășire de buffer în heap: poate duce la executare de cod la distanță (RCE)
  • ascunsă timp de 18 ani: introdusă în baza de cod în 2008
  • 9,75 milioane de site-uri afectate la nivel global: peste 2,54 milioane de site-uri din China afectate
  • PoC publicat: Qianxin a reușit să reproducă vulnerabilitatea

Esteo vulnerabilitate istorică a modulului de bază NGINX: atacatorul poate prelua controlul serverului de la distanță trimițând o singură cerere HTTP special construită.

🔍 Prezentare generală a vulnerabilității

Informații de bază

Proprietate Detalii
Identificator vulnerabilitate CVE-2026-42945
Scor CVSS v4.0: 9.2 | v3.1: 8.1
Tip vulnerabilitate Depășire de buffer în heap (Heap-based Buffer Overflow)
Tip de amenințare Executare de cod la distanță (RCE), refuz de serviciu (DoS)
Condiții de exploatare Fără autentificare; este suficientă construirea unei cereri HTTP
Componentă afectată ngx_http_rewrite_module (modul integrat din nucleul NGINX)
Organizația care a descoperit depthfirst (descoperită de sistemul automatizat în 6 ore)

Raza de impact

  • 9,75 milioane de site-uri la nivel globalafectate
  • 2,54 milioane de site-uri din Chinaafectate
  • NGINX deservește aproximativ 1/3 dintre site-urile lumii, impact extrem de larg
  • Codul a fost introdus în2008și a rămas ascuns18 ani

⚠️ Condiții de declanșare

Toate cele trei condiții trebuie îndeplinite simultan

Declanșarea vulnerabilității necesităo configurație care îndeplinește o combinație specifică de condiții:

Condiție Descriere Exemplu
1. Capturi PCRE fără nume directiva rewrite folosește grupuri de captură fără nume $1, $2, $3…
2. Șirul de înlocuire conține semn de întrebare șirul de înlocuire conține caracterul ? /profile.php?id=$1&tab=$2
3. Urmat de rewrite/if/set după directiva rewrite urmează imediat alte directive rewrite … last; if (…) { … }

Exemplu vulnerabil

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

Această configurație îndeplinește simultan toate cele trei condiții:capturi fără nume $1/$2,șir de înlocuire cu ?,urmată de directiva if.

🔬 Principiul vulnerabilității

Inconsecvență de stare în procesarea în două etape

Motorul de script NGINXfolosește o procesare în două etape:

  • Prima etapă: calculează dimensiunea bufferului necesar
  • A doua etapă: copiază datele în buffer

Nucleul vulnerabilității constă într-ogestionare greșită a indicatorului is_args:

Etapa Stare is_args Logica de procesare Rezultat
Etapă de calcul al lungimii is_args = 0 returnează lungimea originală a capturilor dimensiunea bufferului este subestimată
Etapă de copiere a datelor is_args = 1 se apelează ngx_escape_uri, fiecare octet extinzându-se la 3 octeți depășire de buffer în heap

Fluxul concret

  1. Directiva rewriteconține capturi fără nume $1/$2
  2. Șirul de înlocuireconține ?, ceea ce declanșează is_args = 1
  3. Etapă de calcul al lungimii: folosește un sub-motor proaspăt inițializat, is_args = 0
  4. returnează lungimea originală: se alocă un buffer heap prea mic
  5. Etapă de copiere a datelor: folosește motorul principal, is_args = 1
  6. se apelează ngx_escape_uri: extinde octeții și depășește bufferul
  7. datele URI controlate de atacatorsunt scrise în zona de depășire

Modalitate de exploatare

Heap Feng Shui între cereri:

  • Corpul cererii POSTspray de memorie heap (deoarece URI-ul nu poate conține octeți nul)
  • Datele de depășirecorup pointerul cleanup al structurii ngx_pool_t adiacente
  • se falsifică ngx_pool_cleanup_s, îndreptat către system()
  • La distrugerea pool-uluise declanșează apelul system()
  • realizându-se RCE

Impactul ASLR

  • ASLR activat: provoacă doar prăbușirea procesului Worker (DoS)
  • ASLR dezactivat: se poate obține executare de cod la distanță (RCE)

📊 Versiuni afectate

NGINX Open Source

Interval de versiuni Versiune de remediere
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

Interval de versiuni Versiune de remediere
R32 – R36 R36 P4, R35 P2, R32 P6

Alte componente afectate

  • 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

🔥 Stadiul PoC

PoC publicat

  • Depozit GitHub:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • Qianxin a reprodus vulnerabilitatea: cercetătorii în securitate ai centrului de informații despre amenințări au reușit să o reproducă
  • Detaliile tehnice au fost făcute publice: depthfirst a publicat o analiză tehnică
  • Exploatare în sălbăticie: nu a fost depistată deocamdată

Mod de utilizare PoC

# 构建容器
./setup.sh

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

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

✅ Soluții de remediere

Metoda 1: actualizarea versiunii

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

# 升级后重启 NGINX
nginx -s reload

Metoda 2: modificarea configurației (măsuri de atenuare)

Se înlocuiescgrupurile de captură fără numecugrupuri de captură cu nume:

# 易受攻击配置(未命名捕获)
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;

Grupurile de captură cu numenu declanșează vulnerabilitatea.

Metoda 3: verificarea configurației

Verificați dacă există configurații vulnerabile:

# 搜索易受攻击的 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/

🔍 Procesul de descoperire

Descoperire de către sistemul automatizat

depthfirst – sistemul de analiză a securității:

  • În 6 oreau fost identificate 5 probleme
  • 4 au fost confirmate de NGINX
  • CVE-2026-42945este cea mai gravă vulnerabilitate
  • Poate fi trasată până în 2008, prezentă în aproape toate versiunile standard de compilare

Alte vulnerabilități conexe

  • CVE-2026-42946: problemă de corupere a memoriei
  • CVE-2026-40701: problemă de corupere a memoriei
  • CVE-2026-42934: problemă de corupere a memoriei

📝 Rezumat

CVE-2026-42945este o vulnerabilitate gravă din istoria NGINX:

  • Ascunsă 18 ani: introdusă în baza de cod în 2008
  • CVSS 9.2: depășire de buffer în heap, poate duce la RCE
  • Condiții de declanșare: rewrite cu capturi fără nume + șir de înlocuire cu ? + urmată de alte directive
  • Raza de impact: 9,75 milioane de site-uri la nivel global, 2,54 milioane în China
  • PoC publicat: depozit GitHub + reprodus de Qianxin
  • Remediere: actualizarea versiunii sau utilizarea grupurilor de captură cu nume

O vulnerabilitate ascunsă 18 ani a ieșit la iveală; se recomandă actualizarea sau modificarea configurației cât mai curând.

Anunțul oficial:https://my.f5.com/manage/s/article/K000161019

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

Analiza tehnică:https://depthfirst.com/research/nginx-rift