74

挖洞经验 | 利用Slack应用程序窃取Slack用户的下载文件

 5 years ago
source link: https://www.tuicool.com/articles/jMbMvmq
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

BvaeEv2.jpg!web 本文中,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程序的某些功能发生更改。

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

mqMFviy.jpg!web 也就是说,可以通过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就变为:

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

uAvY3eM.jpg!web 当然,当对方执行了某个文档的下载后:

7VfaMrE.jpg!web 就会自动把该文档存储(上传)到我控制的35.193.130.2中来:

BnANZj3.jpg!web

漏洞利用的攻击途径

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

加入同一Slack群组的用户

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

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

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

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

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

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

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

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

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

ummuUfm.jpg!web

总结

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

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

*参考来源: medium ,clouds编译,转载请注明来自FreeBuf.COM 


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK