PHP2Shell: wat er gebeurde en wat wij deden

PHP2Shell legde half Nederland plat. Het lek zat in PHP zelf, niet in WordPress. Wat er misging, welke PHP-versies kwetsbaar waren en gedicht zijn, en hoe wij onze klanten beschermden.

Deze week lag half Nederland eruit door twee kritieke lekken in PHP. Je site kon kwetsbaar zijn terwijl al je plugins keurig up-to-date waren. Dit is wat er speelde, en hoe wij onze klanten beschermden.

In één minuut: wat er misging en wat wij deden.

Wat er aan de hand was

Op 20 oktober lekte een demo uit van een aanvalstool met de naam PHP2Shell (CVE-2026-109618 en CVE-2026-109619). De fout zat niet in WordPress, een plugin of een thema, maar in PHP zelf: de taal die onder zo’n zeven van de tien websites draait. En hij zat er al sinds 2012, veertien jaar lang, onopgemerkt.

9,2
CVSS-score, twee CVE’s
69%
van alle websites draait op PHP
1,9M
PHP-servers direct vindbaar via Shodan
14 jr
aan versies kwetsbaar, vanaf PHP 5.4

Bronnen: Wiz Research, W3Techs, Tenable

Half Nederland trok de stekker eruit

Omdat de details uitlekten vóór er een update was, haalden veel organisaties hun sites uit voorzorg offline. Een site die offline ging, was niet gehackt. Het was een voorzorgsmaatregel.

DigiDOFFLINE
MijnOverheidOFFLINE
Tweede KamerOFFLINE
NCSCOFFLINE
TweakersOFFLINE
13 regio’sOFFLINE

Bronnen: NOS, ANP

Wat was nou het probleem?

Niet jouw website

Het lek zat niet in WordPress, een plugin of een thema. Jouw site was niet verkeerd gebouwd.

Maar in PHP zelf

Met één slim verzoek kon een aanvaller code op de server draaien of geheugen uitlezen. Zonder in te loggen.

Het lek werd gevonden door Calif, Wiz en OpenAI, die met AI een veertien jaar oude fout in ongeveer een week tot een werkende aanval maakten.

Voor de liefhebber

De oorzaak: PHP ruimde de rommel niet op

slim verzoek, geheugen loopt vol
PHP stopt halverwege
→
het opruimen stopt ook
Oude gegevens blijven hangen
→
volgend verzoek, zelfde proces
Pikt die oude gegevens op

CVE-2026-109618: het geheugen loopt vol, PHP ruimt niet netjes op, en de restanten laten een aanvaller code uitvoeren.
CVE-2026-109619: oude gegevens lekken door naar een volgend verzoek, zoals wachtwoorden, tokens en sleutels uit het servergeheugen.

Bron: Wiz Research, PHP GHSA

De mitigatie

Zo hielden wij het tegen met Imunify360

Onze servers draaien op CloudLinux met Imunify360 als firewall. Die bewaakt elke site met meerdere lagen. Nog vóór de officiële patch er was, blokkeerde een nieuwe WAF-regel het verdachte verzoek, nog voordat het PHP bereikte.

Netwerk­firewallbekende kwaadaardige IP’s
WebShieldverdachte en bot-achtige bezoekers
WAF, ModSecurityinspecteert elk verzoek
GEBLOKKEERD
Proactive Defenselet op verdacht PHP-gedrag
Malware­scannercontroleert bestanden
Jouw
website
aanvalsverzoek

De WAF-regel herkent het verdachte uploadverzoek en houdt het bij de voordeur tegen.
multipart-verzoek met PHP_SESSION_UPLOAD_PROGRESS

Plus op elke server: uploadvoortgang uitgeschakeld, sessiebeveiliging aangescherpt en een vernieuwde ModSecurity-regelset. Een tijdelijke afscherming, geen vervanging van de patch.

Bron: CloudLinux Imunify360

Welke PHP-versies, en de fix

BranchKwetsbaarGedicht in
PHP 8.5< 8.5.128.5.12
PHP 8.4< 8.4.278.4.27
PHP 8.3< 8.3.368.3.36
PHP 8.2< 8.2.358.2.35
PHP 7.x en 8.1alles, vanaf 5.4 (2012)CloudLinux backport

Elke release vóór deze versies was kwetsbaar. Wij draaien inmiddels op al onze servers een gedichte PHP, voor alle versies. Je hoeft zelf niets te doen.

Bron: PHP.net advisory, CloudLinux

Geen zorgen

Waarom zie ik toch een ouder PHP-versienummer?

De versienummers hierboven zijn de releases van PHP.net. Wij draaien op CloudLinux, en dat verwerkt beveiligingspatches ook in bestaande PHP-versies. Dat heet een backport: het beveiligingslek wordt gedicht, terwijl het zichtbare PHP-versienummer gelijk kan blijven. Alle servers van WP Provider zijn voorzien van beide beveiligingspatches.

Heb je SSH-toegang? Met php -v zie je de PHP-versie voor de commandline en de bouwdatum. Bijvoorbeeld:

PHP 8.3.35 (cli) (built: Oct 21 2026 00:00:00) (NTS)

Het versienummer is hier nog 8.3.35, maar de bouwdatum laat zien dat het om een opnieuw gebouwde versie gaat. De datum alleen bewijst niet dat een specifieke patch aanwezig is. Daarom controleren wij ook de volledige pakketversie en de wijzigingsgeschiedenis, waarin CVE-2026-109618 en CVE-2026-109619 expliciet vermeld staan.

Een scanner die alleen het PHP-versienummer vergelijkt met de releases op PHP.net, kan daardoor onterecht waarschuwen. Let bovendien op: de PHP-versie op de commandline kan verschillen van de versie die je website gebruikt.

CloudLinux licht deze werkwijze toe op de officiële statuspagina.

Wat de patch doet

De kern

PHP ruimt nu netjes op

Loopt het geheugen vol, dan stopt PHP meteen en schoon. Geen oude gegevens die blijven hangen.

De firewall

Imunify360 blokt de route

Een ModSecurity-regelset die de bekende aanvalsverzoeken al bij de voordeur tegenhoudt.

De herstart

Workers opnieuw gestart

Oude PHP-processen blijven oude code draaien. Daarom herstarten we na de update elke PHP-worker.

Beheer je WordPress-sites voor klanten?

Dit hoort voor ons bij managed hosting: ontwikkelingen volgen, handelen en bereikbaar zijn voor vragen. Zodat jij als webdesigner, developer of bureau er voor je klanten kunt zijn. Zoek je een hostingpartner die hierin meedenkt? Laten we eens kennismaken.

Maak kennis met WP Provider
Vragen over je eigen site? Mail support@wpprovider.nl of bel 085 130 49 97

Solliciteer direct

Heb jij ervaring met WordPress en hosting? Wij zoeken een Support Engineer die technische problemen oplost, meedenkt over automatisering en klanten verder helpt. Solliciteer direct en vertel ons waarom jij bij WP Provider past.

Webhosting aanvragen

Vraag onderstaand jouw hostingaccount aan!

Vraag nu een benchmark aan

Heb je het gevoel dat je website sneller kan? Laat ons een benchmark uitvoeren. Wij garanderen dat je website sneller draait op onze hosting!