
Divulgación detallada de una vulnerabilidad XSS almacenada en VaahCMS mediante el manejo inseguro de carga de archivos SVG, incluyendo el flujo de explotación, los endpoints afectados y las estrategias de mitigación para investigadores de seguridad.
Se identificó una vulnerabilidad de Cross-Site Scripting (XSS) Almacenado en vaahcms, específicamente dentro de la interacción entre la lógica de carga de archivos en MediaController.php y el método storeAvatar() en UserBase.php, que permite a un usuario registrado de bajo nivel cargar un archivo SVG malicioso que contiene JavaScript incrustado. La vulnerabilidad se debe a que el almacenamiento del archivo ocurre antes de la validación de contenido o tipo MIME, dejando archivos maliciosos en una ruta predecible y accesible públicamente en el servidor.
La vulnerabilidad surge del método upload() en MediaController.php
$path = $request->file($input_file_name) ->storeAs($request->folder_path, $upload_file_name); permitiendo a un atacante especificar la ruta del directorio, lo que les permite colocar archivos maliciosos (como un SVG con XSS) directamente en el directorio public/, haciendo que la carga útil sea accesible inmediatamente a través de un navegador web.
La explotación exitosa permite a un atacante controlar el contenido y el nombre del archivo escrito en una ruta de almacenamiento público (/storage/media/YYYY/MM/<controlled-filename>.svg). Si este SVG accesible públicamente es posteriormente renderizado por el navegador de un usuario a través de un ``, <object> o enlace manipulado, el script incrustado se ejecutará, lo que lleva a un XSS persistente.
POST /backend/vaah/manage/media/upload
/storage/media/YYYY/MM/<controlled-filename>.svg.{"success": false, "errors": ["Unable to decode input"]}).POC.svg).xss.svg)./storage/media/2025/08/xss.svg.
enshrined/svg-sanitize para PHP)Investigador: Thaw Phone Nyo
Fecha de Divulgación: 2025/10/8