Vulnerabilidade XSS em scripts Apache PHP
Eu tenho dois servidores CentOS8 executando o Apache com MOD_PHP. Descobrimos que anexar uma barra ao final dos urls muda o uri-base nos scripts, criando uma vulnerabilidade XSS.
Por exemplohttp://myserver.com/Login.php/ ou http://myserver.com/Login.php/extra_stuff/faz com que o uri-base para links relativos e imagens fiquem incorretos. Se extra_stuff contiver javascript, você pode potencialmente alterar o conteúdo da página.
Como faço para impedir que o Apache trate os scripts PHP como um diretório se eles tiverem uma barra final e retornarem um 404? Prefiro não ter que editar todas as páginas para adicionar uma tag.
O que me confunde é porque a configuração do Apache abaixo está combinando um script PHP com uma barra final e caracteres estranhos quando ele realmente não existe, e enviando-o para o manipulador.
FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
Respostas
Como @CBroe explica em um comentário :
Não vejo como isso criaria qualquer vulnerabilidade, a menos que você ativamente exiba o caminho do URL de solicitação em algum lugar. Só porque o URL é
http://myserver.com/Login.php/extra_stuff/
e implicitamente é o URL base em que todos os URLs relativos serão resolvidos, não significa que qualquer código JavaScript ali seria executado. Quando você insere o URL no documento sem qualquer tratamento e consideração, então, é claro, isso pode ser um problema de XSS.
AcceptPathInfo explica o comportamento. O código do fornecedor realmente tinha muitos usos não higienizados de $ _Server ["PHP_SELF"] que eu corrigi.