XSS-Sicherheitslücke in Apache PHP-Skripten

Dec 09 2020

Ich habe zwei CentOS8-Server, auf denen Apache mit MOD_PHP ausgeführt wird. Wir haben festgestellt, dass das Anhängen eines Schrägstrichs an das Ende von URLs die Basis-URL in den Skripten ändert und eine XSS-Sicherheitsanfälligkeit verursacht.
Beispielsweisehttp://myserver.com/Login.php/ oder http://myserver.com/Login.php/extra_stuff/bewirkt, dass die Basis-URL für relative Links und Bilder falsch ist. Wenn extra_stuff Javascript enthält, können Sie möglicherweise den Inhalt der Seite ändern.

Wie kann ich verhindern, dass Apache PHP-Skripte wie ein Verzeichnis behandelt, wenn sie einen abschließenden Schrägstrich enthalten, und einen 404 zurückgeben? Ich möchte lieber nicht jede einzelne Seite bearbeiten müssen, um ein Tag hinzuzufügen.

Was mich verwirrt, ist, warum die folgende Apache-Konfiguration ein PHP-Skript mit einem abschließenden Schrägstrich und fremden Zeichen vergleicht, wenn es nicht wirklich existiert, und es an den Handler sendet.

FilesMatch \.(php|phar)$>
    SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>

Antworten

JackHandy42 Dec 10 2020 at 22:08

Wie @CBroe in einem Kommentar erklärt :

Ich sehe jedoch nicht, wie dies zu einer Sicherheitsanfälligkeit führen würde, es sei denn, Sie geben den Anforderungs-URL-Pfad irgendwo aktiv aus. Nur weil die URL ist http://myserver.com/Login.php/extra_stuff/und dies implizit die Basis-URL ist, werden alle relativen URLs aufgelöst. Dies bedeutet nicht, dass dort ein JavaScript-Code ausgeführt wird. Wenn Sie die URL ohne Behandlung und Überlegung in das Dokument einfügen, kann dies natürlich ein XSS-Problem sein.

AcceptPathInfo erklärt das Verhalten. Der Code des Anbieters hatte tatsächlich viele nicht bereinigte Verwendungen von $ _Server ["PHP_SELF"], die ich korrigiert habe.