恶意GIF利用Microsoft Teams漏洞劫持帐户

发布时间 2020-04-29

0x00 事件背景


CyberArk的研究人员发现Microsoft Teams中存在子域名接管漏洞,该漏洞使攻击者向用户发送恶意GIF图像达到窃取用户数据并劫持Teams账户的目的。

Microsoft Teams 是一款基于聊天的智能团队协作工具,可以同步进行文档共享,并为成员提供包括语音、视频会议在内的即时通讯工具。

由于用户不必共享GIF,只是看到它就能受到影响,因此该漏洞可以自动传播,并影响使用Teams桌面或Web浏览器版本的每个用户。



0x01 漏洞分析


该缺陷与Microsoft Teams处理图像资源身份验证的方式有关。每次打开Teams客户端时会创建一个临时的token或access token。此令牌以JWT的形式由Microsoft授权和身份验证服务器“login.microsoftonline.com”创建,允许用户查看个人或会话中分享的图像。



该应用程序使用两个令牌进行身份验证:authtoken和skypetoken。为了研究两个令牌的关系,我们提取了Teams客户端的流量,其中获取消息请求如下:

GET https://amer.ng.msg.teams.microsoft.com/v1/users/ME/conversations/19%3A...%40unq.gbl.spaces/messages?view=msnp24Equivalent|supportsMessageProperties&pageSize=200&startTime=1 HTTP/1.1

Host: amer.ng.msg.teams.microsoft.com

Connection: keep-alive

Pragma: no-cache

Cache-Control: no-cache

x-ms-session-id: 00000000000-0000-0000-0000-00000000000

BehaviorOverride: redirectAs404

x-ms-scenario-id: 00

x-ms-client-cpm: ApplicationLaunch

x-ms-client-env:

x-ms-client-type:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36

ClientInfo:

Accept: json

Sec-Fetch-Dest: empty

x-ms-client-version:

x-ms-user-type: user

Authentication: skypetoken=eyJhbGciOiJSUzI1NiIsImtpZCI6IkVhc3RlckVnZyA6KSIsInR5cCI6IkpXVCJ9.eyJ...

Origin: https://teams.microsoft.com

Sec-Fetch-Site: same-site

Sec-Fetch-Mode: cors

Referer: https://teams.microsoft.com/_

Accept-Encoding: gzip, deflate, br

Accept-Language: en-US,en;q=0.9

从报文中看出,客户端仅发送了一个身份验证令牌,该令牌可以在“Authentication”字段中找到,名称为“skypetoken”。显然要想发送消息,我们需要获得一个Skype令牌。Skype令牌从何而来呢?我们进一步研究了流量,找到了Teams客户创建skypetoken请求的会话:

POST /api/authsvc/v1.0/authz HTTP/1.1

Host: teams.microsoft.com

Connection: close

Content-Length: 0

Pragma: no-cache

Cache-Control: no-cache

x-ms-session-id: 00000000000-0000-0000-0000-00000000000

x-ms-scenario-id: 00

x-ms-user-type: user

x-ms-client-env:

x-ms-client-type:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IktleXMiLCJraWQiOiJLZXlzRXZlcnlXaGVyZSJ9.eyJ...

Accept: application/json, text/plain, */*

X-Client-UI-Language: en-us

Sec-Fetch-Dest: empty

ms-teams-authz-type: TokenRefresh

x-ms-client-version:

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36

Origin: https://teams.microsoft.com

Sec-Fetch-Site: same-origin

Sec-Fetch-Mode: cors

Referer: https://teams.microsoft.com/_

Accept-Encoding: gzip, deflate

Accept-Language: en-US,en;q=0.9

Cookie: {redacted}

从报文可以看出,authtoken生成了skype token。有了这两个令牌,我们就可以通过调用Teams API接口,实现发送消息、阅读消息、创建组、添加新用户或从中删除用户组、更改组的权限等功能。

authtoken cookie设置是发送给teams.microsoft.team或其他子域名,研究人员发现了两个存在劫持攻击漏洞的子域名:

1. aadsync-test.teams.microsoft.com

2. data-dev.teams.microsoft.com

如果攻击者可以让用户访问劫持的子域名,则受害者的浏览器会将cookie发送到攻击者的服务器,在收到authtoken之后,攻击者可以创建一个skype token,窃取受害者的Teams帐户数据。



有了上述被黑的子域名后,攻击者就可以通过向受害者或群聊的所有成员发送恶意链接(即GIF图像)来利用此漏洞。将图像的“src”属性设置为被黑的子域名,并发送给受害者。当接收者打开消息后,浏览器就会发送authtoken cookies到被黑的子域名,然后尝试加载该图像。之后攻击者利用authtoken cookies创建一个skype token,并最终获取受害者的所有数据。



0x02 漏洞验证


1. 研究人员还做了一个漏洞利用的PoC视频,如下所示:

https://fast.wistia.com/embed/medias/f4b25lcyzm

2. 此外,研究人员还编写了一个脚本,该脚本可抓取受害者的对话并进行线程处理,并将其保存到本地文件中,如图所示:



0x03 结论


由于该漏洞可以自动传播,类似于蠕虫病毒,从而导致破坏目标组织中的所有帐户。最终,攻击者可以访问您组织的Teams帐户中的所有数据,收集机密信息、会议和日历信息、竞争性数据、密码、私人信息、商业计划等。这个问题很关键,由于Microsoft Teams和Zoom等视频会议解决方案是在COVID-19流行期间,企业、学校甚至政府组织选择的主要通信渠道,这些应用程序中的数据量巨大,并且通常包括用户名、密码和机密业务信息,这使它们成为攻击者的主要目标。微软于3月20日删除了两个子域的错误配置的DNS记录,并在4月20号发布了补丁更新,缓解未来类似的安全风险。


0x04 参考链接


https://www.cyberark.com/threat-research-blog/beware-of-the-gif-account-takeover-vulnerability-in-microsoft-teams/

https://securityaffairs.co/wordpress/102344/hacking/hacking-microsoft-teams-accounts.html