Twee lekken in één week: je volgende crisisoefening diende zich vanzelf aan

Datum: 25-10-2026

Crisis Exercise

Twee lekken in één week: je volgende crisisoefening diende zich vanzelf aan

PHP2Shell en vlak erachter Node2Shell (CVE-2026-111497): twee kritieke kwetsbaarheden op één dag waren in de praktijk een crisisoefening. Over informatie wegen, het besluit nemen, wat een firewall wel en niet doet, en hoe je dit oefent, patchen staat kort achterin.

Twee lekken in één week: je volgende crisisoefening diende zich vanzelf aan

TL;DR

In één week kwamen er twee kritieke kwetsbaarheden naar buiten: twee in PHP (CVE-2026-109618 en CVE-2026-109619) en een in de Brotli-decompressie van Node.js (CVE-2026-111497, "Node2Shell"), op dezelfde dag. Dat was in de praktijk een crisisoefening die niemand had ingepland. Dit stuk gaat niet over patchen, dat staat kort achterin, maar over de twee vaardigheden die zo'n week test: informatie wegen en een besluit nemen, allebei onder druk, en allebei vooraf te oefenen.

Twee kritieke lekken in één week

De PHP-kwetsbaarheden van 21 oktober beschreef ik vorige week: twee kritieke lekken met publieke exploitcode, en een besluit waar geen draaiboek voor bestaat. Op diezelfde dag bracht ook Node.js een beveiligingsrelease uit, met CVE-2026-111497 in de Brotli-decompressie die Node.js meelevert. Een aanvaller kan daarmee in het ergste geval op afstand code uitvoeren, zonder in te loggen.

Over de ernst: Google kent als CVE Numbering Authority een CVSS-score van 9,2 (kritiek) toe; Node.js zelf houdt "High" aan. Ik noem dat cijfer mét wie het heeft toegekend. Dat is geen muggenzifterij, het is precies de informatie die je in een crisis nodig hebt, en waar de volgende sectie over gaat.

De eerste crisisvaardigheid is informatie wegen, niet patchen

Op de dag zelf is het patchen niet het probleem; dat gaat vanzelf zodra de pakketten er zijn. Het probleem is wat je gelooft, en wat je op grond daarvan besluit en communiceert, terwijl de informatie nog beweegt.

Deze week zag je dat live. Er circuleerde een ernstscore van 9,2 voor PHP zonder dat erbij stond wie hem had toegekend. Er werd gezegd dat alle PHP vanaf versie 5 kwetsbaar was, terwijl de bronnen "vermoedelijk" en "mogelijk" schreven. En over actief misbruik verschoof het beeld per dag. Wie zijn besluit, of erger, zijn klantbericht, op het stelligste gerucht baseert, krijgt dat een week later terug.

De vaardigheid is onderscheid maken tussen wat een gezaghebbende bron bevestigt en wat iemand ervan maakte. Praktisch: wijs vooraf aan wie tijdens een incident de "bron van waarheid" is, en op welke paar plekken je kijkt, voor deze week waren dat de Node.js-release en het NCSC, niet de tijdlijn op sociale media.

Het patroon dat telt: ze komen achter elkaar

Vrijwel elk crisisdraaiboek gaat uit van één incident. Eén melding, één team, één tijdlijn die begint en eindigt. De praktijk van deze week was anders: een tweede kritiek lek dat binnenkwam terwijl het eerste nog liep, in een andere technologie, met deels dezelfde mensen.

Dat test iets wat één incident nooit test: of je het een tweede keer achter elkaar kunt, met een team dat al moe is en aandacht die al verdeeld is. Daar lopen organisaties op stuk, en niet op de techniek.

Beschermt een firewall of CDN je hiertegen?

Een terechte vraag, en deze week vaak gesteld. Het eerlijke antwoord is: gedeeltelijk, en niet op de manier waarop je het hoopt.

  • Een WAF, CDN of tunnel voor je site dempt vooral het verkeer dat naar binnen komt, en koopt je zo reactietijd. Hij sluit de kans niet.
  • Wat je servers zélf naar buiten ophalen loopt niet over die firewall. Juist die kant is bij Node2Shell het stille risico.
  • En het belangrijkste: een afgeschermde dienst draait nog steeds een kwetsbare runtime. De firewall vervangt het patchen niet.

