Revive Adserver IDOR漏洞报告 #3401612 - Banner删除功能中的安全缺陷
摘要
报告披露了在Revive Adserver广告管理平台中发现的一个关键安全漏洞。该漏洞属于不安全的直接对象引用类型,存在于/www/admin/banner-delete.php端点。漏洞允许一个Manager账户的用户,通过简单的参数操纵,删除其他Manager账户下的广告横幅,从而实现横向权限提升。
漏洞详情
漏洞概述
漏洞存在于Revive Adserver的banner删除逻辑中。当删除广告横幅时,系统会验证用户是否有权限访问相关的客户(client)和广告活动(campaign),但未验证用户是否拥有待删除的特定横幅。
技术原理
- 端点:
/www/admin/banner-delete.php - 验证缺失:
- 代码在30-31行检查用户是否拥有
clientid和campaignid的访问权限。 - 然而,在32行缺少对
bannerid所有权的验证。 - 随后,代码在40-48行循环遍历提供的横幅ID并执行删除操作,整个过程没有所有权检查。
- 代码在30-31行检查用户是否拥有
- 对比:同平台的
campaign-delete.php文件在循环内部正确验证了所有权,但banner-delete.php忽略了这一关键步骤。
复现步骤
前置条件
- 两个Manager账户(攻击者A,受害者B)
- 每个Manager拥有自己的客户、广告活动和横幅
- 运行中的Revive Adserver 6.0.1
利用步骤
- 登录:以攻击者身份(Manager A)登录系统。
- 导航:访问攻击者自己的横幅管理页面。
- 提取CSRF令牌:从浏览器的开发者工具(Network标签页)中,从任一操作链接(如“停用”/“删除”)中复制32位的十六进制令牌值。
- 识别受害者横幅ID:横幅ID通常为连续整数。通过枚举或其他方式获取受害者的横幅ID(例如:2001)。
- 构造恶意删除URL:
1http://localhost:8080/www/admin/banner-delete.php?token=<YOUR_TOKEN>&clientid=100&campaignid=100&bannerid=2001token:攻击者有效的CSRF令牌clientid和campaignid:攻击者自己的ID(通过授权检查)bannerid:受害者的横幅ID(无检查!)
- 执行攻击:在同一会话中将构造的URL粘贴到浏览器地址栏并访问。系统将跳转并显示“Banner has been deleted”的成功确认信息。
漏洞影响
此漏洞允许Manager用户之间进行横向权限提升,攻击者可以:
- 破坏竞争活动:删除竞争对手的横幅,干扰其广告活动。
- 造成收入损失:受害者失去活跃的广告展示,导致潜在收入受损。
- 损害平台声誉:受影响的客户可能对平台失去信任。
- 违反数据完整性:未经授权的删除操作绕过了审计控制。
攻击特征
- 所需权限低:仅需Manager账户(无需Admin权限)。
- 易于利用:简单的参数操纵,无需特殊工具。
- 隐蔽性强:在日志中看起来像是合法的删除操作。
- 可规模化:可自动化删除多个横幅。
- 跨上下文攻击:X机构的Manager可以攻击Y机构的Manager。
处理时间线
- 2025年10月27日:漏洞由安全研究员
cyberjoker提交。 - 2025年10月27日:Revive Adserver团队确认为
Triaged状态。 - 2025年10月28日:团队提供修复补丁,并请求漏洞验证。
- 2025年10月28日:报告状态更新为
Resolved。团队宣布计划于11月5日发布安全版本。 - 2025年11月4日:漏洞被分配CVE编号:CVE-2025-52670。
- 约7天前:报告被公开披露。
结语
此IDOR漏洞突显了在Web应用程序中对每一个用户提供的对象引用进行严格所有权验证的重要性。开发者在实现删除等敏感操作时,不仅需要检查用户对父级资源(如客户、活动)的访问权限,还必须确保用户拥有对目标子资源(如横幅)的直接所有权。Revive Adserver团队通过与其他安全删除端点(如campaign-delete.php)的对比,快速识别并修复了此逻辑缺陷。