导语:几个月前,我发现黑客可以利用一个漏洞访问目标公司的内部通信。 这个漏洞只需要点击几下,就可以访问企业内部网络、
Twitter等社交媒体账户,以及最常见的Yammer和Slack团队。
更新: The Next Web 写了一篇我发现的这个漏洞的文章。
引言
几个月前,我发现一个黑客可以轻松访问目标公司的内部通信网络的漏洞。 这个漏洞只需要点击几下,就可以访问企业内部网络、 Twitter 等社交媒体账户,以及最常见的 Yammer 和 Slack 团队账户。
这个漏洞到目前依然存在。这并不是一个可以马上可以修复的漏洞。在过去的几个月里,我主动联系了几十家公司,并把它们作为 bug 赏金计划的一部分,来修复它们因为错误配置所导致的这个漏洞。但由于受该漏洞影响的公司数量很大,我不可能联系到每一个公司。所以根据我的一些安全同行的建议,以及受影响的供应商的允许,我发布了这篇博文,这样每个受该漏洞影响的公司都可以立即自行采取防御行动。 下面介绍一下我所说的这个漏洞,在下文中统称为——Ticket Trick。
(这是我给这个漏洞起的名字并设计了一个LOGO,下文统称为Ticket Trick)
攻击入口——用目标"公司"的后缀的电子邮件注册账号
Slack、 Yammer 和 Facebook Workplace 等流行的商务沟通工具要求员工使用其所在公司的电子邮件地址进行注册。 一旦员工点击发送到他们内部的电子邮件地址的验证链接,他们就可以加入公司的团队并访问内部通信。
在 Slack 中,默认情况下,拥有相同企业邮箱后缀的用户可以加入同一个团队,这可以被 SSO 验证方式替换,或者设置为仅邀请用户可以加入。
在 Yammer 上,每个有公司邮箱后缀的用户都可以加入同一个团队。
在 Facebook Workplace 上,每个有公司邮箱后缀的人都可以加入同一个团队。
漏洞关键 ー服务台或电子邮件创建功能
方法#1——问题跟踪器
我是在尝试绕过 GitLab 认证时发现了这个漏洞。 任何拥有有效的@gitlab.com 邮箱后缀的人都可以加入 GitLab 的团队。
与此同时,GitLab 提供了一个功能,可以通过电子邮件将问题发送到一个唯一的@GitLab. com 邮箱中,从而产生了漏洞。 看到了吗?
Gitlab 是许许多多通过电子邮件的方式创建 issue 并提供问题追踪器的组织之一。
我使用这个问题创建的邮箱地址,尝试加入他们的 Slack 团队,只是为了看看会发生什么。
之后,我迅速刷新了我的问题列表,发现验证电子邮件被添加到了我的项目中:
这个新增的问题包含了加入他们内部 Slack 团队所需要的验证链接:
我点击了这个链接,看看它是否真的有用——结果被证明确实有用。 我收到了可以加入的频道列表,之后,我立即删除了我的账号并通知了 GitLab。
频道列表的截图
在我报告了漏洞的那个星期的星期天晚上,GitLab 团队对我的漏洞报告做出了回应。
他们立即采取了只允许邀请用户才能加入团队的做法,并采取额外措施告知客户这一功能的危险性。
方法#2——服务台
一般来说,只有少数网站有公共问题追踪器,所以我决定深入挖掘,看看是否存在更常见的攻击向量。 事实证明,确实如此,而且比我想象的更为普遍: 客户服务(customer service)。
发送到 support@company.com 的电子邮件有时会出现在一些在线支持门户的网站上,如 Zendesk、 Kayako、(Fresh) Desk、 WHMCS 或其他定制工具。 所以我决定尝试一下,看看黑客是否可以从数据库中提取链接。
大多数支持门户可以与单点登录集成: 经过身份验证的用户将自动登录到支持服务台,以确保无缝体验。 我测试的网站有一半以上不需要电子邮件的验证,这意味着任何人都可以使用任何电子邮件进行注册,并有效地接收由该电子邮件地址创建的任何验证链接。 在线视频分享平台[censored*]是众多不需要验证的公司之一。
所以我用了一个和这个平台发送验证链接的邮箱地址相同的账户 feedback@Slack. com 注册了一个 Slack 账号。
我通过Slack的“找到你的工作空间”功能,找到了[censored*]的Slack空间,并注册了电子邮件地址——support@[censored*]com。
之后,feedback@slack. com 会发送一封电子邮件到support@[censored*].com,并且在邮件中包含了验证链接。
当 support@[censored*].com 收到电子邮件,它将被分类为一个由 feedback@slack. com 创建的支持票据… 这个邮箱正是我注册的电子邮件。
下图中我进入了帮助中心,检查我的支持票据。
我有一个开放的支持票据… 其中包含了一个重要的验证链接,可以加入[censored*]团队。
[censored*]审计小组立即对这份漏洞报告作出了回应,并作为他们的 bug 赏金计划的一部分奖励了我 2000 美元。
其实,所有在没有电子邮件验证的情况下所集成的支持门户的网站都容易受到这种漏洞的攻击。而且真实情况可能会更糟糕。
我在 Kayako 和 Zendesk 发现了另外两个漏洞,这使得我可以绕过它们通常设置的电子邮件的验证过程。我能够一直执行这种攻击,即使没有启用 SSO 验证和电子邮件验证。 我在6月1日报告了这些安全问题,作为他们负责的漏洞披露计划的一部分,目前这两个漏洞都已经修复了。
除此之外,那些要求用户在注册时验证自己的电子邮件地址的网站,而不是在注册后在更改邮件地址时需要验证的网站也容易受到此类漏洞的攻击。
扩大漏洞的影响
如果一家公司不使用Slack,并且自认为它很安全……考虑到我发现这个问题的广泛性,这类公司可能不是很走运。例如:Yammer等其他企业通讯工具也容易受到这种漏洞的攻击:
我也能够加入一家非公开的公司的 Yammer 内部网络
因为我们可以读取发送到 support@前缀的企业邮箱的邮件,所以我们还可以看到发送到该电子邮件地址的所有密码重置链接。 事实证明,相当多的公司使用这种电子邮件地址注册第三方服务和社交媒体,如 Twitter。
这意味着攻击者还可以劫持任何使用 support@mail 邮箱注册的账户:
那我就能够劫持多个拥有超过100万粉丝的 Twitter 账户
在某些情况下,在网站上还有有一个特权帐户。 通过注册 no-reply@company.com 的邮箱,可以拦截发送给 support@company.com 的密码重置链接,并获得访问所有客户信息的特权账户的权限。
如果上述方法都不起作用,攻击者仍然可以读取并响应由电子邮件创建的之前的票证以及新接收到的支持票证。我的一个朋友曾经给某公司的客户支持邮箱地址发过一封电子邮件,经过分析后,我发现那家公司很容易受到这种漏洞的攻击,于是我用我朋友的电子邮件地址注册了账号,点击"我的支持案例"选项卡,就看到那封特定的电子邮件出现了。 只要他们在服务台上没有账户,我就完全可以读取并回复发送到客户服务中心的每一封电子邮件。 如果现在有用户认为他们正在通过邮件与客户服务部门交谈,那么实际上他们也有可能会被转而与黑客交谈。
供应商和公司的回应
现在让我们看看每家公司对信息披露的不同的处理方式,还挺有趣的。
大多数受该漏洞影响的公司都能非常专业地处理我的漏洞报告。一些公司甚至决定发给我高达8000美元的bug赏金,当然,我偶尔也会得到负面的回应,有些公司会选择完全无视我的漏洞披露报告。
GitLab的问题跟踪器 (# 21823 ,已披露)很快就采取了行动,禁用了他们自己公司域名的信任权限,并更改了他们的 Slack 设置。 并且,他们还更新了文档,以防止用户犯同样的错误。
我向 Slack 透露了这个问题(#23923,等待披露) 并探讨我们是否可以在更高的层面上防止这种情况发生。 尽管他们对这个问题没有直接的责任,但是这个问题影响了他们很大一部分客户。 Slack 认真对待了这个风险,改变了他们没有回复的电子邮件地址,增加了一个随机令牌。 这有效地防止了针对帮助台软件中的漏洞攻击。但事实上问题仍然存在于问题跟踪器和其他电子邮件集成方案中。尽管 Slack 本身并没有漏洞,但Slack 还是决定为我的漏洞报告慷慨奖励1500美元。
为了防止helpdesk的滥用,Slack 在他们的无回复邮件地址上增加了一个随机的标记
我也试着联系 Yammer 讨论这个问题。 最初我没有得到任何回应。 两周后,我又发了一封电子邮件,他们回复说,他们把邮件连同安全漏洞的定义一起转发给了 Yammer 团队。 到目前为止,他们还没有采取任何像 Slack 那样的积极措施在更高层次上解决这个问题。
攻击者仍然可以使用我发现的方法加入 Yammer 工作区
我还联系Kayako和Zendesk( #235139 已披露),告知这个关于 SSO 的绕过问题作为他们的部分 bug 赏金计划。 两个公司都解决了这个问题,分别给了我1000美元和750美元的赏金。
经验教训
一旦进入公司内部,大多数公司的安全性就会明显减弱。内部影响评估显示,员工在团队中每个人都可以访问的Slack 频道中粘贴密码、公司机密和客户信息。
我们需要继续在所有可能的地方寻找各个安全问题。这个漏洞存在于数百个经过安全专家筛选的网站中,但据我所知,目前还没有人发现它。
大公司根本不知道他们的员工在做什么。 我和一家大型支付处理公司的CISO讨论了这个缺陷。 他向我保证这不会成为问题,因为他们的员工不会通过 Slack 进行交流。 他们建立了自己的内部网络来处理这些事情。 为此,我加入了他们世界各地的332名员工经常使用的8个 Slack 频道,来证明了他的错误。 当然,最后我得到了5000美元的赏金。
如果你想知道哪些 Slack 团队可以通过公司的电子邮件加入,你可以使用 Slack的“找到你的团队“ 这个功能。
常见问题
我如何知道我的公司是否受到影响?
如果支持票据可以通过电子邮件创建,并且具有未验证电子邮件地址的用户可以访问支持票据,则存在此漏洞。它也存在于公共问题追踪程序或响应程序中,提供唯一的@company.com电子邮件地址,可直接将信息提交到票据、论坛帖子、私人消息或用户帐户。
作为一个受影响的公司,我们如何才能纠正这个问题?
我见过这么几种方法。Airbnb、LinkedIn和GitHub等公司提供的电子邮件地址具有不同的域名,如@reply.linkedin.com或@mail.github.com。它们不能用于注册Yammer或Slack等服务。Gitlab用此建议更新了他们的文档,以防止问题跟踪程序中的攻击。有一些则选择禁用电子邮件功能、服务门户或单一登录,而其他还有选择执行适当的电子邮件验证。当然也不建议与用官方支持的@E-mail地址注册Twitter、Slack或Zendesk等服务。
作为一个受影响的业务通信软件供应商,我们如何防止这种情况发生?
你可以为注册客户服务电子邮件的用户实现额外的安全措施,但在许多情况下,这样做既不实用,也不高效。 Facebook Workplace 有一个更好的方法,因为它们使用随机生成的电子邮件地址发送电子邮件,比如notification+ajivdw9kpwld@fbworkmail.com这对攻击者来说是无法猜测的。 针对我的发现,Slack 也决定实现这些随机的电子邮件地址。
为什么你要在数百家公司仍然处于危险的时候公开这些信息?
由于受影响的公司数量众多,我不可能一一通知所有的公司,且冒着来自没有征求安全建议的公司的法律威胁。 我只联系了一小部分受影响的公司和供应商,他们都有公开负责任的信息披露程序。 我认为,现在披露这个bug是一个艰难的决定,并可能直接导致安全攻击,但历史已经表明,我们把漏洞藏起来也不是一个好主意。
你是谁?
我是 Inti 我住在 比利时的Oilsjt。 在孩子的时候,我非常喜欢打破常理做事情。 我现在22岁,在比利时最大的广播电台Studio Brussel做一名创意开发者。 到了晚上,我仍然以一个有道德约束的黑客的身份破解一些东西,在此感谢谷歌、 Facebook、微软、雅虎等等。
你还有其他项目吗?
我劫持了一条特朗普的推文并制作了StalkScan.com,突出了Facebook图形搜索令人毛骨悚然的一面。除此之外,我喜欢在Facebook Bug Medium上写下我的Bug奖励结果。
后记
我要感谢了不起的Pete Yaworski ,他帮助我校对和修正了我的英语写作。 同时也要对来自 #teambelgium 的Arne, Preben 和 Jerome表示感谢,感谢他们守口如瓶。 感谢 Slack、 Gitlab 和 Zendesk 对我博文的合作和认可。