Nach Angaben von PHP ist die Lücke über die cURL-Erweiterung erreichbar, wenn diese HTTP-Antworten automatisch entpackt. cURL hat dieses Verhalten standardmäßig abgeschaltet, Anwendungen und HTTP-Client-Bibliotheken können es jedoch aktivieren. In PHP-Code geschieht das über die Option CURLOPT_ENCODING; ein leerer Wert akzeptiert jedes von cURL unterstützte Format. Ein Angriff käme als präparierte komprimierte Antwort eines Servers, den die PHP-Anwendung kontaktiert.

Die neuen Pakete verwenden denselben PHP-Quellcode, die PHP2Shell-Korrekturen bleiben also erhalten; zusätzlich enthalten sie nun Brotli 1.2.1, die korrigierte Fassung. Zu jedem Paket veröffentlicht PHP eine Software-Stückliste (SBOM) mit den enthaltenen Komponenten. Für die x64-Builds der Variante Non Thread Safe aller vier Versionen aus der vergangenen Woche weisen diese Listen Brotli 1.2.0 aus — eine der betroffenen Versionen.

PHP empfiehlt Windows-Nutzern, die neuen Builds von der Downloadseite zu installieren. Da die PHP-Version selbst unverändert bleibt, zeigt php -v vorher wie nachher dieselbe Nummer an. Erkennbar ist der neue Build an der angehängten -1 im Dateinamen, etwa php-8.5.12-1-nts-Win32-vs17-x64.zip, sowie am SHA-256-Hash auf der Downloadseite.

Die PHP-HTTP-Client-Bibliothek Guzzle setzt den leeren Wert für über cURL versendete Anfragen standardmäßig — so der Code der Releases 7.16.1 und 8.3.1. Auf dieser Grundlage und nach der Beschreibung von PHP erfüllt eine Anwendung, die Guzzles Standardeinstellungen beibehält, die Bedingung, unter der die Lücke in den Windows-Builds der vergangenen Woche erreichbar ist.

Google stuft die Schwachstelle mit 9,2 von 10 Punkten nach CVSS 4.0 als kritisch ein, Red Hat mit 8,1 nach CVSS 3.1 als „Important". Forscher von Imperva führten über die Lücke Code auf einem offiziellen Node.js-Build aus; dafür brauchten sie mehrere Anläufe. Der Hinweis von PHP erwähnt keine Angriffe. Die Bewertung der CISA vom 23. Oktober verzeichnete keine Ausnutzung, und die Lücke stand zum Stand jenes Tages nicht im Katalog bekannter ausgenutzter Schwachstellen (KEV).

Entdeckt wurde der Fehler von Forschern bei OpenAI. Google behob ihn bei der Erstveröffentlichung am 21. Oktober in Brotli 1.2.1, 1.1.1 und 1.0.10. Auch Node.js, Bun und weitere Software, die eine eigene Brotli-Kopie mitliefert, haben Korrekturen veröffentlicht.

Für Systeme, die noch nicht aktualisiert werden können, nennt der PHP-Hinweis keinen Workaround. OpenAI rät, die automatische Brotli-Dekompression in HTTP-Clients bis zur Installation des Updates abzuschalten, und warnt, dass das Entfernen von „br" — Brotlis Kennung im Accept-Encoding-Header — „allein einen Server nicht davon abhält, es dennoch zu senden". Praktisch bedeutet das in PHP, CURLOPT_ENCODING nicht zu setzen, da cURL Antworten ohne diese Option nicht entpackt. In Guzzle heißt es, die Anfrageoption decode_content auf false zu setzen; das unterbindet jede automatische Dekodierung, sodass auch gzip-Antworten komprimiert eintreffen.