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

🚨 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
- rewrite-direktivetinnehåller namnlösa fångster $1/$2
- Ersättningssträngeninnehåller ?, vilket utlöser is_args = 1
- Längdberäkningsfasen: använder en nyligen initierad delmotor, is_args = 0
- Returnerar den ursprungliga längden: allokerar en alldeles för liten heap-buffert
- Datakopieringsfasen: använder huvudmotorn, is_args = 1
- Anropar ngx_escape_uri: expanderar byte, vilket överskrider bufferten
- 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