Die Korrekturupdates PHP 7.3.11, 7.1.33 und 7.2.24 enthalten kritisch (CVE-2019-11043) in der PHP-FPM-Erweiterung (FastCGI-Prozess-Manager), die es ermöglicht, Code aus der Ferne im System auszuführen. Für Angriffe auf Server, die PHP-Skripte mit PHP-FPM in Kombination mit Nginx ausführen, ist bereits öffentlich zugänglich .
Ein Angriff ist möglich in Nginx-Konfigurationen, in denen der Weiterleitungsmechanismus zu PHP-FPM mit einer Aufteilung der URL-Teile durch "fastcgi_split_path_info" und der Definition der Umgebungsvariablen PATH_INFO erfolgt, aber ohne vorherige Überprüfung der Existenz der Datei durch die Direktive "try_files $fastcgi_script_name" oder die Konstruktion "if (!-f $document_root$fastcgi_script_name)". Das Problem besteht auch in den Einstellungen, die für die NextCloud-Plattform angeboten werden. Zum Beispiel sind Konfigurationen mit Konstruktionen vom Typ:
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Die Überwachung der Behebung des Problems in den Distributionen kann auf den folgenden Seiten erfolgen: , , , , , , . Als Workaround zum Schutz kann nach der Zeile „fastcgi_split_path_info“ eine Überprüfung der Existenz der angeforderten PHP-Datei hinzugefügt werden:
try_files $fastcgi_script_name =404;
Das Problem wurde durch einen Fehler bei der Handhabung von Zeigern in der Datei . Bei der Zuweisung eines Zeigers wird vorausgesetzt, dass der Wert der Umgebungsvariable PATH_INFO unbedingt ein Präfix enthält, das mit dem Pfad zum PHP-Skript übereinstimmt.
Wenn in der Direktive fastcgi_split_path_info die Trennung des Skriptpfads mit einem regulären Ausdruck angegeben ist, der empfindlich gegenüber der Übertragung eines Zeilenumbruchs ist (z. B. wird in vielen Beispielen empfohlen, «^(.+?\.php)(/.*)$» zu verwenden), kann ein Angreifer erreichen, dass in der Umgebungsvariable PATH_INFO ein leerer Wert geschrieben wird. In diesem Fall erfolgt im weiteren Verlauf der Ausführung das Schreiben der Null in path_info[0] und der Aufruf von FCGI_PUTENV.
Durch das Anfordern einer bestimmten URL kann der Angreifer erreichen, dass der Zeiger path_info auf das erste Byte der Struktur «_fcgi_data_seg» verschoben wird. Das Schreiben einer Null in dieses Byte führt zu einer Verschiebung des Zeigers «char* pos» auf einen zuvor stehenden Bereich des Speichers. Die folgende FCGI_PUTENV-Anweisung überschreibt die Daten in diesem Speicher mit einem Wert, den der Angreifer steuern kann. In dem angegebenen Speicher werden unter anderem auch die Werte anderer FastCGI-Variablen gespeichert, und durch das Schreiben seiner Daten kann der Angreifer eine gefälschte Variable PHP_VALUE erstellen und die Ausführung seines Codes erreichen.
Quelle: opennet.ru
