HTTPS Everywhere 如何从隐身窗口泄露我的 Twitter 会话?

信息安全 tls 铬合金 推特
2021-09-11 19:57:15

我为与我的个人帐户分开的企业/网站管理几个 Twitter 帐户。为简单起见,我更喜欢从隐身窗口登录,这样我就不需要退出我的主要(个人)Twitter 帐户。

当我最近在隐身窗口中登录其中一个辅助帐户,关闭窗口,然后在非隐身主窗口中访问 twitter 时登录该辅助帐户时,我感到震惊。

我做了一些测试,发现无论我当前是否在主浏览器会话中登录 Twitter,无论何时我通过隐身窗口登录,都会发生自动登录。如果我让隐身窗口保持打开状态并登录到另一个帐户,主浏览器会话也会切换到该 Twitter 帐户。

在进行了一些额外的探索之后,我决定禁用我在隐身模式下启用的所有扩展,以确定这是否相关。禁用所有扩展后问题消失了。我获准在隐身模式下运行的唯一 2 个扩展是 Adblock 和 HTTPS Everywhere。我分别启用了它们中的每一个,并且仅在启用 HTTPS Everywhere 时才会出现问题。我进一步确定这个问题似乎只发生在 Twitter 上。以隐身模式(启用 HTTPS Everywhere)登录到不同的 Facebook、Gmail 或 Reddit 帐户不会影响主浏览器会话中的登录状态。

显然,这是一个安全问题,特别是对于一个面向隐私的扩展会泄露会话数据。具体来说,我想知道:

  • HTTPS Everywhere 如何帮助 Twitter 摆脱隐身模式“沙盒”?
  • 为什么 Twitter 会发生这种情况,而其他网站却没有?
  • 恶意网站可以通过哪些方式利用此漏洞窃取或更改用户凭据?

注意:这不会在 Firefox 中使用启用 HTTPS Everywhere 的隐私浏览模式发生。

2个回答

我是 HTTPS Everywhere 的维护者,刚刚合并了一个修复此问题的拉取请求。它应该在下一个版本中(在 1-2 周内发布)。为了将来参考,将这些提交到 Github 意味着它们会尽快得到修复 :)。https://github.com/efforg/https-everywhere

我发现了一个HTTPs Everywhere 错误报告,解释了为什么会发生这种情况:

这似乎是一个 Chrome API 错误。我们得到了这个onCookieChanged事件,我们在那个事件中得到的 cookie 有一个storeId0不管它来自哪里(隐身或不隐身)。然后我们右转并在 cookie 上设置安全标志并发出cookies.set(cookie). 由于storeId仍然是默认存储,cookie 泄漏到正常模式。

目前尚不清楚为什么它似乎发生在某些网站上而不是其他网站上,但网络上的其他消息来源已经证实,这个问题在 Twitter 上确实出现了。可能 HTTPs Everywhere 仅在尚未设置安全标志的情况下修改 cookie,并且其他主要网站已经在其 cookie 上设置了安全标志,而 Twitter 没有。欢迎对此进行更多研究。

我已将错误报告重新提交到该项目更常用的 GitHub 错误跟踪器,并建议检测隐身模式,并且在隐身模式下操作时不要重写 cookie。