Nginxs 18-årige lacuna CVE-2026-42945: Prinsipp PoC rehabilitering komplett

🚨 Nginx Infiltration 18 år høy risiko Gap CVE-2026-42945: Rationale, PoC og rehabiliteringsprogram
Institutt for sikkerhetsforskning, 13. mai 2026DybdeførsteUnited F5.CVE-2026-42945:)
- CVSS v4.0 Vurdering 9.2: Høy-risiko sløyfehull
- Bufferspill: kan føre til ekstern kode utføres (RCE)
- Hider 18 årSkrive kode siden 2008 Bibliotek
- 975 millioner steder som påvirker verdenKina mer enn 2.54 millioner nettsteder berørt
- PoC gjort offentligChiansin har lykkes å gjenopprette
Dette er...NGINX Core ModuleEt historisk sløyfehull der angriperne bare sender en spesielt utformet HTTP-forespørsel om å ta over serveren eksternt.
Sammendrag av hull
Grunnleggende informasjon
| Hole egenskaper | Detaljer |
|---|---|
| Hullnummer | CVE-2026-42945 |
| CVSS vurdering | v4.0: 9.2 V3.1 |
| Hull type | Stack-basert buffer Overstrøm |
| Type trussel | Ekstern kodeutførelse (RCE), nektelse av tjenester (DoS) |
| Betingelser for bruk | Trenger ikke autentisering, bare bygge HTTP-forespørsler |
| Effektkomponent | ngx http rewrite modul (NGINX kjerne innebygd modul) |
| Discovery Agency | Dybde først. |
Omfanget av virkningen
- 97,5 millioner nettsteder globaltEffekt
- Kina 2.54 millioner nettstederEffekt
- NGINX hosts ca. 1/3 av den globale nettsidenEffekten er enorm.
- Kode fraÅr 2008Skriving, lurking18 år
⚠️ Trigger tilstand
Tre betingelser må oppfylles samtidig.
Gap utløser nødvendigKonfigurere grupper som oppfyller bestemte betingelser:)
| Betingelser | Annotasjoner | Eksempel: |
|---|---|---|
| PCRE-opptak uten navn | Omskriv kommandoopptak med navngitt gruppe | En, to, tre... |
| 2. Bytt ut strengen med spørsmålstegn | Bytt ut streng inneholder? tegn | /profile.php?id=$1&tab=2 |
| 3. Etterfølgende/om/sett | Følg andre kommandoer etter instruksjoner | {...} |
Eksempel på sårbarhet
# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
set $debug_flag 1;
}
Denne konfigurasjonen oppfyller tre betingelser:Opptak uten navn $ 1/$2Jeg vet ikke.Erstatningsstrenginnhold?Jeg vet ikke.Motor hvis kommandoJeg vet ikke.
Det er en god ide.
Ulemper mellom to faser
NGINX skriptmotorBruk av to faser:
- Fase I: Beregn nødvendig bufferstørrelse
- Fase II: Kopier data til buffer
Kjernen i hullet erer args tag management feil:)
| Fase | er args status | Prosesslogikk | Resultat |
|---|---|---|---|
| Lengdeberegningsfase | =0 | Return original fangstlengde | Undervurdering av bufferstørrelse |
| Datareproduksjonsfase | =1 | Ring ngx unnslippe uri med 3 byte per byte | Bufferspill |
Spesifikke prosesser
- Omskriv kommandoInkludere navngitt fange $ 1/$2
- Erstatt strengInkludert? Trigger er args = 1
- Lengdeberegningsfase: ny initiert undermotor, er args = 0
- Returnerer opprinnelig lengde: Små hauger av buffersoner fordelt
- Datareproduksjonsfase: bruk hovedmotor, er args = 1
- Ring ngx escape uri: utvidede bytes, sløsing ut av buffersonen
- Angriper kontrollerbare URI-dataSkrive Spill Area
Utnyttelse
Cross Feng Shui:)
- POST-forespørselJet-reaktorminne (fordi URI ikke kan inneholde nullabytes)
- Spill dataDisrupsjon av tilstøtende oppsamlingspeker ngx pol t
- Fake ngx basseng rengjøring s, peker på systemet()
- Basseng når ødelagtTrigger system ()
- Oppnå RCE
ASLR-påvirkning
- ASLR aktivertAndre arrangører
- ACLR Deaktiver: ekstern kodeutførelse (RCE)
Effektversjon
NGINX Open Source
| Utgaveområde | Fix versjon |
|---|---|
| 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
NGINX Plus
| Utgaveområde | Fix versjon |
|---|---|
| R32 – R36 | R36 P4, R35 P2, R32 P6 |
Andre berørte komponenter
- NGINX Institute Manager2.16 – 2.21.1
- NGINX App produksjon WAF:4.9 – 5.8.0
- NGINX Informasjonsleverandør: 3.5.0 – 5.4.1
- NGINX Gateway stoff: 1.3.0 – 2.5.1
- F5 Dos for NGINX: 4.8.0
🔥PoC Status
PoC gjort offentlig
- GitHub arkiv:)https://github.com/DepthFirstDisclosions/Nginx-Rifft
- Chian Xin er tilbake.Vellykket gjeninnføring av sikkerhetsforskere på trusselinformasjonssenteret
- Tekniske detaljer blir offentliggjort.Andre arrangører
- Bruk i feltetIkke funnet
PC-bruksmetode
# 构建容器 ./setup.sh # 启动易受攻击的 NGINX 服务器 docker compose -f env/docker-compose.yml up # 执行 PoC 获取 Shell python3 poc.py --shell
Rehabiliteringsprogram
Metode 1: Oppgradering
# 升级到修复版本 NGINX Open Source >= 1.31.0 NGINX Open Source >= 1.30.1 NGINX Plus >= R32 P6 NGINX Plus >= R36 P4 # 升级后重启 NGINX nginx -s reload
Metoder 2: Endring av konfigurasjonen
WillOpptaksgruppe uten navnBytt ut medNavnefangstgruppe:)
# 易受攻击配置(未命名捕获) 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;
NavnefangstgruppeDet vil ikke utløse et løkkehull.
Metode 3: Sjekk oppsett
Sjekk for sårbar konfigurasjon:
# 搜索易受攻击的 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/
Oppdagingsprosessen
Automatisert systemfunn
DybdeførsteSikkerhetsanalysesystem:
- innen 6 timerFem spørsmål funnet.
- 4 bekreftet av NGINX
- CVE-2026-42945Det er det verste hullet.
- Så langt tilbake til 2008finnes i nesten alle standardbyggversjoner
Andre relevante sløyfehull
- CVE-2026-42946: minneskade
- CVE-2026-40701: minneskade
- CVE-2026-42934: minneskade
Sammendrag
CVE-2026-42945Det er NGINX, et høyrisikosløyfehull i historien:
- 18 år: skriftlig kode siden 2008 Bibliotek
- CVSS 9.2: Buffer spill som kan føre til RCE
- Trigger-betingelse: omskriv kommando bruker navngitt fangst + erstatte strenginnhold? + og andre kommandoer
- Innvirkningsområde: 9,75 millioner steder globalt, 2.54 millioner steder i Kina
- PoC publisert: GitHub lager + Qianqin har blitt reproducert
- Rehabiliteringsprogram: oppgradering eller fangst etter navn Gruppe
I 18 år var det en potensiell lekkasje, og det ble anbefalt at konfigurasjonen ble oppgradert eller modifisert så snart som mulig.
Offisielle kunngjøringer:)https://my.f5.com/manage/s/article/K000161019
PoC Warehouse:)https://github.com/DepthFirstDisclosions/Nginx-Rifft
Teknisk analyse:)https://dybdefirst.com/forskning/nginx-rift