Vulnerabilidade XSS em scripts Apache PHP

Dec 09 2020

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

JackHandy42 Dec 10 2020 at 22:08

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.