
本文中,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程式的某些功能发生更改。

而在另一个模组Settings-Reducer.ts中,可以发现Slack功能设定更改的所有相关程式码:

也就是说,可以通过slack://settings+link的方式,实现对Slack程式所有功能设定的更改。
实现Slack下载文件储存位置的隐秘更改基于以上逆向发现,我发现可经由“PrefSSBFileDownloadPath”引数设定来对Slack文件下载储存位置进行更改,通过对它的设定,可以实现点选 slack://settings+link 方式构造的连结就能更改Slack下载文件储存位置,如下:
“slack://settings/?update={‘PrefSSBFileDownloadPath’:’其中的部分是可以精心构造的一点。但不巧的是,Slack对以上的连结构造是具备特殊字元过滤机制的,其中的冒号“:”表明这需要提供一个本地的根目录驱动路径。之后,我想到了SMB共享方式,这种方式不需要提供本地根目录驱动路径,但却可以符合其储存位置要求,完全可以绕过Slack在此的过滤防护。 所以,我自己架设了一个远端SMB服务系统35.193.130.2,然后slack://settings+link就变为:
这样一来,当我把这个slack://settings+link传送给其它Slack使用者后,一旦对方点选,其Slack应用程序中的文件下载储存位置就自动变为35.193.130.2\\apt:

当然,当对方执行了某个文件的下载后:

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

漏洞利用的攻击途径从现实环境来说,slack://settings+link应该经过必要的编码或模糊,要不然某些有安全意识的Slack使用者一眼就会识破,不会点选它。针对这种情况,有两种解决方法。
加入同一Slack群组的使用者这种在同一Slack群组中的成员使用者,怎么来实现这种攻击呢?在研究了Slack的说明文件之后,我发现Slack禁止在群组讯息中出现超链接相关字眼:
但经过对Slack API文件的阅读分析,我发现可以在附件“attachments”功能中来实现超链接的构造,具体方法是在Slack的POST提交请求中,新增一个名为“attachment” 的请求,以合法网站方式把slack://settings+link嵌入到其中,构造出我们想要的设定更改连结,如下:

当这条POST方式的讯息提交到Slack群组中后,它对Slack使用者显出的是合法的连结“http://google.com” ,但其实点选之后,载入的却是我们构造的设定更改连结:
因此,“上钩”的Slack使用者点选之后,他Slack程式的文件下载储存位置就会变为我设定的远端SMB系统。
未在同一Slack群组的其它Slack使用者除了在同一Slack群组的使用者,那么这个漏洞的利用范围还能不能再扩大呢?也就是说,如果不相互加入同一个Slack群组,能否向其他Slack使用者传送恶意连结利用这个漏洞?答案是可以的。
Slack群组可以订阅RSS推送,并可以用包含连结的站点更新发送给群组。为此,我们可以想像一种场景,假设某个非常受欢迎的reddit.com论坛模组,有好多Slack使用者都订阅了这个论坛,那么我在上面释出一个经恶意构造的slack://settings+link连结会怎样呢?作为测试之用,我在一个私人Reddit论坛中进行了发贴,发贴中包含有一个正常的超链接。由于Reddit论坛不允许直接的slack:// links连结,所以我又构造了从正常的超链接跳转到slack:// links连结的方法,如下:

这条帖子内容释出之后,订阅了这个Reddit论坛模组的使用者就会收到Reddit新帖子条目的更新提示,点选提示进入后就能预览到我们构造的恶意连结:

但这个技巧存在一个小小的不足,那就是当用户点选其中的恶意连结后,浏览器会跳出如下的应用切换提示框,只有点选“Yes”后,使用者Slack程式的文件下载储存位置才会发生改变:
总结该漏洞的利用技术可能会被一些懂行的具备安全意识的Slack使用者识破,但是,大量网络钓鱼事件的经验表明,使用者最好不要轻易点选来历不明的网页链接,尤其是,该漏洞可以通过伪装的RSS推送形成大范围影响。攻击者通过设定Slack使用者的文件下载储存位置,可以轻易控制受害者的下载档案,攻击者也可以修改这些下载档案,在其中捆绑木马等恶意软件。当受害者开启Slack中的下载档案时,其实就是与攻击者控制的远端SMB储存系统进行了互动,其开启的下载档案可能是被攻击者捆绑过木马的档案,那么,攻击者将会有更深入的入侵渗透可能。
还好,漏洞上报后,经Slack调查表明,目前为止没有任何该漏洞被在野利用过的线索或报告。
*参考来源:medium,clouds编译,转载请注明来自FreeBuf.COM
精彩推荐





























