集合循环引用导致拒绝服务漏洞"

admin 2026-10-16 06:32:42 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

集合循环引用导致拒绝服务漏洞

原创

游山玩水
游山玩水

山水SRC

2026年9月30日 08:48
河南

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

免责声明

本公众号分享的所有渗透测试技术文章仅面向合法授权的安全测试、学习交流与研究用途。读者必须确保自身行为符合《网络安全法》等相关法律法规,严禁将其用于任何未授权攻击等非法活动。因不当使用或传播相关内容所引发的任何法律责任与风险,由行为人自行承担,本公众号(或本人)概不负责

测试流程

测试前提

  1. 功能基础

:目标平台支持“集合(List/Collection)”功能,允许用户创建集合并保存文章、视频或其他对象(包括其他集合)。
2. 贡献者机制

:集合支持添加“贡献者(Contributor)”,且添加过程无需对方确认(或攻击者可控),被添加者即拥有该集合的某些权限(如查看、编辑)。
3. 对象引用

:系统允许将集合 A 保存(嵌套)到集合 B 中,即集合可以作为对象被添加到另一个集合。
4. 后端校验缺失

:服务端在处理“Save to Collection”请求时,未检测循环引用(如 A 包含 B,B 又包含 A)。
5. 账户要求

:攻击者拥有一个账号,受害者(至少一个)账号,且攻击者可以获取受害者的用户 ID 或用户名。


测试流程

步骤一:准备攻击环境

  1. 攻击者登录账号,创建两个集合:
  • 集合 A(list_id=1,命名为 Attacker_List_1)
  • 集合 B(list_id=2,命名为 Attacker_List_2)
  1. 将受害者 V1 添加为集合 A 的贡献者,将受害者 V2 添加为集合 B 的贡献者(利用 Contributor 机制,无需受害者确认)。

步骤二:构造循环引用

  1. 拦截“Save to Collection”请求(通常为 POST /api/save-to-collection 或类似接口)。
  2. 对集合 A 执行保存操作:将集合 B 的 ID 作为对象保存进集合 A。
  • 请求参数示例:list_id=1&object_id=2&object_type=collection
  • 服务器返回 200 OK,表示集合 A 现在包含了集合 B。
  1. 对集合 B 执行保存操作:将集合 A 的 ID 作为对象保存进集合 B。
  • 请求参数示例:list_id=2&object_id=1&object_type=collection
  • 服务器返回 200 OK,表示集合 B 现在包含了集合 A。
  • 此时形成循环引用:集合 A ↔ 集合 B

。

步骤三:触发受害者端功能失效

  1. 受害者 V1 和 V2 分别登录账号,访问 /saved/ 页面(即“已保存”或“我的收藏”页面,该页面通常会列出用户作为贡献者或所有者的集合,并可能递归加载内容)。
  2. 页面加载时,后端尝试解析集合 A 和 B 的嵌套关系,由于循环引用,陷入无限循环或栈溢出,最终导致渲染失败。
  3. 截图证明

:受害者看到错误页,显示 \"Sorry, something went wrong...\" 或类似 500 错误。

步骤四:验证无法自助恢复

  1. 受害者尝试通过 UI 删除集合、取消贡献者关系、移除嵌套对象等操作,均因后端逻辑在循环处理中异常而失败(或操作被拒绝)。
  2. 对照组验证

:攻击前,受害者 V1/V2 访问 /saved/ 页面正常;攻击后,持续报错,证明漏洞已造成持久化影响。


危害等级与影响

维度 影响描述
功能失效(拒绝服务) 高。受害者(甚至更多用户,若集合被公开或共享)无法正常访问“已保存”页面,导致核心功能不可用。攻击者可针对特定高价值目标(如管理员、明星账号)实施定向打击。
持久化影响 中。由于循环引用存储在数据库中,受害者无法自助修复,需平台管理员介入手动修改数据库才能恢复,增加运维成本。


集合循环引用导致拒绝服务漏洞" 网络安全文章

集合循环引用导致拒绝服务漏洞"

本文分析集合循环引用导致拒绝服务漏洞的测试流程。攻击者利用集合嵌套与贡献者机制无确认的缺陷,构造循环引用使受害者页面加载时陷入无限循环,造成持久化功能失效。危害等级高,需管理员介入修复。建议平台校验循环引用并限制嵌套深度。
山河永念,英雄不朽!" 网络安全文章

山河永念,英雄不朽!"

这篇文章是公安部网安局发布的烈士纪念日纪念文章,缅怀在战争、国家发展及危急关头牺牲的英烈,强调传承不朽精神,号召以崇高敬意致敬英雄,内容涉及长征等历史记忆。
评论:0   参与:  0