← Terug naar overzicht

CVE-2026-42945: de Nginx-kwetsbaarheid die 18 jaar verborgen bleef – werking, PoC en oplossingen uitgelegd

itadol5j

Nginx CVE-2026-42945

🚨 CVE-2026-42945: kritieke kwetsbaarheid in Nginx die 18 jaar verborgen bleef – werking, PoC en oplossingen

Op 13 mei 2026 presenteerde het securityonderzoeksbureaudepthfirstsamen met F5 een historisch kritieke kwetsbaarheid in NGINX –CVE-2026-42945:

  • CVSS v4.0-score van 9.2: geclassificeerd als kwetsbaarheid met hoog risico
  • Heap-bufferoverloop: kan leiden tot externe code-uitvoering (RCE)
  • 18 jaar sluimerend: sinds 2008 in de codebase opgenomen
  • Treft 9,75 miljoen sites wereldwijd: meer dan 2,54 miljoen websites in China getroffen
  • PoC is openbaar: door Qianxin succesvol gereproduceerd

Het iseen historische kwetsbaarheid in de kernmodule van NGINX: met slechts één speciaal vervaardigd HTTP-verzoek kan een aanvaller op afstand de server overnemen.

🔍 Overzicht van de kwetsbaarheid

Basisinformatie

Eigenschap Details
Kwetsbaarheids-ID CVE-2026-42945
CVSS-score v4.0: 9.2 | v3.1: 8.1
Type kwetsbaarheid Heap-bufferoverloop (Heap-based Buffer Overflow)
Type dreiging Externe code-uitvoering (RCE), denial-of-service (DoS)
Voorwaarden voor misbruik Geen authenticatie nodig, slechts een speciaal HTTP-verzoek
Getroffen component ngx_http_rewrite_module (ingebouwde NGINX-kernmodule)
Ontdekt door depthfirst (ontdekt door een geautomatiseerd systeem binnen 6 uur)

Impact

  • 9,75 miljoen sites wereldwijdgetroffen
  • 2,54 miljoen websites in Chinagetroffen
  • NGINX draait op ongeveer een derde van alle websites wereldwijd, waardoor de impact enorm is
  • De code staat er sinds2008in en sluimert al18 jaar

⚠️ Voorwaarden voor activering

Aan alle drie de voorwaarden moet tegelijk zijn voldaan

Om de kwetsbaarheid te activeren is vereist datde configuratie aan een specifieke combinatie van voorwaarden voldoet:

Voorwaarde Toelichting Voorbeeld
1. Naamloze PCRE-captures het rewrite-commando gebruikt naamloze capture-groepen $1, $2, $3…
2. Vervangingsstring met vraagteken de vervangingsstring bevat een ?-teken /profile.php?id=$1&tab=$2
3. Gevolgd door rewrite/if/set op het rewrite-commando volgt direct een ander commando rewrite … last; if (…) { … }

Kwetsbaar voorbeeld

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

Deze configuratie voldoet aan alle drie de voorwaarden:naamloze captures $1/$2, vervangingsstring met ?, gevolgd door een if-commando.

🔬 Technische werking van de kwetsbaarheid

Statusinconsistentie tussen twee verwerkingsfasen

De script-engine van NGINXwerkt in twee fasen:

  • Fase één: berekent de benodigde buffergrootte
  • Fase twee: kopieert de data naar de buffer

De kern van de kwetsbaarheid ligt ineen foutieve administratie van de is_args-vlag:

Fase is_args-status Verwerkingslogica Resultaat
Lengteberekeningsfase is_args = 0 geeft de oorspronkelijke capture-lengte terug buffergrootte wordt onderschat
Datakopieerfase is_args = 1 roept ngx_escape_uri aan; elke byte wordt uitgebreid naar 3 bytes heap-bufferoverloop

Exacte proces

  1. het rewrite-commandobevat naamloze captures $1/$2
  2. De vervangingsstringbevat ?, waardoor is_args = 1 wordt getriggerd
  3. Lengteberekeningsfase: gebruikt een nieuw geïnitialiseerde sub-engine, is_args = 0
  4. geeft de oorspronkelijke lengte terug: er wordt een te kleine heapbuffer toegewezen
  5. Datakopieerfase: gebruikt de hoofdenigne, is_args = 1
  6. roept ngx_escape_uri aan: bytes worden uitgebreid en de buffer loopt over
  7. Door de aanvaller beheerste URI-datawordt in het overloopgebied geschreven

Aanvalsmethode

Heap Feng Shui over meerdere verzoeken:

  • POST-requestbodyheap-spraying (omdat een URI geen null-bytes kan bevatten)
  • Overloopdatacorrumpeert de cleanup-pointer van een aangrenzende ngx_pool_t
  • een vervalste ngx_pool_cleanup_s, verwijzend naar system()
  • bij het vernietigen van de poolwordt de system()-aanroep getriggerd
  • waardoor RCE wordt bereikt

Invloed van ASLR

  • ASLR ingeschakeld: leidt slechts tot een crash van het worker-proces (DoS)
  • ASLR uitgeschakeld: externe code-uitvoering (RCE) is mogelijk

📊 Getroffen versies

NGINX Open Source

Versiebereik Gerepareerde versie
0.6.27 – 1.30.0 1.31.0, 1.30.1

NGINX Plus

Versiebereik Gerepareerde versie
R32 – R36 R36 P4, R35 P2, R32 P6

Andere getroffen componenten

  • 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 is openbaar

  • GitHub-repository:https://github.com/DepthFirstDisclosures/Nginx-Rift
  • Gereproduceerd door Qianxin: securityonderzoekers van het Threat Intelligence Center hebben het succesvol gereproduceerd
  • Technische details openbaar: depthfirst heeft een technische analyse gepubliceerd
  • Exploitatie in het wild: nog niet waargenomen

Gebruik van de PoC

# 构建容器
./setup.sh

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

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

✅ Oplossingen

Methode 1: versie upgraden

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

# 升级后重启 NGINX
nginx -s reload

Methode 2: configuratie aanpassen (mitigatie)

Vervangnaamloze capture-groependoorbenoemde capture-groepen:

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

Benoemde capture-groepenactiveren de kwetsbaarheid niet.

Methode 3: configuratie controleren

Controleer of er een kwetsbare configuratie aanwezig is:

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

🔍 Ontdekkingsproces

Ontdekt door het geautomatiseerde systeem van

depthfirst: het securityanalysesysteem vond

  • binnen 6 uur5 problemen
  • 4 bevestigd door NGINX
  • CVE-2026-42945is de ernstigste kwetsbaarheid
  • herleidbaar tot 2008, aanwezig in vrijwel alle standaard builds

Andere gerelateerde kwetsbaarheden

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

📝 Samenvatting

CVE-2026-42945is een historisch kritieke kwetsbaarheid in NGINX:

  • 18 jaar sluimerend: sinds 2008 in de codebase
  • CVSS 9.2: heap-bufferoverloop die tot RCE kan leiden
  • Activeringsvoorwaarden: rewrite-commando met naamloze captures + vervangingsstring met ? + gevolgd door andere commando's
  • Impact: 9,75 miljoen sites wereldwijd, 2,54 miljoen websites in China
  • PoC openbaar: GitHub-repository + gereproduceerd door Qianxin
  • Oplossing: upgraden of benoemde capture-groepen gebruiken

Na 18 jaar sluimering breekt de kwetsbaarheid los; upgrade of pas uw configuratie zo snel mogelijk aan.

Officiële aankondiging:https://my.f5.com/manage/s/article/K000161019

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

Technische analyse:https://depthfirst.com/research/nginx-rift