Vulnerabilidad XSS en scripts PHP de Apache
Tengo dos servidores CentOS8 que ejecutan Apache con MOD_PHP. Hemos descubierto que agregar una barra al final de las URL cambia la base-uri dentro de los scripts creando una vulnerabilidad XSS.
Por ejemplohttp://myserver.com/Login.php/ o http://myserver.com/Login.php/extra_stuff/hace que la base-uri para enlaces e imágenes relativos sea incorrecta. Si extra_stuff contiene javascript, potencialmente puede cambiar el contenido de la página.
¿Cómo evito que Apache trate los scripts PHP como un directorio si tienen una barra al final y devuelven un 404? Prefiero no tener que editar todas las páginas para agregar una etiqueta.
Lo que me confunde es por qué la siguiente configuración de Apache hace coincidir un script PHP con una barra diagonal y caracteres extraños cuando realmente no existe, y lo envía al controlador.
FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
Respuestas
Como explica @CBroe en un comentario :
Sin embargo, no veo cómo esto crearía alguna vulnerabilidad, a menos que genere activamente la ruta de la URL de solicitud en algún lugar. El hecho de que la URL sea
http://myserver.com/Login.php/extra_stuff/
e implícitamente es la URL base con la que se resolverán todas las URL relativas, no significa que se ejecute ningún código JavaScript allí. Cuando inserta la URL en el documento sin ningún tratamiento ni consideración, esto puede ser, por supuesto, un problema de XSS.
AcceptPathInfo explica el comportamiento. De hecho, el código de los proveedores tenía muchos usos no higienizados de $ _Server ["PHP_SELF"] que he corregido.