PHP2Shell: WTF is er gebeurd? (CVE-2026-109618 en CVE-2026-109619)

| Surendra Pathak

Isometrische 3D-illustratie van webhostinginfrastructuur, weergegeven als een uitgestrekt netwerk van oplichtende glazen servernodes, verbonden door turquoise datalijnen. Boven op het netwerk ligt een groep grotere blokken van matglas die websites en applicaties voorstellen. Een felle breuk splijt de gedeelde infrastructuur, en enkele scherpe amber- en roodkleurige scherven duwen door de breuk omhoog, als aanvallers die een zwakte misbruiken in de basis waarvan alles afhankelijk is.

Twee geheugenfouten in de PHP-engine werden niet-geauthenticeerde RCE, en de gecoördineerde openbaarmaking viel in het openbaar uiteen. Wat er gebeurde, wat getroffen is, en hoe te reageren.

Overzicht

Op 21 oktober 2026 bracht het PHP-project noodpatches uit voor twee kritieke kwetsbaarheden in de PHP-engine, CVE-2026-109618 en CVE-2026-109619, elk door het PHP-securityteam beoordeeld met 9,2 op CVSS v4.0. Elk kan onder aangetoonde omstandigheden niet-geauthenticeerde remote code execution mogelijk maken, via geprepareerde HTTP-verzoeken tegen een kwetsbare PHP-runtime. De publieke exploittooling die de kwetsbaarheden combineert, heet PHP2Shell.

De fouten zitten in de PHP-runtime, niet in één bepaalde applicatie, dus een server is blootgesteld zelfs wanneer zijn eigen code schoon is. Het onderzoek toonde remote code execution aan tegen actuele versies van WordPress, Drupal en Joomla. De kwetsbare code dateert uit PHP 5.4.0, wat betekent dat het risico ruim een decennium latent aanwezig was.

De uitrol was net zo opmerkelijk als de bug zelf. De gecoördineerde openbaarmaking viel in het openbaar uiteen, gemelde exploitatiepogingen gingen aan de patch vooraf, en de episode ontaardde in een geschil tussen de PHP Foundation en Chainguard. Het netto-effect was een verkort reactievenster. Dit bericht behandelt beide helften: de technische, strak gehouden, en de rommelige.

Belangrijkste feiten

  • Wat het is: twee geheugenkwetsbaarheden in de PHP-engine, CVE-2026-109618 en CVE-2026-109619, samengevat onder de naam PHP2Shell. Elk is beoordeeld met CVSS v4.0 9,2.

  • Impact: elk kan niet-geauthenticeerde remote code execution mogelijk maken. CVE-2026-109618 maakt daarnaast verzoekoverschrijdende lekkage van PHP-workergeheugen mogelijk.

  • Waarom het zo breed is: de fouten zitten in de runtime, dus ook applicaties met veilige code zijn blootgesteld. Het onderzoek toonde RCE aan tegen WordPress, Drupal en Joomla.

  • Getroffen: PHP-versies terug tot 5.4.0 zijn getroffen door ten minste één van de openbaargemaakte kwetsbaarheden, over PHP-FPM, Apache mod_php, php-cgi, FrankenPHP en LiteSpeed heen. Controleer de PHP-advisory en uw distributeur voor de precieze status van elke versie.

  • Hersteld: PHP 8.5.12, 8.4.27, 8.3.36 en 8.2.35, met broncode-backports voor 7.4, 8.0 en 8.1. De branches 5.4 tot en met 7.3 hebben het einde van hun levensduur bereikt en worden niet hersteld.

  • Exploitatie: gemelde exploitatiepogingen rond het openbaarmakingsvenster; bevestig de actuele status aan de hand van primaire bronnen voordat u handelt.

  • Wat te doen: patch de runtime, verifieer op CVE-ID in plaats van versiestring, en onderzoek elk systeem dat vóór het patchen blootgesteld was.

Wat PHP2Shell is

PHP2Shell duidt op twee afzonderlijke geheugenfouten in de PHP-interpreter, samen met de publieke tooling die ze uitbuit. Het is geen kwetsbaarheid in WordPress, Drupal, Joomla of enige andere applicatie. De betrokken beveiligingsgrens is de PHP-runtime zelf, die een verzoek parseert en verwerkt voordat de applicatielogica draait.

Beide kwetsbaarheden zijn op afstand en zonder authenticatie bereikbaar, en de PHP-advisory benoemt PHP-FPM, Apache met mod_php, php-cgi, FrankenPHP en LiteSpeed als getroffen manieren om PHP uit te serveren. De advisory benoemt mod_php als de configuratie met het hoogste risico en verwijst naar een aangetoonde exploit die de fout kan activeren voordat applicatiecode wordt uitgevoerd.

Het kwetsbare verzoekpad

De aangetoonde aanvalspaden gebruiken geprepareerde HTTP-verzoeken, waaronder multipart/form-data-verzoeken. PHP parseert multipart-bodies in native C-code tijdens de vroege verzoekverwerking, voordat de normale applicatielogica draait. Daarom is de kwetsbare code bereikbaar zonder een legitiem uploadformulier, een geldige sessie of enige kwetsbare functie op applicatieniveau. Invoervalidatie in de applicatie kan code niet beschermen die wordt uitgevoerd voordat de applicatie zelf draait.

Twee engine-functies liggen op dit pad en leveren de omstandigheden die de bugs vereisen. De eerste is session upload progress, het mechanisme waarmee PHP rapporteert hoe ver een upload gevorderd is en dat tijdens het multipart-parsen interne staat vult. De tweede is PHP's fatal-error-afhandeling, inclusief de backtrace die de engine opbouwt wanneer een verzoek afbreekt, bijvoorbeeld wanneer het memory_limit overschrijdt. Beide draaien in native code en beide kunnen van buiten de applicatie worden aangestuurd.

CVE-2026-109618: use-after-free en geheugenlekkage bij upload progress

CVE-2026-109618 is een use-after-free in PHP's upload-progress-afhandeling, gemeld door Wiz Research en de onderzoeker die bekendstaat als Calif. Het gepubliceerde onderzoek stelt vast dat het zowel applicatie-onafhankelijke lekkage van PHP-workerprocesgeheugen als niet-geauthenticeerde remote code execution mogelijk maakt.

De fout wordt bereikt tijdens het multipart-parsen. Een fatal error op het verkeerde moment, meestal een out-of-memory-toestand wanneer een verzoek memory_limit overschrijdt, onderbreekt de engine in native code voordat het opschonen is voltooid, en laat een verwijzing achter naar geheugen dat al is vrijgegeven. Een volgende operatie gebruikt dan dat vrijgegeven geheugen, en een aanvaller die de allocatiefout op een gekozen punt kan uitlokken, door een multipart/form-data-body zo te dimensioneren dat die het limiet overschrijdt, krijgt invloed op de inhoud ervan.

In het aangetoonde geheugenlekkagepad kan PHP's upload-progress-afhandeling de inhoud van vrijgegeven workerprocesgeheugen aan de client teruggeven in de PHPSESSID-responscookie. Afhankelijk van wat er in het geheugen achterblijft, kunnen de gelekte bytes gegevens bevatten uit andere verzoeken die dezelfde worker heeft afgehandeld, zoals inloggegevens, sessietokens, API-sleutels of andere gevoelige applicatiegegevens. Het onderzoek toont verzoekoverschrijdende lekkage aan, geen gegarandeerde toegang tot elk geheim op de server. Het lek vereist niet dat de applicatie session_start() aanroept. Dit is de Heartbleed-analogie: onbedoelde geheugenlekkage via een verzoek dat het nooit had mogen lezen.

CVE-2026-109619: use-after-free in de fatal-error-backtrace

CVE-2026-109619 bundelt verwante geheugenproblemen in PHP's fatal-error-backtrace-afhandeling en in OPcache, volgens het onderzoek van Wiz en Calif. Het gepubliceerde werk toont niet-geauthenticeerde remote code execution aan via deze kwetsbaarheid. De problemen ondersteunen verschillende aangetoonde exploitketens en moeten niet gelezen worden als één enkele reeks stappen die een aanvaller op volgorde moet uitvoeren.

In het backtrace-pad kan een fatal error, zoals een verzoek dat memory_limit overschrijdt, een verwijzing achterlaten naar geheugen dat al is vrijgegeven, die een latere operatie dan gebruikt; op PHP 8.5 is de functie fatal_error_backtraces specifiek betrokken. Afzonderlijk kan een type confusion in OPcache ertoe leiden dat de engine verkeerd interpreteert wat een geheugengebied voorstelt. Van elk is aangetoond dat het code-uitvoering ondersteunt.

De twee CVE's zijn verschillend, en het onderzoek toont niet-geauthenticeerde RCE aan via elk afzonderlijk. PHP2Shell combineert de kwetsbaarheden, maar verdedigers moeten niet aannemen dat beide samen moeten worden uitgebuit, of dat het blokkeren van één aangetoond pad een kwetsbare runtime veilig maakt. De publieke beschrijvingen gaan niet tot stapsgewijze wapenisatie, en deze analyse evenmin.

Hoe de twee CVE-beschrijvingen samenhangen

De twee CVE's worden in twee detailniveaus beschreven die in omloop zijn, en de kloof daartussen veroorzaakt verwarring. PHP's advisory betitelt ze naar brede categorie: CVE-2026-109618 is "RCE via OOM corruption" en CVE-2026-109619 is "RCE via stale global state". Het onderzoek van Wiz en Calif beschrijft de onderliggende primitieven: de use-after-free in de upload-progress-unserializer met geheugenlekkage, en de use-after-free in de fatal-error-backtrace met OPcache-type-confusion.

Dit zijn geen concurrerende verslagen van verschillende bugs; ze beschrijven dezelfde kwetsbaarheden op verschillende resoluties. Elk CVE bundelt bovendien meer dan één verwant primitief: CVE-2026-109618 dekt de upload-progress-use-after-free en zijn geheugenlekkage, en CVE-2026-109619 dekt verwante problemen in de fatal-error-backtrace-afhandeling en in OPcache. Die primitieven ondersteunen verschillende aangetoonde exploitketens en zijn geen enkele reeks die elke aanvaller moet uitvoeren, wat van belang is omdat het blokkeren van één pad het risico van het CVE niet wegneemt. Gebruik voor herstel de PHP-advisory om getroffen en herstelde versies vast te stellen; raadpleeg voor de werking het oorspronkelijke onderzoek. Een korte CVE-samenvatting moet niet gelezen worden als een volledig verslag van de exploitatie.

Getroffen en herstelde versies

Het kwetsbare codepad bestaat sinds PHP 5.4.0, uitgebracht in 2012, en is bereikbaar in standaardconfiguraties over elke belangrijke manier om PHP uit te serveren, zonder dat niet-standaard instellingen vereist zijn. Elke op het internet gerichte installatie op een getroffen versie moet als potentieel blootgesteld worden behandeld totdat de patchstatus en configuratie ervan zijn geverifieerd.

PHP bracht fixes uit in 8.5.12, 8.4.27, 8.3.36 en 8.2.35. Broncode-backports bestaan voor 7.4, 8.0 en 8.1, die geen officiële updates meer ontvangen, dus daar is het ophalen van de backport of upgraden vereist. De branches 5.4 tot en met 7.3 hebben het einde van hun levensduur bereikt en worden niet hersteld. PHP 8.2 zelf bereikt het einde van zijn levensduur op 31 december 2026, dus 8.2.35 is een kortstondige positie, geen duurzame.

Eén operationele valkuil: distributie-onderhouders kunnen de fix backporten zonder het upstream-versienummer over te nemen. Verifieer de status van een pakket aan de hand van de advisory en changelog van de distributeur, met gebruik van beide CVE-ID's, in plaats van alleen op de upstream-versiestring te vertrouwen. Hetzelfde geldt voor container-images en gebundelde software: een gepatchte host bewijst niet dat een apart verpakte runtime gepatcht is.

Hoe de gecoördineerde openbaarmaking uiteenviel

Het reactievenster was kort omdat het embargo in het openbaar uiteenviel, en dit is het deel dat de reactie "WTF is er gebeurd" opriep.

Het onderzoek was wekenlang stil geweest. Calif meldde PHP in augustus een eerste fout, en Wiz Research meldde PHP de kwetsbaarheden op 24 augustus, waarbij het securityteam van OpenAI in de gecoördineerde inspanning wordt genoemd. De fix was moeilijk te bouwen, en de gecoördineerde openbaarmaking was gepland voor 22 oktober.

Toen brak het embargo in fasen. Op 20 oktober begonnen de twee CVE-identificatoren op forums en sociale media te circuleren met onjuiste ernst en timing eraan verbonden; op dat moment waren de identificatoren openbaar, niet de technische details. Kort daarna publiceerde Calif per ongeluk een video die een werkende proof-of-concept bevatte, wat technisch materiaal wel blootlegde en bijdroeg aan snellere onafhankelijke exploitontwikkeling. Ook mitigatieadvies dat de PHP Foundation privé had gedeeld met organisaties voor kritieke infrastructuur kan zijn uitgelekt. Nu het embargo zichtbaar uiteenviel, haalde PHP zijn release een dag naar voren, naar 21 oktober.

De derde blootstelling werd een publiek geschil, en het is de moeite waard beide posities helder te stellen. De PHP Foundation karakteriseerde Chainguards publicatie van gepatchte container-images, om 07:41 UTC op 21 oktober, ongeveer zes uur vóór de gecoördineerde release, als het breken van het embargo: "Elke aanvaller kon nu de fix in binaire vorm bestuderen terwijl elke andere PHP-gebruiker nog op de release wachtte", en voegde eraan toe dat het "wekenlang werk van vele partijen aan een gecoördineerde openbaarmaking negeerde". Chainguards CEO, Dan Lorenc, antwoordde dat het bedrijf niets had laten uitlekken, de tijdlijn niet betwistte, dezelfde kwetsbaarheden onafhankelijk had ontdekt met eigen AI-tooling, en had geholpen de patches te testen. De twee claims sluiten elkaar niet uit, en de PHP Foundation heeft het verslag van de onafhankelijke ontdekking publiekelijk niet beantwoord.

Het mechanisme achter de klacht van de Foundation is een terugkerend leveringsketenprobleem dat de moeite waard is te begrijpen. Wanneer een gepatcht binary vóór de advisory wordt uitgebracht, kan iedereen het vergelijken met de vorige build, de gewijzigde code lokaliseren en terugwerken naar de fout. Patch-diffing kan een fix veranderen in een kaart van de bug. Het publiceren van een gepatcht binary vóór een advisory bewijst op zichzelf niet dat de publicist de bron van het lek was of dat elke aanvaller dat pad gebruikte, maar het kan de drempel verlagen voor wie dat wel doet.

Exploitatie valt niet netjes samen met het patch-tijdstempel. Securityleveranciers meldden exploitatiepogingen voordat de patches landden, waarbij sommigen activiteit dateerden op 17 oktober, en Cloudflare observeerde aanvalsverkeer en zei dat sommige aanvallers payloads aanpasten om zijn WAF-regels te omzeilen. Op 21 oktober had Cloudflare om 03:02 UTC regels ingeschakeld, bracht PHP de fixes uit rond 14:00 UTC, en ging watchTowr binnen enkele minuten na de release over van het melden van geen waargenomen exploitatie naar actieve pogingen tegen beide CVE's. Dit zijn verschillende waarnemingen, niet noodzakelijk één campagne, en vroege samples, aangetoonde ketens, exploitatiepogingen en bevestigde compromittering zijn niet hetzelfde. Ten tijde van de eerste berichtgeving op 21 oktober was er geen bevestigde inbreuk gepubliceerd en stond geen van beide CVE's in CISA's catalogus van bekende uitgebuite kwetsbaarheden (Known Exploited Vulnerabilities), hoewel meerdere organisaties, waaronder BambooHR en enkele Nederlandse overheids- en onderwijssites, diensten uit voorzorg offline haalden. Behandel die status als tijdgebonden en controleer hem opnieuw voordat u handelt.

De praktische les is dat het tijdstempel van de patch-release niet het moment is waarop de dreiging begon. Publiek onderzoek en exploittooling verminderden het werk dat een aanvaller anders had gehad om de aangetoonde aanvallen te reproduceren aanzienlijk. Dat maakte niet elke deployment even exploiteerbaar, maar het verkortte het pad van openbaarmaking naar praktische pogingen, en het betekent dat elk systeem dat vooraf blootgesteld was onderzoek nodig heeft, niet alleen een patch.

Wat een ongepatchte server te wachten staat

Voor een ongepatchte, op het internet gerichte server volgen er twee soorten uitkomsten, en de eerste heeft geen code-uitvoering nodig. Het geheugenlekkagepad kan vrijgegeven workergeheugen in het antwoord teruggeven en zo geheimen blootleggen uit andere verzoeken die dezelfde worker afhandelde, zoals sessietokens en API-sleutels. Het laat mogelijk geen duidelijke fout op applicatieniveau achter, dus responders moeten webserver- en proxytelemetrie naast PHP-logs en procesactiviteit onderzoeken in plaats van een duidelijke logregel te verwachten.

De tweede uitkomst is volledige remote code execution, en van daaruit volgt de bekende keten: een webshell, diefstal van inloggegevens, laterale beweging, data-exfiltratie of het klaarzetten voor ransomware. Het probleem van de oude versies maakt dit op bepaalde plaatsen hardnekkig. End-of-life-branches zullen deze fix nooit ontvangen, en PHP dat in een appliance, een embedded apparaat of een leverancierproduct is gebundeld heeft mogelijk zonder de leverancier helemaal geen patch, wat inventarisatie en leverancierscoördinatie het eigenlijke werk maakt, geen bijzaak.

Detectie en threat hunting

Omdat de trigger het parsen van verzoeken is en het effect geheugencorruptie, groeperen de waarneembare signalen zich rond misvormde uploads en instabiele workers. Onderzoek voor een server die vóór het patchen blootgesteld kan zijn geweest:

  • Ongebruikelijke multipart/form-data-verzoeken, vooral die kort gevolgd worden door memory-limit-fouten in de PHP-logs.

  • Herhaalde HTTP 500-antwoorden, die de fatal errors begeleiden waarvan de eerste bug afhankelijk is.

  • Onverwacht grote of misvormde PHPSESSID-waarden in serverantwoorden. Hier komt het geheugenlekkagepad aan de oppervlakte, het is dus een artefact van het uitgaande antwoord, geen te grote cookie die van de client binnenkomt.

  • Onverklaarde herstarts van PHP-workers, die kunnen volgen op een mislukte of gedeeltelijke exploitatiepoging.

Geen van deze is op zichzelf sluitend. Afgemeten aan de normale baseline van de applicatie is een cluster van te grote multipart-verzoeken, memory-limit-fatals en worker-fluctuatie tegen een ongepatchte server een onderzoeksaanwijzing met hoge prioriteit. Een succesvolle geheugencorruptie-exploit produceert mogelijk niet dezelfde symptomen als een gewone fout, corroboreer dus over webserver-, proxy- en PHP-logs plus procestelemetrie heen in plaats van op één patroon te vertrouwen.

Reageren op PHP2Shell: volgorde van prioriteiten

Handel in een blootgestelde omgeving in deze volgorde:

  1. Identificeren en patchen. Vind elke op het internet gerichte PHP-runtime, inclusief die gebundeld in containers, appliances en producten van derden, en pas de door de leverancier herstelde release toe. Het bijwerken van het applicatieframework herstelt de runtime niet.

  2. Blootstelling verminderen tijdens het patchen. Als een onmiddellijke update onmogelijk is, beperk dan de publieke toegang of isoleer de getroffen dienst. Behandel WAF-regels en PHP-configuratiewijzigingen als tijdelijke risicovermindering, niet als volledige mitigaties.

  3. Mogelijke compromittering onderzoeken. Bekijk web-, proxy- en PHP-logs, endpoint-telemetrie, onverwachte processen, gewijzigde bestanden en verdachte uitgaande verbindingen. Patchen stelt niet vast of een aanvaller vooraf toegang tot het systeem had.

  4. Het resultaat verifiëren. Herstart de relevante diensten en workers, bevestig dat de draaiende runtime een herstelde build is, en controleer leverancier-advisories waar fixes zijn gebackport.

Tijdelijke mitigaties en hun grenzen

