利用Slack应用程序窃取Slack用户的下载文件

本文中,Tenable安全团队研究员David Wells分享了Windows版本Slack终端应用程序的一个漏洞,通过对Slack下载功能的利用,可以操控Slack受害者的下载文件存储设置,间接隐秘窃取Slack受害者的下载文件,深入利用可形成对受害者系统的远程控制。目前,该漏洞已经被Slack修复,并在最新的Slack v3.4.0版本中释放了补丁。

漏洞说明

该漏洞原理在于,攻击者只需在Slack群组中发送一条经过伪装构造的链接,上钩的受害者一旦点击加载,其Slack应用程序的下载文档存储位置就会发生更改,自动变为攻击者控制的远程SMB文件共享服务系统,之后,受害者在Slack应用中下载的任意文件都会被“悄悄”地存储(上传)到这个攻击者设置的远程SMB共享系统中。只有当受害者发现文件下载位置的异常后,手动修改回来,才能及时止损,切断这种“窃密”行为。

当然,通过这种方式,攻击者不仅能隐秘窃取受害者的下载文档,还能往下载过的文档中放入捆绑了木马的恶意文档,当受害得通过Slack打开这种恶意文档之后,其电脑系统就被攻击者远程控制了。

漏洞原因在于,Slack应用程序对其自身功能 slack:// links(加链接)方式,以及可点击链接的不当处理。以下是作者相关的漏洞发现分享。

逆向分析Slack功能设置

Slack是基于Electron架构的应用程序,逆向分析相对容易,作为Slack用户的我来说,我觉得Slack的“slack://”后加超链接的功能有点意思,其中可能存在安全隐患。结合逆向分析结果,经过一番研究,我在Slack逆向结果中找到了与“slack://”links功能对应的,用来处理其后链接(links)的代码模块 - protocol-link.ts,从中可以得知,设置 slack://setting+link 样式,点击之后就能使Slack程序的某些功能发生更改。

01.png而在另一个模块Settings-Reducer.ts中,可以发现Slack功能设置更改的所有相关代码:

02.png也就是说,可以通过slack://settings+link的方式,实现对Slack程序所有功能设置的更改。

实现Slack下载文档存储位置的隐秘更改

基于以上逆向发现,我发现可经由“PrefSSBFileDownloadPath”参数设置来对Slack文档下载存储位置进行更改,通过对它的设置,可以实现点击 slack://settings+link 方式构造的链接就能更改Slack下载文档存储位置,如下:

“slack://settings/?update={‘PrefSSBFileDownloadPath’:’<pathHere>’}”

其中的<pathHere>部份是可以精心构造的一点。但不巧的是,Slack对以上的链接构造是具备特殊字符过滤机制的,其中的冒号“:”表明这需要提供一个本地的根目录驱动路径。之后,我想到了SMB共享方式,这种方式不需要提供本地根目录驱动路径,但却可以符合其存储位置要求,完全可以绕过Slack在此的过滤防护。

所以,我自己架设了一个远程SMB服务系统35.193.130.2,然后slack://settings+link就变为:

03.png这样一来,当我把这个slack://settings+link发送给其它Slack用户后,一旦对方点击,其Slack应用程序中的文档下载存储位置就自动变为35.193.130.2\apt:

04.png当然,当对方执行了某个文档的下载后:

05.png就会自动把该文档存储(上传)到我控制的35.193.130.2中来:

06.png

漏洞利用的攻击途径

从现实环境来说,slack://settings+link应该经过必要的编码或模糊,要不然某些有安全意识的Slack用户一眼就会识破,不会点击它。针对这种情况,有两种解决方法。

加入同一Slack群组的用户

这种在同一Slack群组中的成员用户,怎么来实现这种攻击呢?在研究了Slack的说明文档之后,我发现Slack禁止在群组消息中出现超链接相关字眼:

07.png但经过对Slack API文档的阅读分析,我发现可以在附件“attachments”功能中来实现超链接的构造,具体方法是在Slack的POST提交请求中,添加一个名为“attachment” 的请求,以合法网站方式把slack://settings+link嵌入到其中,构造出我们想要的设置更改链接,如下:

08.png当这条POST方式的消息提交到Slack群组中后,它对Slack用户显出的是合法的链接“http://google.com” ,但其实点击之后,加载的却是我们构造的设置更改链接:

09.png因此,“上钩”的Slack用户点击之后,他Slack程序的文档下载存储位置就会变为我设置的远程SMB系统。

未在同一Slack群组的其它Slack用户

除了在同一Slack群组的用户,那么这个漏洞的利用范围还能不能再扩大呢?也就是说,如果不相互加入同一个Slack群组,能否向其他Slack用户发送恶意链接利用这个漏洞?答案是可以的。

Slack群组可以订阅RSS推送,并可以用包含链接的站点更新发送给群组。为此,我们可以想像一种场景,假设某个非常受欢迎的reddit.com论坛模块,有好多Slack用户都订阅了这个论坛,那么我在上面发布一个经恶意构造的slack://settings+link链接会怎样呢?作为测试之用,我在一个私人Reddit论坛中进行了发贴,发贴中包含有一个正常的超链接。由于Reddit论坛不允许直接的slack:// links链接,所以我又构造了从正常的超链接跳转到slack:// links链接的方法,如下:

10.png这条帖子内容发布之后,订阅了这个Reddit论坛模块的用户就会收到Reddit新帖子条目的更新提示,点击提示进入后就能预览到我们构造的恶意链接:

11.png但这个技巧存在一个小小的不足,那就是当用户点击其中的恶意链接后,浏览器会跳出如下的应用切换提示框,只有点击“Yes”后,用户Slack程序的文档下载存储位置才会发生改变:

12.png

总结

该漏洞的利用技术可能会被一些懂行的具备安全意识的Slack用户识破,但是,大量网络钓鱼事件的经验表明,用户最好不要轻易点击来历不明的网页链接,尤其是,该漏洞可以通过伪装的RSS推送形成大范围影响。攻击者通过设置Slack用户的文档下载存储位置,可以轻易控制受害者的下载文件,攻击者也可以修改这些下载文件,在其中捆绑木马等恶意软件。当受害者打开Slack中的下载文件时,其实就是与攻击者控制的远程SMB存储系统进行了交互,其打开的下载文件可能是被攻击者捆绑过木马的文件,那么,攻击者将会有更深入的入侵渗透可能。

还好,漏洞上报后,经Slack调查表明,目前为止没有任何该漏洞被在野利用过的线索或报告。

*参考来源:medium,clouds编译

发表评论 取消回复

电子邮件地址不会被公开。 必填项已用*标注