Achter een WAF zitten is dus goed nieuws voor je reactietijd en slecht nieuws als het je enige antwoord is. Het geeft je ruimte om beheerst te handelen, precies de ruimte die je in de oefening hieronder benut.

Drie dingen die je nu nakijkt

  1. Houd je bevoegdheid stand bij herhaling? Leg vast wie mag besluiten een dienst uit de lucht te halen, en bij welke drempel, en of dat ook geldt voor het tweede besluit dezelfde dag. Eén naam met een vervanger erachter, geen rol.
  2. Is de overdracht geregeld tussen incidenten, niet alleen tussen diensten? Een crisis duurt langer dan een werkdag, en bij twee tegelijk verdwijnt wat niet is opgeschreven. Die overdrachtsstap hebben we toegevoegd aan de vijf van BOBOC, uitgewerkt in Crisis in de praktijk.
  3. Weet je waar je PHP én Node draait? Je kunt geen besluit nemen over wat je niet weet te hebben. Een inventaris die je pas tijdens het incident maakt, is er geen.

En de ongemakkelijke: een deel van deze besluiten neemt je hoster of leverancier voor je. Dat is afhankelijkheid van een leverancier die je niet beheerst. De vraag vooraf is of je weet dat het zo is, en hoe lang je het volhoudt.

Dit is je volgende oefening

Je hoeft dit scenario niet te bedenken, het heeft zich deze week zelf aangediend. En het is het eenvoudigste en eerlijkste crisisscenario dat er is: geen aanval, geen losgeld, geen bewijs van een inbraak. Alleen een kritieke kwetsbaarheid met publieke exploitcode, een tweede die er vlak achteraan komt, en de vraag wat je doet.

Precies omdat er geen aanvaller in zit, legt het sneller bloot waar het echt op vastloopt dan welke ransomware-oefening ook: wie mag beslissen, op welke informatie, en wat je je klanten vertelt en vanaf welk moment. Speel het als tabletop van een uur, met één verzwaring halverwege, de tweede kwetsbaarheid, zodat ook de overdracht en de verdeelde aandacht aan bod komen.

Wil je er een begeleide vorm voor, met een rapportage die bestuurlijk navertelbaar is, dan is dat waar Crisis in de praktijk over gaat.

Patchen, in het kort

Voor de volledigheid, zodat je technische team het niet hoeft op te zoeken:

  • Node.js: upgrade naar 22.23.4, 24.22.1 of 26.12.1. Oudere, uitgefaseerde lijnen krijgen geen fix, dat is meteen het signaal om ervan af te gaan.
  • PHP: upgrade naar 8.5.12, 8.4.27, 8.3.36 of 8.2.35.
  • Nog niet kunnen patchen? Weiger geprepareerd verkeer aan de rand als tussenmaatregel, en herbouw daarna je omgeving en controleer de versies opnieuw.

De details voor wie zelf Brotli, Bun of Python draait, staan bij de bron: Node.js, Aikido en het NCSC.

Veelgestelde vragen

We draaien geen PHP. Zijn we dan klaar?

Voor PHP2Shell: ja. Maar de les van deze week gaat niet over PHP of Node, die gaat over hoe je handelt als de tweede crisis binnenkomt voor de eerste klaar is. Dat scenario raakt je ongeacht welke techniek je draait.

Is Node2Shell al misbruikt?

Er is een proof-of-concept gepubliceerd en geen bevestigd misbruik in het wild bij het schrijven van dit stuk. Een reden om snel te handelen, geen reden om te wachten tot het wél zo is.

Wat is het eerste wat we nu zouden doen?

Vaststellen waar je het draait en wie mag beslissen, in die volgorde. De patch volgt vanzelf; het overzicht, de informatieweging en de bevoegdheid zijn wat je onder druk mist.

Verder lezen

Gerelateerde artikelen