跳转至

【tabby 案例随笔】sysaid CVE-2023-47246

前言

最近开始运营 tabby 的相关规则库,后续会有一些类似的使用 tabby 分析漏洞的随笔。

在 11 月初,微软安全团队披露了 Lace Tempest 黑客团队利用 SysAid 软件的 0day 漏洞 (CVE-2023-47246)进行勒索软件分发的安全事件。后续,github 上也出现了该漏洞的 exp。本文主要以该漏洞为例来讲述面对混淆商业代码场景下 tabby 的相关使用。

环境搭建

下载路径:

  • 未修复版本 https://cdn3.sysaid.com/OnPremInstall/23.3.35/SysAidServer64.exe
  • 修复版本 https://cdn3.sysaid.com/OnPremInstall/23.3.36/SysAidServer64.exe

安装到输入 license 阶段,将目录下的代码拷贝出来,并压缩成 war 格式,交给 tabby 扫描得到代码属性图。

漏洞分析

目前,网上已经有一些分析和利用了,其主要原因在于接口 com.ilient.server.UserEntry#doPost 未正确处理用户输入的 accountId 并在后续拼接文件路径导致的任意目录穿越漏洞。 首先,程序将用户的 post 内容转化为一临时的 zip 文件,该文件将作为输入调用到 a 函数,同时传入的 var64 是用户可控的 accountId 内容 传递到 a 函数后,将对 zip 文件进行解压,这里开发者其实也考虑到了解压路径穿越的问题(zip-slip),做了相应的检查,但是在最终拼接的时候拼接上了由用户传入的父目录 var1,也就是 accountId 的内容,还是造成了路径穿越的问题。 通过构造 accountId 为 tomcat root 目录,并在 zip 文件中加入恶意的 jsp 文件即可达成 rce 的效果。具体利用见 https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2023/CVE-2023-47246.yaml。

自动化查找

从上面的漏洞分析来看,这个漏洞涉及到的代码并不复杂,那为什么到 23.3.36 版本才被发现呢? 我猜主要原因在于 1. 商业代码不开源,但可通过一些手段拿到源码 2. 代码进行了混淆处理,人工审计难度较大,并且其项目代码量也是相对较大的 但其实这些原因对于自动化工具来说并不是问题,接上环境搭建中用 tabby 生成的代码属性图来进行漏洞挖掘,如下图所示(这里为了方便展示,直接指定的了漏洞类 UserEntry,实际情况可以通过不断修改查询语句得到图中的链路)。 图示的其中一条链路展示的就是上述分析的调用流程

match (source:Method {IS_ENDPOINT:true,CLASSNAME:"com.ilient.server.UserEntry"})
match (sink:Method {IS_SINK:true, VUL:"FILE_WRITE"})
call tabby.beta.findPath(source, "-", sink, 8, false) yield path
return path