开放图谱(OG)缓存对象未授权刷新与回溯性内容投毒漏洞
原创
游山玩水
游山玩水
山水SRC
2026年9月26日 11:43
河南
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
免责声明
本公众号分享的所有渗透测试技术文章仅面向合法授权的安全测试、学习交流与研究用途。读者必须确保自身行为符合《网络安全法》等相关法律法规,严禁将其用于任何未授权攻击等非法活动。因不当使用或传播相关内容所引发的任何法律责任与风险,由行为人自行承担,本公众号(或本人)概不负责
测试流程
测试前提
1. 产品有\"贴 URL → 自动生成富媒体卡片\"的功能
- 消息框 / 评论框 / 动态框里贴一个外链,自动拉出标题+描述+缩略图。
- 这是 OG(Open Graph)协议的标准用法,几乎每个带\"发动态\"功能的产品都有。
2. 卡片数据不是每次现抓,而是\"按 URL 做 key 缓存/去重\"
- 第一次有人贴
a.com/foo→ 爬一次,存og_obj_123。 - 第二次有人再贴
a.com/foo→ 不复爬,直接复用og_obj_123。 - 但 Yammer 这里又加了个动作:复用时会\"顺手刷新\"最新 OG 数据写回
og_obj_123——这才是坑。
3. 刷新操作的写权限没跟\"谁最先创建这个对象\"绑定
- 理论上:A 先贴的 URL,A 的 msg 绑在
og_obj_123上 → 只有 A(或平台)该决定这对象啥时候刷。 - Yammer 实际:B 贴同 URL → 也能触发刷新 → B 还能在请求里改
og:image参数 → 写回成功。
4. 对象是\"一对多\"渲染的
- 一个
og_obj_123被 N 条消息(不同用户、不同群、私/公)引用。 - 所以改一次,N 处污染——这是危害放大的最后一环。
测试流程
Step 1:A 账号先贴 URL,建立 OG 对象
- A 在群 G1(可以是私有群)发消息,贴
evil.example.com/ogtest.html。 - 看渲染出来的卡片:标题 + 原图,确认 OK。
- (可选)再去 B 账号的 G2 也贴一次同 URL,确认\"复用\"行为——有些产品不复爬只复用,有些复爬,有些复爬还允许带参覆盖,这一步要摸清产品行为。
Step 2:B 账号贴同 URL,Burp 拦截
- B 在消息/评论框贴同一个 URL。
-
拦截到的请求里大概率会有:
-
一个
url=参数 - 一个
og_object_id=或类似 - 可能有
refresh=1、reparse=1、fetch_og=1这种触发重新抓取的开关 - 还可能直接把
og:image、og:title当参数传回来让你改(Yammer 就是这种)
Step 3:尝试篡改 OG 字段
重点试这几个参数(不同产品命名不一样,靠猜+历史报文观察):
og:image/thumbnail/pic_url→ 改成你控制的另一张图og:title/title→ 改标题og:description/desc→ 改描述
放行,看 B 这条消息的卡片是不是变成了新图/新标题。
Step 4:回看 A 的历史消息(关键验证)
- 切回 A 账号,刷新 G1 里那条原消息。
- 如果 A 的卡片也变成了你 Step 3 改的新图 → 🎯 洞成立,\"回溯性污染\"验证成功。
- 如果只有 B 的新消息变、A 的旧消息不变 → 那是\"每次新建 OG 对象\",不算这个洞(但可能另有用途)。
危害等级与影响
| 维度 | 影响描述 |
|---|---|
| 回溯性内容投毒 | 灾难性。攻击者可通过修改共享 OG 对象,永久改变所有历史消息中的卡片展示。原发布者无法删除或恢复(除非平台清理缓存),导致“只可读不可删”的持续性污染。 |
| 一对多放大效应 | 极高。由于 OG 对象是“一对多”渲染,一次篡改可瞬间污染 N 条消息、跨用户、跨群组(包括私有群),影响范围呈指数级扩散。 |
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论