Nginx-sårbarheden CVE-2026-42945, der har ligget på lur i 18 år: princip, PoC og løsning

🚨 Nginx-sårbarhed, der har ligget på lur i 18 år: CVE-2026-42945 – princip, PoC og løsning
Den 13. maj 2026 offentliggjorde sikkerhedsforskningsfirmaetdepthfirstsammen med F5 en af de alvorligste sårbarheder nogensinde i NGINX –CVE-2026-42945:
- CVSS v4.0 score 9.2: klassificeres som en sårbarhed med høj risiko
- Heap-bufferoverløb: kan føre til fjernudførelse af kode (RCE)
- Har ligget på lur i 18 år: koden blev skrevet ind i kodebasen i 2008
- Påvirker 9,75 millioner websteder globalt: over 2,54 millioner websteder i Kina er berørt
- PoC er offentliggjort: Qianxin har allerede reproduceret den med succes
Det er en historisk sårbarhed iNGINX's kernemodul. En angriber behøver blot sende én særligt udformet HTTP-forespørgsel for at overtage serveren eksternt.
🔍 Overblik over sårbarheden
Grundlæggende oplysninger
| Sårbarhedsegenskab | Detaljer |
|---|---|
| Sårbarheds-id | CVE-2026-42945 |
| CVSS-score | v4.0: 9.2 | v3.1: 8.1 |
| Sårbarhedstype | Heap-bufferoverløb (Heap-based Buffer Overflow) |
| Trusseltype | Fjernudførelse af kode (RCE), denial of service (DoS) |
| Udnyttelsesbetingelser | Ingen godkendelse påkrævet – blot en konstrueret HTTP-forespørgsel |
| Berørt komponent | ngx_http_rewrite_module (indbygget kernemodul i NGINX) |
| Opdaget af | depthfirst (automatiseret system fandt den på under 6 timer) |
Omfang
- 9,75 millioner websteder globaltberørt
- 2,54 millioner websteder i Kinaberørt
- NGINX driver ca. 1/3 af verdens websteder, så konsekvenserne er enorme
- Koden er skrevet i2008og har ligget på lur i18 år
⚠️ Udløsende betingelser
Tre betingelser skal være opfyldt samtidig
Sårbarheden udløses, nårkonfigurationen opfylder en bestemt kombination af betingelser:
| Betingelse | Beskrivelse | Eksempel |
|---|---|---|
| 1. Unavngivne PCRE-grupper | rewrite-direktivet bruger unavngivne capture-grupper | $1, $2, $3… |
| 2. Erstattelsesstreng indeholder spørgsmålstegn | erstattelsesstrengen indeholder tegnet ? | /profile.php?id=$1&tab=$2 |
| 3. Efterfølgende rewrite/if/set | rewrite-direktivet efterfølges straks af andre direktiver | rewrite … last; if (…) { … } |
Sårbart eksempel
# 易受攻击配置
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# 后跟其他指令
if ($arg_debug) {
set $debug_flag 1;
}
Denne konfiguration opfylder alle tre betingelser:unavngivne capture-grupper $1/$2,erstattelsesstreng med ?,efterfulgt af if-direktiv.
🔬 Sådan fungerer sårbarheden
Tilstandsinkonsistens i tofaset behandling
NGINX's scriptmotoranvender tofaset behandling:
- Fase 1: beregner den nødvendige bufferstørrelse
- Fase 2: kopierer data ind i bufferen
Kernen i sårbarheden eren fejlbehæftet styring af is_args-flaget:
| Fase | is_args-tilstand | Behandlingslogik | Resultat |
|---|---|---|---|
| Længdeberegningsfasen | is_args = 0 | returnerer den oprindelige capture-længde | bufferstørrelsen undervurderes |
| Datakopieringsfasen | is_args = 1 | kalder ngx_escape_uri, hvor hver byte udvides til 3 bytes | heap-bufferoverløb |
Detaljeret forløb
- rewrite-direktivetindeholder unavngivne capture-grupper $1/$2
- erstattelsesstrengenindeholder ?, hvilket udløser is_args = 1
- Længdeberegningsfasen: bruger en nyinitialiseret undermotor, is_args = 0
- returnerer den oprindelige længde: der allokeres en for lille heap-buffer
- Datakopieringsfasen: bruger hovedmotoren, is_args = 1
- kalder ngx_escape_uri: udvider bytes og overløber bufferen
- Angriberstyret URI-dataskrives ind i overløbsområdet
Udnyttelsesmetode
Heap Feng Shui på tværs af forespørgsler:
- POST-forespørgselstekstsprøjter heap-hukommelse (da en URI ikke kan indeholde null-bytes)
- Overløbsdataødelægger cleanup-pointeren i en tilstødende ngx_pool_t
- forfalsker ngx_pool_cleanup_sog peger den mod system()
- Når poolen destrueresudløses et system()-kald
- hvorved RCE opnås
ASLR's betydning
- ASLR aktiveret: resulterer blot i nedbrudte worker-processer (DoS)
- ASLR deaktiveret: muliggør fjernudførelse af kode (RCE)
📊 Berørte versioner
NGINX Open Source
| Versionsområde | Korrigeret version |
|---|---|
| 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
NGINX Plus
| Versionsområde | Korrigeret version |
|---|---|
| R32 – R36 | R36 P4, R35 P2, R32 P6 |
Andre berørte 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 er offentliggjort
- GitHub-repo:https://github.com/DepthFirstDisclosures/Nginx-Rift
- Qianxin har reproduceret den: sikkerhedsforskere fra trusselsintelligenscentret har reproduceret den med succes
- Tekniske detaljer er offentliggjort: depthfirst har udgivet en teknisk analyse
- Udnyttelse i felten: endnu ikke observeret
Sådan bruges PoC'en
# 构建容器 ./setup.sh # 启动易受攻击的 NGINX 服务器 docker compose -f env/docker-compose.yml up # 执行 PoC 获取 Shell python3 poc.py --shell
✅ Løsningsforslag
Metode 1: Opgradér 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
Metode 2: Ændr konfigurationen (afhjælpning)
Erstatunavngivne capture-gruppermednavngivne capture-grupper:
# 易受攻击配置(未命名捕获) 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;
Navngivne capture-grupperudløser ikke sårbarheden.
Metode 3: Gennemgå konfigurationen
Kontrollér, om der findes sårbare 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/
🔍 Opdagelsesforløbet
Opdaget af
depthfirsts sikkerhedsanalysesystem:
- På 6 timerblev der fundet 5 problemer
- 4 bekræftet af NGINX
- CVE-2026-42945er den mest alvorlige sårbarhed
- kan spores tilbage til 2008og findes i næsten alle standardbuilds
Andre relaterede sårbarheder
- CVE-2026-42946: problem med hukommelseskorruption
- CVE-2026-40701: problem med hukommelseskorruption
- CVE-2026-42934: problem med hukommelseskorruption
📝 Konklusion
CVE-2026-42945er en af de alvorligste sårbarheder nogensinde i NGINX:
- Har ligget på lur i 18 år: koden blev skrevet ind i kodebasen i 2008
- CVSS 9.2: heap-bufferoverløb, kan føre til RCE
- Udløsningsbetingelser: rewrite-direktiv med unavngivne capture-grupper + erstattelsesstreng med ? + efterfulgt af andre direktiver
- Omfang: 9,75 millioner websteder globalt, heraf 2,54 millioner i Kina
- PoC offentliggjort: GitHub-repo + Qianxin har reproduceret den
- Løsning: opgradér versionen eller brug navngivne capture-grupper
En sårbarhed, der har ligget på lur i 18 år, er nu brudt løs – opgradér eller ret konfigurationen hurtigst muligt.
Officiel meddelelse:https://my.f5.com/manage/s/article/K000161019
PoC-repo:https://github.com/DepthFirstDisclosures/Nginx-Rift
Teknisk analyse:https://depthfirst.com/research/nginx-rift