Vulnérabilité XSS sur les scripts PHP Apache

Dec 09 2020

J'ai deux serveurs CentOS8 exécutant Apache avec MOD_PHP. Nous avons découvert que l'ajout d'une barre oblique à la fin des URL modifie l'URI de base dans les scripts, créant une vulnérabilité XSS.
Par examplehttp://myserver.com/Login.php/ ou alors http://myserver.com/Login.php/extra_stuff/fait que l'URI de base des liens relatifs et des images est incorrect. Si extra_stuff contient du javascript, vous pouvez potentiellement modifier le contenu de la page.

Comment puis-je empêcher Apache de traiter les scripts PHP comme un répertoire s'ils ont une barre oblique à la fin et retournent un 404? Je préfère ne pas avoir à modifier chaque page pour ajouter une balise.

Ce qui me trouble, c'est pourquoi la configuration Apache ci-dessous correspond à un script PHP avec une barre oblique à la fin et des caractères superflus alors qu'il n'existe pas vraiment, et l'envoie au gestionnaire.

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

Réponses

JackHandy42 Dec 10 2020 at 22:08

Comme l'explique @CBroe dans un commentaire :

Je ne vois pas en quoi cela créerait une vulnérabilité, à moins que vous n'indiquiez activement le chemin de l'URL de la demande quelque part. Ce n'est pas parce que l'URL est http://myserver.com/Login.php/extra_stuff/et qu'elle est implicitement l'URL de base contre laquelle toutes les URL relatives seront résolues, cela ne signifie pas qu'un code JavaScript y sera exécuté. Lorsque vous insérez l'URL dans le document sans aucun traitement ni considération, cela peut bien sûr être un problème XSS.

AcceptPathInfo explique le comportement. Le code des fournisseurs avait en effet beaucoup d'utilisations non approuvées de $ _Server ["PHP_SELF"] que j'ai corrigées.