挖洞经验 | Instagram滤镜应用中的存储型XSS($25K)
字数 1101 2025-08-15 21:32:24

Instagram Spark AR滤镜应用中的存储型XSS漏洞分析报告

漏洞概述

本报告详细分析了2020年由巴西14岁少年Andres Alonso发现的Instagram Spark AR滤镜应用中的安全漏洞。该漏洞最初表现为开放重定向(Open Redirect),经Facebook安全团队进一步研究可升级为存储型XSS(Stored Cross-Site Scripting),最终获得$25,000的漏洞赏金。

漏洞背景

Instagram内置了Spark AR应用,允许用户:

  • 在Instagram相机中搜索AR滤镜
  • 实现照片和视频的AR创作
  • 通过分享滤镜主题链接的方式传播滤镜效果

漏洞发现过程

初始观察

  1. 滤镜链接分析

    • Instagram生成滤镜链接时,请求包含:
      • 名称(name)
      • 文件类型(file type)
      • 滤镜文件(.arexport)的大小
    • 默认预览文件名为preview.arexport
  2. 关键发现

    • 测试发现可以更改滤镜预览文件名称
    • 更改后滤镜通知信息会相应变化

XSS初步尝试

  1. 尝试在文件名中插入XSS或其他攻击代码
  2. 发现攻击代码无法直接执行
  3. 转向桌面版应用测试

网页源码分析

  1. 在网页源码中发现:

    • XSS Payload存在于两个meta标签中
    • 无法使用HTML开合符号(< >)
    • 可以使用双引号形成闭合
  2. 由于meta标签限制,XSS尝试无效

开放重定向漏洞

  1. 构造URL编码:

    http:&#x2F;&#x2F;www.evilzone.com
    
  2. 成型URL构造:

    0;url=http:&#x2F;&#x2F;www.evilzone.com"HTTP-EQUIV="refresh"any=".arexport
    
  3. 成功实现将用户重定向到恶意网站

漏洞升级

Facebook安全团队进一步研究发现该漏洞可升级为存储型XSS,构造的Payload如下:

<meta charset="x-imap4-modified-utf7">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi

技术要点总结

  1. 漏洞链

    • 文件名可控 → 元数据注入 → 开放重定向 → 存储型XSS
  2. 关键突破点

    • 滤镜预览文件名可被修改
    • 修改后的名称会反映在通知信息中
    • meta标签中的注入点
  3. 编码技巧

    • 使用HTML实体编码绕过过滤
    • 利用meta标签的特殊属性
  4. 漏洞升级路径

    • 从开放重定向到存储型XSS的升级过程

防御建议

  1. 输入验证

    • 对用户提供的文件名进行严格过滤
    • 禁止特殊字符和编码形式
  2. 输出编码

    • 在将用户提供的内容放入HTML前进行适当编码
  3. CSP策略

    • 实施严格的内容安全策略
    • 限制meta标签的使用
  4. 安全测试

    • 对用户可控的所有输入点进行XSS测试
    • 特别关注重定向功能的安全性

结论

此案例展示了看似简单的功能(文件名修改)如何通过精心构造的Payload演变为高危漏洞。安全研究人员应关注所有用户可控的输入点,特别是那些会影响页面元数据的部分。同时,这也证明了漏洞赏金计划在发现和修复安全漏洞中的价值。

Instagram Spark AR滤镜应用中的存储型XSS漏洞分析报告 漏洞概述 本报告详细分析了2020年由巴西14岁少年Andres Alonso发现的Instagram Spark AR滤镜应用中的安全漏洞。该漏洞最初表现为开放重定向(Open Redirect),经Facebook安全团队进一步研究可升级为存储型XSS(Stored Cross-Site Scripting),最终获得$25,000的漏洞赏金。 漏洞背景 Instagram内置了Spark AR应用,允许用户: 在Instagram相机中搜索AR滤镜 实现照片和视频的AR创作 通过分享滤镜主题链接的方式传播滤镜效果 漏洞发现过程 初始观察 滤镜链接分析 : Instagram生成滤镜链接时,请求包含: 名称(name) 文件类型(file type) 滤镜文件(.arexport)的大小 默认预览文件名为 preview.arexport 关键发现 : 测试发现可以更改滤镜预览文件名称 更改后滤镜通知信息会相应变化 XSS初步尝试 尝试在文件名中插入XSS或其他攻击代码 发现攻击代码无法直接执行 转向桌面版应用测试 网页源码分析 在网页源码中发现: XSS Payload存在于两个meta标签中 无法使用HTML开合符号( < >) 可以使用双引号形成闭合 由于meta标签限制,XSS尝试无效 开放重定向漏洞 构造URL编码: 成型URL构造: 成功实现将用户重定向到恶意网站 漏洞升级 Facebook安全团队进一步研究发现该漏洞可升级为存储型XSS,构造的Payload如下: 技术要点总结 漏洞链 : 文件名可控 → 元数据注入 → 开放重定向 → 存储型XSS 关键突破点 : 滤镜预览文件名可被修改 修改后的名称会反映在通知信息中 meta标签中的注入点 编码技巧 : 使用HTML实体编码绕过过滤 利用meta标签的特殊属性 漏洞升级路径 : 从开放重定向到存储型XSS的升级过程 防御建议 输入验证 : 对用户提供的文件名进行严格过滤 禁止特殊字符和编码形式 输出编码 : 在将用户提供的内容放入HTML前进行适当编码 CSP策略 : 实施严格的内容安全策略 限制meta标签的使用 安全测试 : 对用户可控的所有输入点进行XSS测试 特别关注重定向功能的安全性 结论 此案例展示了看似简单的功能(文件名修改)如何通过精心构造的Payload演变为高危漏洞。安全研究人员应关注所有用户可控的输入点,特别是那些会影响页面元数据的部分。同时,这也证明了漏洞赏金计划在发现和修复安全漏洞中的价值。