
Réflexion XSS via le paramètre GET de recherche dans Phoca Download
search dans Phoca DownloadPhoca Download ≤ 6.1.4 — Un attaquant authentifié exécute du JavaScript arbitraire via une URL de recherche forgée dans le panneau de contrôle utilisateur
Phoca Download (com_phocadownload) pour Joomla contient une vulnérabilité de Cross-Site Scripting (XSS) réfléchi dans la fonctionnalité de recherche de fichiers du panneau de contrôle utilisateur. Le paramètre GET search est traité avec le filtre de Joomla — qui appelle uniquement et préserve le caractère — puis est renvoyé sans dans un attribut HTML . Un attaquant peut injecter des attributs HTML arbitraires et des gestionnaires d'événements qui s'exécutent dans le navigateur de la victime au chargement de la page, sans nécessiter aucune interaction de l'utilisateur au-delà du clic sur un lien forgé.
'string'strip_tags()"htmlspecialchars()<input value="">| COMPOSANT | VULNÉRABLE | TESTÉ SUR | CORRIGÉ |
|---|---|---|---|
| com_phocadownload | ≤ 6.1.4 | Joomla 5 + PhocaDownload 6.1.4 + MariaDB 10.6 | 6.1.5 |
Type : Cross-Site Scripting réfléchi (CWE-79)
Authentification requise : Utilisateur Joomla enregistré (connecté) + panneau de contrôle utilisateur activé (enable_user_cp = 1)
Jeton CSRF requis : Non requis — requête GET, aucun jeton CSRF vérifié sur ce chemin
Fichier sink : site/views/user/tmpl/default_files_bootstrap.php
Le paramètre search est lu à l'aide du filtre 'string' de Joomla, qui appelle uniquement strip_tags(). Cela préserve le caractère ", permettant à un attaquant de sortir du contexte d'attribut value="" et d'injecter des attributs HTML arbitraires.
SITE/VIEWS/USER/VIEW.HTML.PHP:252 — SOURCE
$search_files = $app->getUserStateFromRequest(
$this->_context_files.'.search', 'search', '', 'string'
);
$search_files = StringHelper::strtolower($search_files);
$lists_files['search'] = $search_files; // stocké sans encodage
SITE/VIEWS/USER/TMPL/DEFAULT_FILES_BOOTSTRAP.PHP:56 — SINK (VULNÉRABLE)
<input type="text" name="search" id="pdsearch"
value="<?php echo $this->t['listsfiles']['search'];?>"
class="form-control" />
La vue sœur phocadownloadlinkfile (même extension) applique correctement PhocaDownloadUtils::filterValue($search, 'text') — équivalent à htmlspecialchars() — pour le même champ de recherche. La vue user n'applique pas la même protection, indiquant un encodage de sortie incohérent au sein de l'extension.
Accédez à la page de connexion Joomla et authentifiez-vous en tant qu'utilisateur enregistré. Après une connexion réussie, Joomla redirige vers la page de profil utilisateur, confirmant une session active.

Accédez au panneau de contrôle utilisateur de PhocaDownload :
http://TARGET/index.php?option=com_phocadownload&view=user
La page s'affiche avec un champ de recherche vide (value=""). C'est l'état normal avant l'injection.

Accédez à l'URL forgée suivante (ou saisissez directement la charge utile brute dans le champ de recherche) :
http://TARGET/index.php?option=com_phocadownload&view=user&search=%22%20autofocus%20onfocus%3Dalert%28document.domain%29%20x%3D

Au chargement de la page, l'attribut autofocus injecté focalise l'élément d'entrée, déclenchant immédiatement le gestionnaire d'événement onfocus. Aucune autre interaction de l'utilisateur n'est requise.
HTML rendu (vulnérable) :
<input type="text" name="search" id="pdsearch"
value="" autofocus onfocus=alert(document.domain) x="
class="form-control" />
document.cookie, permettant une prise de contrôle totale du compte sans identifiants.