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协议

  1. oEmbed

    • 开放格式标准,允许从其他网站嵌入内容
    • 大多数富文本平台支持标准oEmbed
    • 示例:在WordPress中粘贴Vimeo链接会自动转换为视频播放器
  2. Open Graph协议

    • 通过在页面添加OG标签来指定嵌入内容类型
    • 常用标签包括og:titleog:descriptionog:imageog:video
  3. 安全机制

    • 通常平台会检查oEmbed和OG标签
    • 使用域名白名单限制可嵌入内容
    • 白名单实现错误可能导致XSS漏洞

漏洞发现过程

目标识别

  1. 攻击面:LinkedIn文章功能

    • 通过动态页面点击"Write an Article"进入编辑器
    • 编辑器提供添加图片和视频的功能
  2. 嵌入机制

    • 点击添加链接按钮可嵌入富文本内容
    • LinkedIn将URL转换为HTML代码并嵌入

请求分析

  1. 请求流程

    • 使用Burp Suite观察数据传输
    • LinkedIn将URL转换为HTML代码后返回
    • 返回报文经过URL编码
  2. 嵌入结果

    • 编辑器解析为iframe框架
    • 内容被放入三个框架中
    • 限制:只能操作框架内内容,无法获取LinkedIn cookie

漏洞利用

钓鱼页面构造

  1. 设计思路

    • 创建伪造的LinkedIn登录页面
    • 使用SnappySnippet Chrome插件复制页面元素
    • 添加JavaScript代码捕获用户凭证
  2. 技术实现

    <!-- 示例钓鱼页面代码 -->
    <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利用

  1. 关键突破点

    • 利用og:video标签加载钓鱼页面而非视频
    • 绕过常规内容检查机制
  2. 攻击步骤

    • 将钓鱼页面上传至攻击者控制的服务器
    • 在LinkedIn文章中使用og:video标签引用该页面
    • 设置诱人标题如"Oops, something went wrong!"

攻击影响

  1. 直接危害

    • 完美的钓鱼攻击,用户难以区分真伪
    • 可窃取用户凭证
    • 可结合BeEF框架进一步控制受害者浏览器
  2. 潜在危害

    • 大规模凭证收集
    • 会话劫持
    • 恶意软件分发

防御方案

  1. 输入验证

    • 禁止用户控制Open Graph标签
    • 实施严格的域名白名单机制
  2. 技术措施

    • 避免使用iframe嵌入不受信任内容
    • 实施内容安全策略(CSP)
    • 对嵌入内容进行沙箱隔离
  3. 监控与响应

    • 实时监测异常嵌入内容
    • 建立快速响应机制处理报告

漏洞修复

LinkedIn安全团队收到报告后已修复此漏洞,主要修复措施包括:

  1. 强化Open Graph标签验证机制
  2. 限制可嵌入内容的类型和来源
  3. 增加嵌入内容的视觉标识

经验总结

  1. 安全开发

    • 富文本编辑器是常见攻击面,需特别关注
    • 第三方内容嵌入功能需严格限制
  2. 测试建议

    • 对oEmbed和Open Graph功能进行专项安全测试
    • 测试各种标签组合的解析行为
  3. 安全意识

    • 用户教育:识别可疑嵌入内容
    • 开发人员培训:安全实现内容嵌入功能

本教学文档详细分析了LinkedIn存储型XSS漏洞的技术细节和利用方法,为安全研究人员提供了有价值的参考,同时也为开发人员提供了防御此类漏洞的实用建议。

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代码捕获用户凭证 技术实现 : Open Graph利用 关键突破点 : 利用 og:video 标签加载钓鱼页面而非视频 绕过常规内容检查机制 攻击步骤 : 将钓鱼页面上传至攻击者控制的服务器 在LinkedIn文章中使用 og:video 标签引用该页面 设置诱人标题如"Oops, something went wrong !" 攻击影响 直接危害 : 完美的钓鱼攻击,用户难以区分真伪 可窃取用户凭证 可结合BeEF框架进一步控制受害者浏览器 潜在危害 : 大规模凭证收集 会话劫持 恶意软件分发 防御方案 输入验证 : 禁止用户控制Open Graph标签 实施严格的域名白名单机制 技术措施 : 避免使用iframe嵌入不受信任内容 实施内容安全策略(CSP) 对嵌入内容进行沙箱隔离 监控与响应 : 实时监测异常嵌入内容 建立快速响应机制处理报告 漏洞修复 LinkedIn安全团队收到报告后已修复此漏洞,主要修复措施包括: 强化Open Graph标签验证机制 限制可嵌入内容的类型和来源 增加嵌入内容的视觉标识 经验总结 安全开发 : 富文本编辑器是常见攻击面,需特别关注 第三方内容嵌入功能需严格限制 测试建议 : 对oEmbed和Open Graph功能进行专项安全测试 测试各种标签组合的解析行为 安全意识 : 用户教育:识别可疑嵌入内容 开发人员培训:安全实现内容嵌入功能 本教学文档详细分析了LinkedIn存储型XSS漏洞的技术细节和利用方法,为安全研究人员提供了有价值的参考,同时也为开发人员提供了防御此类漏洞的实用建议。