← Tilbage til listen

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

itadol5j

Nginx CVE-2026-42945

🚨 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

  1. rewrite-direktivetindeholder unavngivne capture-grupper $1/$2
  2. erstattelsesstrengenindeholder ?, hvilket udløser is_args = 1
  3. Længdeberegningsfasen: bruger en nyinitialiseret undermotor, is_args = 0
  4. returnerer den oprindelige længde: der allokeres en for lille heap-buffer
  5. Datakopieringsfasen: bruger hovedmotoren, is_args = 1
  6. kalder ngx_escape_uri: udvider bytes og overløber bufferen
  7. 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