InfraFenceInfraFence

Live Security Operations

Loslegen

CVE-2024-4577: Argument-Injection in PHP-CGI, prüfen und beheben

Zuletzt aktualisiert:

PHP-CGI unter Windows wandelt bei manchen Codepages (Japanisch, Chinesisch und anderen) einen weichen Trennstrich (%AD) in der Befehlszeile in einen Bindestrich um. Über Apache erreicht der Query-String PHP-CGI auf der Befehlszeile, sodass eine URL wie /?%ADd+allow_url_include%3d1 zu einer PHP-Option wird und zur Codeausführung führt.

Die Lücke hängt an einer Zeichenumwandlung von Windows: PHP unter Linux ist nicht betroffen. Scanner schicken dieselben Anfragen an jeden Server, Linux eingeschlossen, deshalb siehst du sie in deinen Logs.

Auf einen Blick

CVE
CVE-2024-4577
Software
PHP (PHP-CGI unter Windows)
Betroffene Versionen
8.3 vor 8.3.8, 8.2 vor 8.2.20, 8.1 vor 8.1.29 und älter, unter Windows
Behoben in
8.1.29, 8.2.20, 8.3.8
CVSS-Score
9.8 Kritisch (NVD, CVSS 3.1) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CISA Known Exploited Vulnerabilities
Ja, aufgenommen am 12. Juni 2024
Von der NVD veröffentlicht
9. Juni 2024
Virtueller Patch von InfraFence
vp-cve-2024-4577 (ModSecurity id 9920003)

Was betroffen ist

PHP 8.3 vor 8.3.8, 8.2 vor 8.2.20, 8.1 vor 8.1.29 und ältere Versionen, unter Windows, wenn PHP als CGI läuft (Apaches Action auf php-cgi.exe oder die PHP-Binärdatei aus einem CGI-Ordner erreichbar). XAMPP für Windows hat PHP-CGI standardmäßig freigegeben. PHP als Apache-Modul, als FastCGI oder PHP-FPM ist nicht betroffen.

Prüfen, ob ein Server verwundbar ist

Unter Linux gibt es für diese CVE nichts zu beheben; halte PHP für die anderen auf einem unterstützten, aktuellen Release. Du kannst trotzdem sehen, wer es versucht:

Apache-Access-Logs
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20

Prüfe auf einem Windows-Server die PHP-Version und ob Apache PHP als CGI ausführt:

Windows-Eingabeaufforderung
php -v

Beheben (Windows)

  1. Aktualisiere PHP auf 8.3.8, 8.2.20 oder 8.1.29 oder neuer. Versionen ohne Support bekamen keinen Fix: Wechsle auf eine unterstützte.
  2. Noch besser: Betreibe PHP nicht mehr als CGI, sondern als Apache-Modul, FastCGI oder PHP-FPM.
  3. Wenn du unter XAMPP PHP-CGI nicht brauchst, kommentiere die Zeile ScriptAlias /php-cgi/ in apache/conf/extra/httpd-xampp.conf aus und starte Apache neu.

Bis du aktualisieren kannst, haben die Forscher, die die Lücke gefunden haben, diese vorübergehende Apache-Regel für die betroffenen Locales veröffentlicht:

Apache-Konfiguration
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

Wie InfraFence sie blockiert

Der virtuelle Patch für CVE-2024-4577 ist eine ModSecurity-Regel auf dem Query-String: Die Regel blockiert einen weichen Trennstrich (%AD oder das rohe Byte), gefolgt von einem Buchstaben, am Anfang des Query-Strings oder nach einem + oder einem kodierten Leerzeichen, so wie der Angriff eine Option übergibt.

Hinweis: Der Agent von InfraFence läuft unter Linux, wo PHP für diese CVE nicht verwundbar ist. Auf einem Linux-Server blockiert der Patch die Versuche und meldet sie, sodass du die Scans siehst; er behebt nichts, was kaputt war.

Wie der Patch angewendet wird

  1. Der Agent notiert, welche SSH-Ports und Websites antworten.
  2. Er schreibt die Regel (ModSecurity-ID 9920003) zwischen seine eigenen Markierungen in seiner ModSecurity-Datei, führt apachectl configtest aus und lädt Apache sanft neu. Schlägt der Test fehl, wird die vorherige Datei zurückgespielt.
  3. Er prüft, ob SSH und die Websites weiterhin antworten, und entfernt den Patch, wenn nicht.
  4. Er prüft mit einer harmlosen lokalen Testanfrage, ob ModSecurity mit der Regel wirklich blockiert. Ein ModSecurity im Modus DetectionOnly protokolliert nur: Der Patch wird dann entfernt und als unwirksam gemeldet, nie als angewendet.

Jede Anfrage, die der Patch blockiert, wird mit CVE-2024-4577 gemeldet (Agent 1.0.37 oder neuer): Du siehst die Versuche in der Aktivität des Servers und auf der Seite Ausnutzung im Dashboard und weißt so, dass die Schwachstelle gegen dich ausprobiert wird.

Achtung: Ein virtueller Patch blockiert die bekannte Form des Angriffs bei den Anfragen, die auf diesem Server über Apache laufen. Er ersetzt das Update nicht: Installiere die behobene Version und entferne den Patch dann unter Aktivität mit Rückgängig, wenn du ihn nicht mehr brauchst.

Virtuelle Patches brauchen Apache mit ModSecurity, die Einstellung Änderungen an der Webserver-Konfiguration erlauben und kein Hosting-Panel oder Konfigurationsmanagement-Tool, das den Webserver verwaltet; sie gehören zum Plan Pro und zu AutoMode. Ein Mensch wendet sie aus der KI-Analyse an, oder AutoMode tut es. Siehe Virtuelle Patches.

Quellen

Die Fakten auf dieser Seite stammen aus diesen Quellen; prüfe sie auf Änderungen.

Kostenlos auf 1 Server testen

Starter ist für einen Server kostenlos, mit vollem Schutz und automatischen Sperren. Ohne Kreditkarte.

Installiere den Agenten als root, mit deinem Token anstelle von <TOKEN>:

curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>

Das Token erstellst du im Dashboard unter Server › Server hinzufügen.