Het PHP-project is er duidelijk over dat er geen volledige mitigaties zijn en dat bijwerken de enige veilige keuze is. De onderstaande maatregelen verminderen de blootstelling aan specifieke paden; ze maken een ongepatchte runtime niet veilig. Herstart de getroffen PHP-workers en relevante serveerprocessen na het toepassen van configuratiewijzigingen, zoals uw deployment vereist. Verifieer de actuele aanbevelingen in het security-release-bericht van de PHP Foundation in plaats van op een samenvatting te vertrouwen.

Voor CVE-2026-109618 beveelt PHP aan memory_limit op -1 te zetten via configuratie die applicaties niet kunnen overschrijven, zoals de FPM-pool of de Apache-config, wat de bestuurbare memory-limit-trigger wegneemt. Dit is geen achteloze wijziging: het verwijdert PHP's geheugenplafond per verzoek, dus een enkel verzoek kan aanzienlijk systeemgeheugen verbruiken, en externe verzoeklimieten alleen garanderen niet dat het kwetsbare allocatiepad niet bereikt kan worden. Verzacht het denial-of-service-risico door post_max_size laag en upload_max_filesize daaronder te houden, verzoekgroottelimieten op de proxy af te dwingen, en een container- of cgroup-geheugengrens rond de worker te plaatsen die hem kan beëindigen. Vervang dit niet door RLIMIT_AS of RLIMIT_DATA, die de allocatiefouten die de bug bereiken opnieuw creëren.

Voor CVE-2026-109619 beveelt PHP aan session upload progress uit te schakelen om bevestigde sessiegerelateerde exploitpaden te blokkeren. Zet session.upload_progress.enabled op 0 op pool- of serverniveau zodat het vóór het parsen van het verzoek van kracht wordt, en herstart dan de workers; het instellen via ini_set() of een .user.ini komt te laat om te helpen. Zet op PHP 8.5 ook fatal_error_backtraces op 0 om het bevestigde fatal-backtrace-pad te blokkeren. Deze instellingen adresseren specifieke paden, niet elke mogelijke variant, en maken een ongepatchte installatie niet veilig.

Een opmerking voor na het patchen, volgens de berichtgeving over de fix: hij introduceert een hard geheugenlimiet dat een proces kan beëindigen zonder de PHP-shutdown-handlers uit te voeren. Als uw logica afhankelijk is van shutdown-functies of nette afhandeling van geheugenuitputting, bevestig dan het gepatchte gedrag aan de hand van de PHP-release-notes voordat u aanneemt dat het overeenkomt met het oude.

Wat dit betekent voor inventarisatie en reactie

PHP2Shell is operationeel een inventarisatieprobleem voordat het een patch-probleem is. Op 21 oktober was de eerste vraag voor de meeste teams niet hoe de bug werkt. Die luidde: waar draaien we PHP, welke versies, en welke producten, diensten en klanten zijn blootgesteld.

Een actuele, voldoende volledige software bill of materials helpt dit te beantwoorden door de producten, builds en images te identificeren die de getroffen PHP-runtime bevatten. Daar verstopt PHP zich graag: gebundeld in appliances en embedded webinterfaces, ingebakken in container-base-images, binnengehaald als afhankelijkheid van een groter product, plaatsen die een scan op manifestniveau graag over het hoofd ziet. Een SBOM is slechts zo goed als zijn dekking. Hij wijst u op de assets die het controleren waard zijn; hij bevestigt op zichzelf niet de exacte versie die in productie draait en bewijst niet dat een bepaalde host exploiteerbaar is. Wanneer SBOM's actueel zijn en de relevante runtime vastleggen, veranderen ze een dagenlange telling in een veel kortere lijst van te verifiëren assets.

Interlynk is voor dit patroon gebouwd. lynkctl genereert build-bewuste SBOM's die de runtimes en componenten vastleggen die in firmware, appliances en images zijn ingebed, ver voorbij de top-level-afhankelijkheden. Het Interlynk-platform neemt die SBOM's op, beoordeelt componenten op risico aan de hand van kwetsbaarheidsdata zodat een getroffen PHP-versie automatisch naar boven komt, beheert VEX-uitspraken voor de producten die u hebt beoordeeld, en stelt stakeholders op de hoogte wanneer een nieuwe openbaarmaking de blootstelling verandert van iets dat al is uitgeleverd. Wanneer de volgende CVE op runtimeniveau landt, staat de inventaris al klaar.

