korrektive Releases von PHP 7.3.11, 7.1.33 und 7.2.24, in denen kritische (CVE-2019-11043) im PHP-FPM-Erweiterung (FastCGI-Prozessmanager), die es ermöglicht, eigenen Code im System remote auszuführen. Für Angriffe auf Server, die PHP-Skripte in Verbindung mit Nginx über PHP-FPM ausführen, steht bereits .
Angriff ist in nginx-Konfigurationen möglich, in denen der Zugriff auf PHP-FPM durch das Trennen der URL-Teile mit "fastcgi_split_path_info" und die Definition der Umgebungsvariable PATH_INFO erfolgt, jedoch 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 betrifft auch die Einstellungen, die für die NextCloud-Plattform empfohlen werden. Beispielsweise sind Konfigurationen mit Konstruktionen wie:
location ~ [^\/]\.php(\/|$) {
fastcgi_split_path_info ^(.+?\.php)(\/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php:9000;
}
Die Beseitigung des Problems in den Distributionen kann auf den folgenden Seiten verfolgt werden: , , , , , , . Als Umgehungsschutz 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 wird durch einen Fehler bei der Manipulation von Zeigern in der Datei . Bei der Zuordnung eines Zeigers wird davon ausgegangen, 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 Skriptpfades mithilfe eines regulären Ausdrucks angegeben ist, der anfällig für die Übergabe von Zeilenumbrüchen ist (zum Beispiel wird in vielen Beispielen vorgeschlagen, "^(.+?\.php)(\/.*)$" zu verwenden), kann der Angreifer erreichen, dass in die Umgebungsvariable PATH_INFO ein leerer Wert geschrieben wird. In diesem Fall folgt während der Ausführung das Schreiben von path_info[0] null und der Aufruf von FCGI_PUTENV.
Indem der Angreifer eine auf bestimmte Weise formatierte URL anfordert, kann er erreichen, dass der Zeiger path_info auf das erste Byte der Struktur "_fcgi_data_seg" verschoben wird, und das Schreiben von null in dieses Byte führt dazu, dass der Zeiger "char* pos" in einen zuvor liegenden Speicherbereich verschoben wird. Der anschließend aufgerufene FCGI_PUTENV überschreibt die Daten in diesem Speicher mit einem Wert, den der Angreifer kontrollieren kann. In diesem Speicher werden 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
