PHP2Shell is een pre-auth RCE in PHP zelf. Upgrade PHP en herstart het.
Twee geheugenveiligheidsbugs in de PHP-engine (CVE-2026-109618, CVE-2026-109619) laten een aanvaller zonder inloggen code uitvoeren of servergeheugen uitlezen — wachtwoorden, API-sleutels, sessietokens — op vrijwel elke PHP-versie sinds 5.4, ongeacht de applicatie erbovenop.
Niet technisch? Lees PHP2Shell in gewone taal — wat het betekent voor je website of de SaaS-tools die je gebruikt.
Laatst gecontroleerd 2026-10-22 · onafhankelijk, leveranciersneutraal
Plak een versie, de uitvoer van php -v, of één versie per regel voor een hele serverpark. Draait volledig in je browser.
De CLI en de webserver kunnen verschillende PHP-builds draaien. Controleer de versie die je webserver echt gebruikt: php-fpm -v (of php-fpm8.3 -v), of phpinfo() via die site.
| Branch | Kwetsbaar | Opgelost in |
|---|---|---|
| 8.5 | < 8.5.12 | 8.5.12 |
| 8.4 | < 8.4.27 | 8.4.27 |
| 8.3 | < 8.3.36 | 8.3.36 |
| 8.2 | < 8.2.35 | 8.2.35 |
| 8.1 · 8.0 · 7.4 | alle | Alleen source-backport |
| 5.4 – 7.3 | alle | Geen fix |
PHP 8.2 verliest op 2026-12-31 de security-ondersteuning
Patchen naar 8.2.35 lost PHP2Shell op, maar vóór eind 2026 moet je opnieuw overstappen. Ga je toch migreren, kies dan 8.4 of 8.5.
Doe dit nu
In deze volgorde. Niets anders is een volledige oplossing.
- 01
Vind elke PHP-runtime
Webservers, containers, base images, shared hosting, staging. De CLI-versie kan afwijken van wat PHP-FPM of Apache draait.
Hoe - 02
Installeer een gepatchte release
8.5.12 · 8.4.27 · 8.3.36 · 8.2.35, of het gepatchte pakket van je distributie. WordPress/Drupal/Laravel bijwerken werkt PHP niet bij.
Hoe - 03
Herstart alles wat PHP draait
PHP-FPM-pools, Apache (mod_php), FrankenPHP, queue-workers, Octane/RoadRunner/Swoole. Oude processen houden de oude code in het geheugen.
Hoe - 04
Verifieer en kijk terug
Bevestig de versie die de webserver meldt. Bekijk de logs sinds begin oktober 2026 en vervang geheimen als iets verdacht oogt.
Hoe
Kun je vandaag niet upgraden? Tijdelijke mitigaties verkleinen de blootstelling aan de bekende aanvalspaden. Op shared hosting? Zie hosting.
Gidsen voor jouw situatie
- WordPressIs je WordPress-site kwetsbaar voor PHP2Shell? Controleer PHP via Sitediagnose, lees waarom plugin-updates niet helpen en wat je je host vraagt.
- DrupalIs je Drupal-site kwetsbaar voor PHP2Shell? Controleer PHP via het statusrapport of Drush en lees wat je je hostingprovider moet vragen.
- JoomlaIs je Joomla-site kwetsbaar voor PHP2Shell? Zo controleer je PHP in Systeeminformatie, waarom een Joomla-update niet de oplossing is, en wat je je host vraagt.
- HostingprovidersPHP2Shell bij shared en managed hosting: PHP-versies controleren en wisselen in cPanel of Plesk, updates van providers en vragen voor je host.
- Cloudflare WAFCloudflare WAF tegen PHP2Shell: regel-ID’s voor Free en betaalde plannen, controle van blokkades en waarom je PHP toch moet patchen.
- session.upload_progressStopt session.upload_progress uitschakelen PHP2Shell? Lees wat het afdekt, waar je het instelt, hoe je het controleert en wat je herstart.
Wordt het misbruikt?
Stand per 2026-10-22. Berichten lopen uiteen; ga ervan uit dat capabele aanvallers werkende exploits hebben.
- Cloudflare (CTO Dane Knecht): “We are seeing early attacks emerging and are updating mitigations as new vectors show up.”
- watchTowr meldt per 21 oktober misbruik in the wild, waargenomen via zijn honeypotnetwerk.
- Het Nederlandse NCSC had op dat moment geen misbruik gezien en beschouwt elk PHP-systeem dat aan internet hangt als kwetsbaar tot het gepatcht is.
- Er was geen bevestigde geslaagde inbraak gepubliceerd en geen van beide CVE’s stond in de KEV-catalogus van CISA.
- Op GitHub circuleren diverse “PoC”-repository’s. Tenable kon van geen enkele bevestigen dat hij werkt — behandel ze als onbetrouwbare, mogelijk kwaadaardige code.
Welke serveropstellingen zijn blootgesteld
mod_php is het duidelijkst te misbruiken, maar elke SAPI die webrequests afhandelt heeft de patch nodig.
| Opstelling | …109618 | …109619 | Toelichting |
|---|---|---|---|
| Apache + mod_php | RCE bevestigd | RCE bevestigd | Beide CVE’s bevestigd tot RCE met standaardlimieten. Opstelling met het hoogste risico. |
| PHP-FPM (nginx, Apache, Caddy…) | Vatbaar | RCE bevestigd | RCE via de sessielevenscyclus bevestigd op FPM. Het OOM-pad is bevestigd via codepaden op applicatieniveau; er is geen generieke FPM-exploit gepubliceerd. |
| FrankenPHP / LiteSpeed LSAPI | Waarschijnlijk | Waarschijnlijk | De advisory noemt ze waarschijnlijk vatbaar. Langlevende workers maken achtergebleven state tussen requests juist relevanter. |
| CLI (cron, queue-workers, artisan) | Niet behandeld | Niet behandeld | Niet behandeld in de advisories en bij normaal gebruik niet bereikbaar via HTTP-requests. Upgrade toch — het is hetzelfde pakket. |
Wanneer kwam de patch uit in mijn tijdzone?
PHP publiceerde de gepatchte releases op dinsdag 21 oktober 2026 om 14:00 UTC — 16:00 uur Nederlandse en Belgische tijd. De VS en Europa zaten die dag nog in de zomertijd, dus “EST” betekende in werkelijkheid EDT (UTC−4).
| Tijdzone | Patch uitgebracht | Datum |
|---|---|---|
| UTC | 14:00 | di 21 okt 2026 |
| VS Pacific (PDT, UTC−7) | 07:00 | 21 okt |
| VS Central (CDT, UTC−5) | 09:00 | 21 okt |
| VS Eastern (EDT, UTC−4) | 10:00 | 21 okt — zoekopdrachten naar “EST” bedoelen dit |
| VK (BST, UTC+1) | 15:00 | 21 okt |
| Midden-Europa (CEST, UTC+2) | 16:00 | 21 okt — NL, BE, LU, DE, AT, FR… |
| India (IST, UTC+5:30) | 19:30 | 21 okt |
| China / HK / SG (UTC+8) | 22:00 | 21 okt |
| Japan (JST, UTC+9) | 23:00 | 21 okt |
| Sydney (AEDT, UTC+11) | 01:00 | 22 okt |
Wat een aanvaller kan doen
Code uitvoeren zonder in te loggen
Code-uitvoering als de PHP-workergebruiker (bijv. www-data): webshells, datadiefstal, defacement, laterale beweging.
Geheugen van andere requests lezen
Workergeheugen kan databasewachtwoorden, API-sleutels, sessiecookies, TLS-materiaal en formulierdata van andere gebruikers bevatten.
Stil data lekken
Het geheugenlekpad vereist geen code-uitvoering, dus tools die op kwaadaardige processen letten slaan mogelijk nooit aan.
Veelgemaakte fouten
De snelste manieren om te denken dat je veilig bent terwijl je dat niet bent.
| Als je denkt… | Werkelijkheid |
|---|---|
| “Ik heb WordPress / mijn plugins bijgewerkt.” | De bug zit in de PHP-interpreter. Applicatie-updates raken die niet. Zelfs een simpel “Hello World”-script op een kwetsbare PHP is blootgesteld. |
| “Ik heb session.upload_progress.enabled = 0 gezet.” | Dat blokkeert enkele bevestigde paden van één CVE. Voor CVE-2026-109618 doet het niets. De PHP-ontwikkelaars zeggen zelf dat upgraden de enige mitigatie is. |
| “Ik heb apt upgrade gedraaid, dus ik ben klaar.” | Draaiende PHP-FPM- / Apache-processen houden de oude binary in het geheugen tot ze herstarten. |
| “php -v zegt dat ik gepatcht ben.” | Dat is de CLI. De webserver kan een ander pakket, een andere container of versie gebruiken. Controleer php-fpm -v of phpinfo(). |
| “Ik zit achter Cloudflare / een WAF.” | WAF-regels verkleinen het risico bij bekende payloads; aanvallers passen ze al aan en origins zijn vaak direct bereikbaar. Het koopt tijd, het is geen oplossing. |
| “Mijn versie lijkt oud, dus ik ben kwetsbaar.” | Misschien niet. Debian, Ubuntu en RHEL backporten fixes zonder het upstream-nummer te wijzigen. Controleer de changelog van het pakket. |
De twee CVE’s in één oogopslag
RCE via out-of-memory-corruptie (OOM)
Code-uitvoering zonder authenticatie als de PHP-webworker-gebruiker.
Gedemonstreerd: Pre-auth RCE op WordPress, Drupal en Joomla (mod_php, standaardlimieten).
RCE via achtergebleven globale state tussen requests
Use-after-free die leidt tot het lekken van workergeheugen of code-uitvoering.
Gedemonstreerd: Pre-auth RCE op WordPress en Drupal; applicatie-onafhankelijk geheugenlek op afstand.
Waarom sommige sites 10.0 zeggen: CVSS 9.2 vs 10.0 →
Hoe het verliep
- 2026-10-20 15:00 UTCCVE-ID’s gaan rond op fora en sociale media, met een onjuiste CVSS van 10.0.
- 2026-10-20 19:30 UTCPHP publiceert zijn vooraankondiging eerder dan gepland.
- 2026-10-20 ~20:00 UTCCalif publiceert per ongeluk een video van zijn proof of concept.
- 2026-10-20 23:00 UTCMitigatieadvies gaat naar enkele aanbieders van vitale infrastructuur, en is mogelijk uitgelekt.
- 2026-10-21 03:02 UTCCloudflare-WAF-regels gaan live voor alle abonnementen, ook Free.
- 2026-10-21 07:41 UTCChainguard levert gepatchte images en doorbreekt het embargo met meer dan zes uur.
- 2026-10-21 11:51 UTCBambooHR haalt zijn dienst uit voorzorg offline (VS, Canada, Ierland).
- 2026-10-21 (CEST)Nederlandse overheids- en onderwijssites, waaronder DigiD en MijnOverheid, gaan uit voorzorg offline.
- 2026-10-21 14:00 UTCGecoördineerde release: PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35, plus source-backports voor 7.4, 8.0, 8.1. Oorspronkelijk gepland voor 22 okt.
- 2026-10-21 15:03 UTCBambooHR meldt dat de fix is toegepast en dat er wordt getest.
Volledige tijdlijn vanaf de audit in 2024 → · Vergeleken met de Java-bug uit 2021: PHP2Shell vs Log4Shell →