挖洞经验 | 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创作
- 通过分享滤镜主题链接的方式传播滤镜效果
漏洞发现过程
初始观察
-
滤镜链接分析:
- Instagram生成滤镜链接时,请求包含:
- 名称(name)
- 文件类型(file type)
- 滤镜文件(.arexport)的大小
- 默认预览文件名为
preview.arexport
- Instagram生成滤镜链接时,请求包含:
-
关键发现:
- 测试发现可以更改滤镜预览文件名称
- 更改后滤镜通知信息会相应变化
XSS初步尝试
- 尝试在文件名中插入XSS或其他攻击代码
- 发现攻击代码无法直接执行
- 转向桌面版应用测试
网页源码分析
-
在网页源码中发现:
- XSS Payload存在于两个meta标签中
- 无法使用HTML开合符号(< >)
- 可以使用双引号形成闭合
-
由于meta标签限制,XSS尝试无效
开放重定向漏洞
-
构造URL编码:
http://www.evilzone.com -
成型URL构造:
0;url=http://www.evilzone.com"HTTP-EQUIV="refresh"any=".arexport -
成功实现将用户重定向到恶意网站
漏洞升级
Facebook安全团队进一步研究发现该漏洞可升级为存储型XSS,构造的Payload如下:
<meta charset="x-imap4-modified-utf7">&ADz&AGn&AG0&AEf&ACA&AHM&AHI&AGO&AD0&AGn&ACA&AG8Abg&AGUAcgByAG8AcgA9AGEAbABlAHIAdAAoADEAKQ&ACAAPABi
技术要点总结
-
漏洞链:
- 文件名可控 → 元数据注入 → 开放重定向 → 存储型XSS
-
关键突破点:
- 滤镜预览文件名可被修改
- 修改后的名称会反映在通知信息中
- meta标签中的注入点
-
编码技巧:
- 使用HTML实体编码绕过过滤
- 利用meta标签的特殊属性
-
漏洞升级路径:
- 从开放重定向到存储型XSS的升级过程
防御建议
-
输入验证:
- 对用户提供的文件名进行严格过滤
- 禁止特殊字符和编码形式
-
输出编码:
- 在将用户提供的内容放入HTML前进行适当编码
-
CSP策略:
- 实施严格的内容安全策略
- 限制meta标签的使用
-
安全测试:
- 对用户可控的所有输入点进行XSS测试
- 特别关注重定向功能的安全性
结论
此案例展示了看似简单的功能(文件名修改)如何通过精心构造的Payload演变为高危漏洞。安全研究人员应关注所有用户可控的输入点,特别是那些会影响页面元数据的部分。同时,这也证明了漏洞赏金计划在发现和修复安全漏洞中的价值。