CVE-2026-109618 · GHSA-w8hw-w9fx-j79w

CVE-2026-109618: RCE via out-of-memory-corruptie (OOM)

De out-of-memory-helft van PHP2Shell: een aanvaller duwt PHP tijdens het parsen van een request in een out-of-memory-fout, waardoor half geïnitialiseerde data achterblijft die PHP later vertrouwt. Resultaat: code-uitvoering zonder authenticatie als de webservergebruiker.

Laatst gecontroleerd 2026-10-22

Ernst

Critical · CVSS 4.0 9.2

Authenticatie

Niet nodig

Opgelost in

8.5.12 · 8.4.27 · 8.3.36 · 8.2.35

Onderdeel van

PHP2Shell (met CVE-2026-109619)

Samenvatting

PHP breekt de huidige context af met longjmp() als het geheugen op is. Gebeurt dat terwijl het requestgeheugen maar half is geïnitialiseerd, dan leest of vertakt de request-shutdown later op ongeldige data. Verschillende multipart-parsepaden kunnen PHP binnen normale limieten in een OOM duwen, nog voordat er applicatiecode draait.

Impact: Code-uitvoering zonder authenticatie als de PHP-webworker-gebruiker. Gedemonstreerd: Pre-auth RCE op WordPress, Drupal en Joomla (mod_php, standaardlimieten).

Oorzaak

PHP handelt een tekort aan geheugen af door een fatale fout te geven en met longjmp() uit het huidige codepad te springen. Alles wat op dat moment half gebouwd was, blijft half gebouwd.

Was requestgeheugen al toegewezen maar nog niet geïnitialiseerd, dan leest of vertakt de request-shutdown later op die ongeldige data. Verschillende parsepaden voor multipart (bestandsuploadformulieren) kunnen PHP binnen normale limieten in een out-of-memory brengen — daarom hoeft er geen applicatiecode bij betrokken te zijn.

Door PHP genoemde zwakheden: use-after-free (CWE-416), onjuiste afhandeling van uitzonderlijke situaties (CWE-755), toegang tot een niet-geïnitialiseerde pointer (CWE-824) en verwante CWE’s rond state-afhandeling.

Bekende aanvalspaden

Use-after-free in de upload-progress-unserializer

De upload-progress-afhandeling decodeert sessiedata voordat de request-initialisatie klaar is. Een mislukte allocatie geeft de request-heap vrij maar laat de globale boekhouding van de unserializer staan; de volgende request op de worker behandelt door de aanvaller hergebruikt geheugen als actieve state.

Geheugenlek op afstand via PHPSESSID

Na een OOM-afbreking blijft een sessie-ID-pointer los hangen. Een latere multipart-request URL-codeert het geheugen waar die nu naar wijst in de PHPSESSID-cookie van het antwoord — zelfs als de app nooit een sessie start.

De PHP-advisory en het artikel van Wiz groeperen sommige paden anders. De patch lost het gedeelde foutpatroon op, dus de indeling verandert niets aan wat je moet doen.

Kwetsbare en gepatchte versies

BranchKwetsbaarOpgelost in
8.5< 8.5.128.5.12
8.4< 8.4.278.4.27
8.3< 8.3.368.3.36
8.2< 8.2.358.2.35
8.1 · 8.0 · 7.4alleAlleen source-backport
5.4 – 7.3alleGeen fix

Blootstelling per serveropstelling

Opstelling…109618Toelichting
Apache + mod_phpRCE bevestigdBeide CVE’s bevestigd tot RCE met standaardlimieten. Opstelling met het hoogste risico.
PHP-FPM (nginx, Apache, Caddy…)VatbaarRCE via de sessielevenscyclus bevestigd op FPM. Het OOM-pad is bevestigd via codepaden op applicatieniveau; er is geen generieke FPM-exploit gepubliceerd.
FrankenPHP / LiteSpeed LSAPIWaarschijnlijkDe advisory noemt ze waarschijnlijk vatbaar. Langlevende workers maken achtergebleven state tussen requests juist relevanter.
CLI (cron, queue-workers, artisan)Niet behandeldNiet behandeld in de advisories en bij normaal gebruik niet bereikbaar via HTTP-requests. Upgrade toch — het is hetzelfde pakket.

CVSS 4.0-score: 9.2

Vector: CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

MetriekBetekenis hierEffect

AV:N

Attack Vector: Network

Bereikbaar via internet met gewone HTTP-requests.Verhoogt score

AC:H

Attack Complexity: High

De exploit moet worden afgestemd op de geheugenindeling van elk doelwit; het is geen kant-en-klare request.Verlaagt score

AT:P

Attack Requirements: Present

Succes hangt af van de inrichting (SAPI, limieten, hergebruik van workers) waar de aanvaller geen invloed op heeft.Verlaagt score

PR:N

Privileges Required: None

Geen account, geen login.Verhoogt score

UI:N

User Interaction: None

Niemand hoeft ergens op te klikken.Verhoogt score

VC:H / VI:H / VA:H

Impact op kwetsbaar systeem: High

Volledig verlies van vertrouwelijkheid, integriteit en beschikbaarheid op de PHP-server.Verhoogt score

SC:N / SI:N / SA:N

Impact op vervolgsystemen: None

De score telt doorstoten naar andere systemen niet mee — in de praktijk maken gestolen inloggegevens dat vaak wel mogelijk.Verlaagt score

Oplossing en mitigaties

De oplossing is een PHP-update

Installeer een gepatchte release en herstart elke PHP-worker. Patchgids →

Kun je niet direct updaten, dan noemt php.net deze gedeeltelijke maatregelen:

  • memory_limit = -1 zo ingesteld dat applicaties het niet kunnen overschrijven (php_admin_value in de FPM-pool of Apache-config), gecombineerd met een container- of cgroup-geheugenlimiet.
  • Lage post_max_size: 8M zonder bestandsuploads, 32M met uploads; houd upload_max_filesize daaronder.
  • Dwing limieten af op de webserver of proxy: gedecodeerde grootte, aantal velden, aantal multipart-delen, aantal headers, nestingdiepte.
  • Gebruik geen RLIMIT_AS / RLIMIT_DATA (ulimit -v, systemd LimitAS=) — die activeren dezelfde kwetsbare allocatiefout.

Referenties

Vragen

Is CVE-2026-109618 te misbruiken zonder in te loggen?+

Ja. Het wordt bereikt terwijl PHP de binnenkomende request parst, vóór enige applicatiecode, routing of authenticatie.

Lost het uitschakelen van session.upload_progress CVE-2026-109618 op?+

Nee. Die instelling richt zich op bevestigde paden van CVE-2026-109619. De primaire configuratiemitigatie voor CVE-2026-109618 is een administratief ingestelde memory_limit = -1 samen met een cgroup-geheugenlimiet, en zelfs die is niet volledig.

Welke versies lossen CVE-2026-109618 op?+

PHP 8.5.12, 8.4.27, 8.3.36 en 8.2.35, uitgebracht op 21 oktober 2026. Er zijn source-backports voor 7.4, 8.0 en 8.1; distributies leveren hun eigen gepatchte pakketten.

Is PHP-FPM kwetsbaar voor CVE-2026-109618?+

De advisory beoordeelt FPM op basis van broncodeanalyse als vatbaar, en de PHP Foundation zegt dat RCE op FPM is bevestigd via codepaden op applicatieniveau. Het meest directe gedemonstreerde geval is Apache met mod_php bij standaardlimieten.

Gerelateerd