PHP-fpm-Schwachstelle, die eine Remote-Codeausführung auf dem Server ermöglicht

Verfügbar Korrekturversionen von PHP 7.3.11, 7.1.33 und 7.2.24, in denen eliminiert kritisch Verwundbarkeit (CVE-2019-11043) in der PHP-FPM-Erweiterung (FastCGI Process Manager), mit der Sie Ihren Code remote auf dem System ausführen können. Um Server anzugreifen, die PHP-FPM in Verbindung mit Nginx zum Ausführen von PHP-Skripten verwenden, ist es bereits öffentlich verfügbar Arbeit ausbeuten.

Der Angriff ist in Nginx-Konfigurationen möglich, in denen die Weiterleitung an PHP-FPM durch die Trennung von Teilen der URL mithilfe von „fastcgi_split_path_info“ und der Definition der Umgebungsvariablen PATH_INFO erfolgt, ohne jedoch zuvor die Existenz der Datei mithilfe von „try_files $fastcgi_script_name“ zu überprüfen. Direktive oder die „if (!-f $) document_root$fastcgi_script_name)“. Das Problem ist auch ist manifestiert in den angebotenen Einstellungen für die NextCloud-Plattform. Zum Beispiel Konfigurationen mit Strukturen wie:

Standort ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^ (. +? \. php) (/.*) $;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}

Sie können die Lösung des Problems in den Verteilungspaketen auf diesen Seiten verfolgen: Debian, RHEL, Ubuntu, SUSE/openSUSE, FreeBSD, Bogen, Fedora. Um dieses Problem zu umgehen, können Sie nach der Zeile „fastcgi_split_path_info“ eine Prüfung auf das Vorhandensein der angeforderten PHP-Datei hinzufügen:

try_files $fastcgi_script_name =404;

Das Problem wird durch einen Fehler beim Bearbeiten von Zeigern in einer Datei verursacht sapi/fpm/fpm/fpm_main.c. Bei der Zuweisung eines Zeigers wird davon ausgegangen, dass der Wert der Umgebungsvariablen PATH_INFO ein Präfix enthalten muss, das mit dem Pfad zum PHP-Skript übereinstimmt.
Wenn die fastcgi_split_path_info-Direktive die Aufteilung des Skriptpfads mithilfe eines regulären Ausdrucks angibt, der Zeilenumbrüche berücksichtigt (viele Beispiele empfehlen beispielsweise die Verwendung von „^(.+?\.php)(/.*)$“), könnte ein Angreifer sicherstellen, dass ein Ein leerer Wert wird in die Umgebungsvariable PATH_INFO geschrieben. In diesem Fall weiter im Verlauf der Ausführung ist Schreiben von path_info[0] auf Null und Aufrufen von FCGI_PUTENV.

Indem ein Angreifer eine auf eine bestimmte Weise formatierte URL anfordert, kann er erreichen, dass der path_info-Zeiger auf das erste Byte der Struktur „_fcgi_data_seg“ verschoben wird. Das Schreiben einer Null in dieses Byte führt zur Verschiebung des „char* pos“. Zeiger auf einen zuvor gefundenen Speicherbereich. Der nächste aufgerufene FCGI_PUTENV überschreibt die Daten in diesem Speicher mit einem Wert, den der Angreifer kontrollieren kann. Der angegebene Speicher speichert auch die Werte anderer FastCGI-Variablen, und durch das Schreiben ihrer Daten kann ein Angreifer eine fiktive PHP_VALUE-Variable erstellen und die Ausführung seines Codes erreichen.

Source: opennet.ru

Kommentar hinzufügen