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
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:
try_files $fastcgi_script_name =404;
Das Problem wird durch einen Fehler beim Bearbeiten von Zeigern in einer Datei verursacht
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
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