← Tillbaka till listan

Nginx-sårbarheten CVE-2026-42945 — 18 år i dvala: princip, PoC och åtgärder

itadol5j

Nginx CVE-2026-42945

🚨 Allvarlig Nginx-sårbarhet som legat i dvala i 18 år: CVE-2026-42945 — princip, PoC och åtgärder

Den 13 maj 2026 publicerade säkerhetsforskningsföretagetdepthfirsttillsammans med F5 en av de allvarligaste sårbarheterna i NGINX:s historia —CVE-2026-42945:

  • CVSS v4.0-poäng 9,2: klassas som en allvarlig sårbarhet
  • Heap-baserad buffertöverskrivning: kan leda till fjärrkodexekvering (RCE)
  • Legit i dvala i 18 år: koden skrevs in i kodbasen 2008
  • Påverkar 9,75 miljoner webbplatser globalt: över 2,54 miljoner webbplatser i Kina är drabbade
  • PoC är offentliggjord: Qi An Xin har framgångsrikt återproducerat den

Det handlar omen historisk sårbarhet i NGINX kärnmodul — en angripare behöver bara skicka en specialbyggd HTTP-förfrågan för att fjärröverta en server.

🔍 Översikt av sårbarheten

Grundläggande information

Egenskap Detaljer
Sårbarhets-ID CVE-2026-42945
CVSS-poäng v4.0: 9.2 | v3.1: 8.1
Sårbarhetstyp Heap-baserad buffertöverskrivning (Heap-based Buffer Overflow)
Hotkategori Fjärrkodexekvering (RCE), tjänstestörning (DoS)
Utnyttjandevillkor Ingen autentisering krävs, enbart en utformad HTTP-förfrågan
Drabbad komponent ngx_http_rewrite_module (inbyggd kärnmodul i NGINX)
Upptäcktsföretag depthfirst (automatiserat system hittade den inom 6 timmar)

Påverkansomfattning

  • 9,75 miljoner webbplatser globaltdrabbade
  • 2,54 miljoner webbplatser i Kinadrabbade
  • NGINX bär cirka en tredjedel av världens webbplatser, vilket ger en enorm påverkanyta
  • Koden skrevs in2008och har legat i dvala i18 år

⚠️ Utlösande villkor

Tre villkor måste vara uppfyllda samtidigt

Sårbarheten utlöses närkonfigurationen uppfyller en specifik kombination av villkor:

Villkor Beskrivning Exempel
1. Namnlösa PCRE-fångster rewrite-direktivet använder namnlösa fångstgrupper $1, $2, $3…
2. Ersättningssträng med frågetecken Ersättningssträngen innehåller tecknet ? /profile.php?id=$1&tab=$2
3. Följt av rewrite/if/set rewrite-direktivet följs omedelbart av andra direktiv rewrite … last; if (…) { … }

Exempel på sårbar konfiguration

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

Denna konfiguration uppfyller alla tre villkoren:namnlösa fångster $1/$2, ersättningssträng med ? och följt av if-direktiv.

🔬 Sårbarhetens princip

Tillståndsfel mellan två bearbetningsfaser

NGINX:s skriptmotoranvänder två bearbetningsfaser:

  • Fas 1: beräknar den erforderliga buffertstorleken
  • Fas 2: kopierar data till bufferten

Sårbarhetens kärna ligger ifelhanteringen av is_args-flaggan:

Fas is_args-tillstånd Bearbetningslogik Resultat
Längdberäkningsfasen is_args = 0 Returnerar den ursprungliga fångstlängden Buffertstorleken underskattas
Datakopieringsfasen is_args = 1 Anropar ngx_escape_uri, varje byte expanderas till 3 byte Heap-baserad buffertöverskrivning

Detaljerat flöde

  1. rewrite-direktivetinnehåller namnlösa fångster $1/$2
  2. Ersättningssträngeninnehåller ?, vilket utlöser is_args = 1
  3. Längdberäkningsfasen: använder en nyligen initierad delmotor, is_args = 0
  4. Returnerar den ursprungliga längden: allokerar en alldeles för liten heap-buffert
  5. Datakopieringsfasen: använder huvudmotorn, is_args = 1
  6. Anropar ngx_escape_uri: expanderar byte, vilket överskrider bufferten
  7. Angriparens kontrollerbara URI-dataskrivs in i det överskridna området

Utnyttjandemetod

Heap Feng Shui över flera förfrågningar:

  • POST-förfrågans kroppanvänds för heap-spray (eftersom en URI inte kan innehålla null-byte)
  • Överskrivningsdataförstör cleanup-pekaren i intilliggande ngx_pool_t
  • Förfalskar ngx_pool_cleanup_soch låter den peka på system()
  • När poolen förstörsutlöses ett anrop till system()
  • vilket ger RCE

Påverkan av ASLR

  • ASLR aktiverat: leder bara till krascher i worker-processer (DoS)
  • ASLR avaktiverat: fjärrkodexekvering (RCE) blir möjlig

📊 Drabbade versioner

NGINX Open Source

Versionsomfång Korrigerade versioner
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

Versionsomfång Korrigerade versioner
R32 – R36 R36 P4, R35 P2, R32 P6

Andra drabbade komponenter

  • 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-status

PoC är offentliggjord

  • GitHub-arkiv:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • Qi An Xin har återproducerat den: säkerhetsforskare på hotinformationscentrat har framgångsrikt återproducerat den
  • Tekniska detaljer är offentliga: depthfirst har publicerat en teknisk analys
  • Utnyttjande i det vilda: har inte observerats ännu

Så används PoC:en

# 构建容器
./setup.sh

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

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

✅ Åtgärder

Metod 1: Uppgradera versionen

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

# 升级后重启 NGINX
nginx -s reload

Metod 2: Ändra konfigurationen (skadebegränsning)

Byt utnamnlösa fångstgruppermotnamngivna fångstgrupper:

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

Namngivna fångstgrupperutlöser inte sårbarheten.

Metod 3: Kontrollera konfigurationen

Kontrollera om det finns sårbara konfigurationer:

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

🔍 Upptäcktsprocessen

Upptäckt av automatiserat system

depthfirstssystem för säkerhetsanalys:

  • Inom 6 timmarhittades 5 problem
  • 4 bekräftades av NGINX
  • CVE-2026-42945är den allvarligaste sårbarheten
  • Kan spåras tillbaka till 2008och finns i praktiskt taget alla standardbyggen

Andra relaterade sårbarheter

  • CVE-2026-42946: minneskorruption
  • CVE-2026-40701: minneskorruption
  • CVE-2026-42934: minneskorruption

📝 Sammanfattning

CVE-2026-42945är en av de allvarligaste sårbarheterna i NGINX:s historia:

  • 18 år i dvala: koden skrevs in i kodbasen 2008
  • CVSS 9,2: heap-baserad buffertöverskrivning som kan leda till RCE
  • Utlösande villkor: rewrite-direktiv med namnlösa fångster + ersättningssträng med ? + följt av andra direktiv
  • Påverkansomfång: 9,75 miljoner webbplatser globalt, 2,54 miljoner i Kina
  • PoC offentliggjord: GitHub-arkiv + Qi An Xin har återproducerat den
  • Åtgärder: uppgradera versionen eller använd namngivna fångstgrupper

En sårbarhet som funnits i 18 år har nu sprängt — uppgradera eller ändra konfigurationen snarast.

Officiellt meddelande:https://my.f5.com/manage/s/article/K000161019

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

Teknisk analys:https://depthfirst.com/research/nginx-rift