Revive Adserver | 报告 #3400506 - 通过跟踪器名称在转化统计中实现存储型XSS
漏洞概述
我在转化统计页面发现了一个存储型跨站脚本(XSS)漏洞。广告商可以通过跟踪器名称注入恶意JavaScript,当管理员查看转化报告时(www/admin/stats-conversions.php:356),该脚本会执行。我利用此漏洞成功窃取了管理员会话cookie。这是一个权限提升问题:低权限的广告商账户可以危害高权限的管理员账户。
漏洞代码
// www/admin/stats-conversions.php:356
echo "<td align='$phpAds_TextAlignLeft' style='padding: 0 4px'>{$conversion['trackername']}</td>
<td align='$phpAds_TextAlignLeft' style='padding: 0 4px'>{$conversion['campaignid']}</td>
<td align='$phpAds_TextAlignLeft' style='padding: 0 4px'>{$conversion['campaignname']}</td>";
问题所在:
- 跟踪器名称在输出时未使用
htmlspecialchars()进行转义 - 数据来自广告商可控的输入(跟踪器创建表单)
- 存储时没有输入验证来剥离HTML标签
- 查看转化报告的管理员将在其浏览器上下文中执行有效负载
注释
其他发现: 在调查此问题时,我注意到:
- 第357-358行同样缺少对
campaignid和campaignname的htmlspecialchars()转义 - 广告活动名称同样由用户(广告商)控制,并存在相同的漏洞
- 其他
stats-*.php文件可能存在类似问题——我尚未全部审计
测试范围: 我在一个隔离的Docker环境中测试了此漏洞,使用的是我自己创建的账户。我没有:
- 针对生产环境/公开的Revive Adserver安装进行测试
- 尝试超出受控PoC范围的实际利用
- 窃取或访问任何真实用户数据
菜单配置说明:
重要提示:在全新的Revive Adserver安装中,stats-conversions.php 页面并未包含在默认菜单系统中。在测试期间,我不得不通过修改 lib/OA/Admin/Menu/config.php 来添加菜单项以启用它:
$oMenu->addTo("2.1", new OA_Admin_Menu_Section("stats-conversions",
'Conversions', "stats-conversions.php?clientid={clientid}",
false, "statistics/conversions"));
这很可能是一个配置问题,而非安全控制措施,因为:
- 代码层面的权限检查 (
OA_Permission::enforceAccount) 允许广告商/经理访问 - 其他包含类似数据的统计页面是可访问的
- 无论菜单是否可见,易受攻击的代码都存在
后续讨论与修复
项目维护者回复 (2025-10-27): 感谢详细的报告。有几个错误,但总体来说漏洞是存在的。
- 建议的SQL查询无效,因为有更多不可为空的列没有默认值。
- 无需更改 config.php,否则该漏洞将不可接受。
- 可利用的URL例如是
stats.php?entity=conversions&clientid=1。 - 会话ID cookie 是 HttpOnly 的,因此无法通过JS读取:无法窃取会话!
- XSS 需要实际的转化记录,鉴于第三方cookie的各种限制,这相当罕见。
- 相应地更新了风险因素:
- 复杂性:高,因为数据库需要有转化记录,这不在攻击者控制范围内
- 范围:未改变,因为攻击者无法访问其他系统
- 机密性:低 - 无法窃取会话ID
- 完整性:无 - 为什么会有影响?
- 将CVSS严重性从高(8.7)更新为低(2.6)。
报告者进一步反驳 (2025-10-27):
针对HttpOnly问题,报告者指出,虽然无法直接窃取cookie(document.cookie),但攻击依然有效:
- 没有CSP或X-Frame-Options头,XSS载荷可以无阻碍执行。
- 会话挟持(Session Riding) 依然可行:XSS在管理员浏览器中运行时,JavaScript可以读取页面DOM中的CSRF令牌,并使用
fetch()配合credentials: 'include'发起请求,浏览器会自动发送HttpOnly cookie,从而实现以管理员权限执行操作(如创建管理员账户、修改广告活动)。 - 关于转化记录的复杂性:攻击者可以自行制造转化,无需依赖第三方cookie或真实广告展示,只需通过curl访问两个URL即可。
- 建议的CVSS评分应更高:
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N得分为8.7(高),最低也应达到6.0(中)。
维护者更新 (2025-10-27 至 2025-10-28):
- 接受了CVSS的更改,但范围仍维持不变(仅在应用内部)。
- 最终将严重性从高(7.3)更新至高(8.7),接受了报告者的建议(认为攻击跨越了权限边界,范围应视为改变)。
- 提供了补丁文件
h1-3400506.patch以修复漏洞。 - 报告状态更新为“已解决”。
- 计划于2025年11月5日发布安全版本,修复多个漏洞,并将申请CVE-ID。
- CVE ID 被分配为 CVE-2025-52668。
- 报告于2025年11月19日公开披露。 biOK/hzhVF2yKaGc5mK8oXIEkdw1U0SUEAjO/010PZrIRSOwsFIO6Vk9hdFJImvu