LinkedIn.com中存储型xss(嵌入未经验证的Open Graph)
字数 1425 2025-08-27 12:33:37
LinkedIn存储型XSS漏洞分析:通过未经验证的Open Graph嵌入实现攻击
漏洞概述
本教学文档详细分析LinkedIn平台中存在的一个存储型XSS漏洞,攻击者能够通过操纵Open Graph协议嵌入未经验证的内容,从而在LinkedIn文章中注入恶意HTML和JavaScript代码。
背景知识
oEmbed与Open Graph协议
-
oEmbed:
- 开放格式标准,允许从其他网站嵌入内容
- 大多数富文本平台支持标准oEmbed
- 示例:在WordPress中粘贴Vimeo链接会自动转换为视频播放器
-
Open Graph协议:
- 通过在页面添加OG标签来指定嵌入内容类型
- 常用标签包括
og:title、og:description、og:image和og:video
-
安全机制:
- 通常平台会检查oEmbed和OG标签
- 使用域名白名单限制可嵌入内容
- 白名单实现错误可能导致XSS漏洞
漏洞发现过程
目标识别
-
攻击面:LinkedIn文章功能
- 通过动态页面点击"Write an Article"进入编辑器
- 编辑器提供添加图片和视频的功能
-
嵌入机制:
- 点击添加链接按钮可嵌入富文本内容
- LinkedIn将URL转换为HTML代码并嵌入
请求分析
-
请求流程:
- 使用Burp Suite观察数据传输
- LinkedIn将URL转换为HTML代码后返回
- 返回报文经过URL编码
-
嵌入结果:
- 编辑器解析为iframe框架
- 内容被放入三个框架中
- 限制:只能操作框架内内容,无法获取LinkedIn cookie
漏洞利用
钓鱼页面构造
-
设计思路:
- 创建伪造的LinkedIn登录页面
- 使用SnappySnippet Chrome插件复制页面元素
- 添加JavaScript代码捕获用户凭证
-
技术实现:
<!-- 示例钓鱼页面代码 --> <form onsubmit="captureCredentials()"> <input type="email" id="email"> <input type="password" id="password"> <button type="submit">登录</button> </form> <script> function captureCredentials() { const email = document.getElementById('email').value; const password = document.getElementById('password').value; alert(`捕获的凭证:\n邮箱: ${email}\n密码: ${password}`); // 实际攻击中可将数据发送到攻击者服务器 top.location.href = "https://www.linkedin.com"; // 重定向避免怀疑 } </script>
Open Graph利用
-
关键突破点:
- 利用
og:video标签加载钓鱼页面而非视频 - 绕过常规内容检查机制
- 利用
-
攻击步骤:
- 将钓鱼页面上传至攻击者控制的服务器
- 在LinkedIn文章中使用
og:video标签引用该页面 - 设置诱人标题如"Oops, something went wrong!"
攻击影响
-
直接危害:
- 完美的钓鱼攻击,用户难以区分真伪
- 可窃取用户凭证
- 可结合BeEF框架进一步控制受害者浏览器
-
潜在危害:
- 大规模凭证收集
- 会话劫持
- 恶意软件分发
防御方案
-
输入验证:
- 禁止用户控制Open Graph标签
- 实施严格的域名白名单机制
-
技术措施:
- 避免使用iframe嵌入不受信任内容
- 实施内容安全策略(CSP)
- 对嵌入内容进行沙箱隔离
-
监控与响应:
- 实时监测异常嵌入内容
- 建立快速响应机制处理报告
漏洞修复
LinkedIn安全团队收到报告后已修复此漏洞,主要修复措施包括:
- 强化Open Graph标签验证机制
- 限制可嵌入内容的类型和来源
- 增加嵌入内容的视觉标识
经验总结
-
安全开发:
- 富文本编辑器是常见攻击面,需特别关注
- 第三方内容嵌入功能需严格限制
-
测试建议:
- 对oEmbed和Open Graph功能进行专项安全测试
- 测试各种标签组合的解析行为
-
安全意识:
- 用户教育:识别可疑嵌入内容
- 开发人员培训:安全实现内容嵌入功能
本教学文档详细分析了LinkedIn存储型XSS漏洞的技术细节和利用方法,为安全研究人员提供了有价值的参考,同时也为开发人员提供了防御此类漏洞的实用建议。