XSS-уязвимость в PHP-скриптах Apache

Dec 09 2020

У меня есть два сервера CentOS8, на которых работает Apache с MOD_PHP. Мы обнаружили, что добавление косой черты в конце URL-адресов изменяет базовый URI в сценариях, создавая уязвимость XSS.
Напримерhttp://myserver.com/Login.php/ или же http://myserver.com/Login.php/extra_stuff/приводит к неправильному базовому URI для относительных ссылок и изображений. Если extra_stuff содержит javascript, вы потенциально можете изменить содержимое на странице.

Как мне запретить Apache обрабатывать сценарии PHP как каталог, если они имеют косую черту в конце и возвращают 404? Я бы предпочел не редактировать каждую страницу, чтобы добавить тег.

Что меня смущает, так это то, почему приведенная ниже конфигурация Apache соответствует сценарию PHP с завершающей косой чертой и посторонними символами, когда он на самом деле не существует, и отправляет его в обработчик.

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

Ответы

JackHandy42 Dec 10 2020 at 22:08

Как поясняет @CBroe в комментарии :

Я не понимаю, как это может создать какую-либо уязвимость, если вы не выводите где-нибудь путь URL-адреса запроса. Тот http://myserver.com/Login.php/extra_stuff/факт, что URL-адрес является базовым URL- адресом, который неявно является базовым URL-адресом, будет разрешен для всех относительных URL-адресов, не означает, что какой-либо код JavaScript там будет выполнен. Когда вы вставляете URL-адрес в документ без какой-либо обработки и рассмотрения, это, конечно, может быть проблемой XSS.

AcceptPathInfo объясняет поведение. В коде поставщиков действительно было много несанкционированных использований $ _Server ["PHP_SELF"], которые я исправил.