漏洞报告 #3413890:无限制 setPerPage 参数导致巨大结果集 / 资源耗尽 / 批量日志获取
报告人: vidang04 提交时间: 2025年11月6日 上午8:45 (UTC) 报告至: Revive Adserver
描述
setPerPage 查询参数用于控制日志查看器的分页,但在服务器端未经过验证或限制。攻击者可以提供一个极大的数值(例如 setPerPage=100000000000000000),应用程序在构建结果集时会尝试满足此值。此行为可能导致数据库负载过重、响应数据庞大、应用程序变慢,并可能实现日志条目的批量获取。
复现步骤
- 以具有日志查看权限的用户身份认证。
setPerPage的正常取值范围是10到100。将setPerPage的值设为300后,网站仍会返回结果(参见附图)。
这是 setPerPage 值在允许范围内的典型界面:
影响
- 如果服务器尝试查询/渲染极其庞大的N条记录 → 内存/CPU/数据库I/O急剧增加 → 导致超时、内存不足、崩溃(拒绝服务)。
- 如果后端在一个响应中返回所有数据 → 带宽/时间负载沉重,浏览器客户端可能卡死。
时间线与讨论
- 2025年11月6日 上午9:47 (UTC): mbeccati (Revive Adserver 工作人员) 回复:“感谢报告。我对此有些犹豫。修复它是一个好主意,但如果你在一个安装实例上拥有合法账户,可以做太多事情来使服务器过载,我很难认为这可以被称作一个漏洞。”
- 2025年11月6日 上午9:57 (UTC): vidang04 回应:“在日志查看器中,无论是普通用户还是管理员都无法删除日志条目,并且随着时间的推移,日志量可能会无限制增长。这使得认证用户可以假借‘检查日志’之名,通过操纵
setPerPage合法地请求非常大的结果集,从而在一次操作中批量获取大量数据。” - 2025年11月11日 上午8:55 (UTC): mbeccati 回复:“感谢您的耐心等待。修复补丁的改动比简单的两三行修复要大。我也在检查其他使用分页器的脚本,看是否存在类似问题。”
- 2025年11月11日 上午9:32 (UTC): mbeccati 将报告状态更改为“已解决”并关闭报告,表示附件补丁文件
h1-3413890.patch应能修复应用程序多个部分的问题,并计划在下周发布安全修复版本。 - 2025年11月11日 上午9:33 (UTC): mbeccati 将严重等级从高 (7.5) 调整为中 (6.5),以反映攻击需要一定权限。
- 约7天前: mbeccati 更新了弱点分类,增加了“无限制或节流的资源分配”,移除了“不受控制的资源消耗”。
- 约7天前: mbeccati 更新了CVE引用为
CVE-2025-55128。 - 约7天前: mbeccati 请求并公开了此报告。公开链接:https://www.revive-adserver.com/security/revive-sa-2025-004/
报告摘要
- 报告ID: #3413890
- 状态: 已解决
- 严重性: 中 (6.5)
- 公开时间: 2025年11月19日 下午1:00 (UTC)
- 弱点: 无限制或节流的资源分配
- CVE ID: CVE-2025-55128
- 奖金: 无