De kern van de zaak

PHP2Shell laat zien hoe een geheugenfout in een breed ingezette runtime de beveiliging kan ondermijnen van applicaties die niets fout deden. Twee geheugenfouten die ruim een decennium in PHP aanwezig waren, werden ontwikkeld tot niet-geauthenticeerde remote code execution, en een gecoördineerde openbaarmaking die uiteenviel liet verdedigers vrijwel geen respijt.

Patch de runtime naar 8.5.12, 8.4.27, 8.3.36 of 8.2.35, herstart uw workers, verifieer op CVE-ID, en onderzoek alles wat vóór de patch blootgesteld was. Maak daarna de inventarisatievraag vooraf beantwoordbaar, want wanneer een kwetsbaarheid leeft in een runtime die over duizenden producten wordt gedeeld, is weten waar die runtime is ingezet onderdeel van de incident response, niet van het opruimen achteraf.

Veelgestelde vragen`

Wat is PHP2Shell? PHP2Shell is de naam voor twee kritieke geheugenkwetsbaarheden in de PHP-engine, CVE-2026-109618 en CVE-2026-109619, elk beoordeeld met CVSS v4.0 9,2, samen met de publieke tooling die ze uitbuit. Beide maken niet-geauthenticeerde remote code execution mogelijk.

Moeten beide CVE's geketend worden om RCE te bereiken? Nee. Het gepubliceerde onderzoek toont niet-geauthenticeerde remote code execution aan via elke kwetsbaarheid afzonderlijk, met verschillende exploitketens. CVE-2026-109618 lekt daarnaast PHP-workergeheugen. PHP2Shell combineert ze, maar ze hoeven niet samen te worden gebruikt.

Welke PHP-versies zijn getroffen en hersteld? De kwetsbare code reikt terug tot PHP 5.4.0. Fixes zitten in 8.5.12, 8.4.27, 8.3.36 en 8.2.35, met broncode-backports voor 7.4, 8.0 en 8.1. De branches 5.4 tot en met 7.3 hebben het einde van hun levensduur bereikt en zijn niet hersteld.

Wordt PHP2Shell in het wild uitgebuit? Securityleveranciers meldden exploitatiepogingen rond de openbaarmaking, waaronder activiteit vóór de patch en pogingen tegen beide CVE's na de release, volgens watchTowr. Bevestigde compromittering is een aparte vraag; controleer actuele advisories en CISA's KEV-catalogus voordat u handelt.

Lost het uitschakelen van bestandsuploads of het blokkeren van multipart-verzoeken het op? Nee. Die stappen verminderen de blootstelling aan de aangetoonde trigger, maar maken een ongepatchte runtime niet veilig. Bijwerken is de enige volledige fix.

Hoe vind ik elke getroffen PHP-runtime? Inventariseer elke plaats waar PHP draait, inclusief gebundelde en embedded instanties, met een actuele SBOM waar beschikbaar, verifieer dan de versie in productie en patch. PHP wordt vaak uitgeleverd in appliances en container-images die een top-level-afhankelijkheidslijst niet toont.

Bronnen

Over Interlynk. Interlynk helpt teams SBOM's te genereren, beheren en operationaliseren over de hele software-leveringsketen. lynkctl produceert build-bewuste SBOM's voor embedded- en firmware-software, en legt gebundelde runtimes en vendored, statische en SDK-componenten vast met precieze identificatoren. Het Interlynk-platform neemt SBOM's en CBOM's op, beoordeelt ze op volledigheid en kwaliteit, beoordeelt componenten op risico aan de hand van kwetsbaarheidsdata, beheert VEX-uitspraken en stelt teams op de hoogte wanneer de blootstelling verandert.

Een demo boeken · Gratis starten

Dit artikel is informatief en vormt geen beveiligings- of juridisch advies. PHP2Shell is een zich snel ontwikkelend incident; bevestig actuele advisories, getroffen versies, herstelde releases en exploitatiestatus aan de hand van de primaire bronnen voordat u handelt.