Revive Adserver 分页参数未限制导致的资源耗尽漏洞分析

本文详细分析了Revive Adserver日志查看器中存在的安全漏洞。攻击者通过操纵未经校验的`setPerPage`参数,可请求获取海量日志数据,导致数据库负载剧增、内存耗尽,可能引发拒绝服务攻击或数据批量泄露。

Revive Adserver | 报告 #3413890 - 未受限制的 setPerPage 参数允许获取超大结果集 / 资源耗尽 / 批量日志检索

报告时间: 2025年11月6日,上午8:45 (UTC) 报告人: vidang04 报告平台: HackerOne

描述

日志查看器中的 setPerPage 查询参数用于控制分页,但服务器端未对其进行验证或设置上限。攻击者可以提供一个极大的数值(例如 setPerPage=100000000000000000),应用程序在构建结果集时会尝试满足该值。此行为可能导致数据库工作负载过重、响应数据巨大、应用程序变慢,并可能实现日志条目的批量检索。

复现步骤

  1. 以有权访问日志查看功能的用户身份进行认证。
  2. setPerPage 参数的通常取值范围是 10 到 100。将其值设置为 300 后,网站仍会返回结果(参见下方截图)。

(此处为图片占位符,原报告包含多张图片:F4972841: image.png, F4972842: image.png, F4972847: image.png,展示了正常界面与参数被篡改后的界面对比。)

影响

  • 如果服务器尝试查询/渲染一个极大的 N 条记录,将导致内存/CPU/数据库 I/O 急剧增加,可能引发超时、内存溢出(OOM)甚至崩溃(拒绝服务攻击,DoS)。
  • 如果后端在一个响应中返回所有数据,将导致严重的带宽和时间消耗,浏览器客户端可能无响应。

讨论时间线

  • 2025年11月6日,上午9:47 (UTC): mbeccati (Revive Adserver 工作人员) 发表评论:

    感谢报告。我对此报告有些犹豫。修复它固然是件好事,但如果在一个已安装的系统上拥有合法账户,可以做很多事情来使服务器过载,我很难认为这可以被称为一个漏洞。

  • 2025年11月6日,上午9:57 (UTC): vidang04 发表评论进行反驳:

    在日志查看器中,无论是普通用户还是管理员都无法删除日志条目,随着时间的推移,日志量会无限增长。这使得经过身份验证的用户可以以“检查日志”为幌子,通过操纵 setPerPage 参数,合法地请求非常大的结果集,从而在一次操作中批量检索大量数据。

  • 2025年11月11日,上午7:36 (UTC): vidang04 询问是否有进一步更新。

  • 2025年11月11日,上午8:55 (UTC): mbeccati 回复:

    感谢您的耐心等待。补丁比两行代码的修复要大一些。我也在检查其他使用分页器的脚本,看看是否存在类似问题。

  • 2025年11月11日,上午9:32 (UTC): mbeccati 将报告状态更改为“已解决”并关闭报告:

    随附的补丁文件 h1-3413890.patch (F4990259) 应该能修复应用程序中多个部分的问题。除非计划有变,我们预计下周发布一个安全修复版本。

  • 2025年11月11日,上午9:33 (UTC): mbeccati 将严重等级从 高 (7.5) 更新为 中 (6.5),并更新了CVSS评分以反映攻击需要一定权限。

  • 约12天前: mbeccati 更新了漏洞类型,从“不受控制的资源消耗”改为“资源分配无限制或无限流”,并添加了CVE参考编号 CVE-2025-55128。随后请求并公开了此报告(公开链接:https://www.revive-adserver.com/security/revive-sa-2025-004/)。

  • 4天前: vidang04 就CVE披露中的名字拼写错误提出了更正请求,希望被署名为 “Dang Hung Vi”mbeccati 随后承认了错误并已请求编辑。

报告摘要

  • 报告 ID: #3413890
  • 状态: 已解决
  • 严重性: 中 (6.5)
  • 弱点类型: 资源分配无限制或无限流
  • CVE ID: CVE-2025-55128
  • 公开日期: 2025年11月19日,下午1:00 (UTC)
  • 赏金: 无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计