我们发现有人主动利用 Apache ActiveMQ 漏洞CVE-2023-46604下载Kinsing恶意软件(也称为 h2miner)和加密货币挖矿程序并感染 Linux 系统。一旦被利用,该漏洞会导致远程代码执行 (RCE),Kinsing 利用该漏洞下载并安装恶意软件。该漏洞本身是由于 OpenWire 命令无法验证可抛出类类型而导致的 RCE。
ActiveMQ(用Java编写)是Apache开发的开源协议,用于实现面向消息的中间件(MOM)。它的主要功能是在不同应用程序之间发送消息。它还包括 STOMP、Jakarta Messaging (JMS) 和 OpenWire 等附加功能。
Kinsing 恶意软件是一种严重威胁,主要针对基于 Linux 的系统,可以渗透服务器并在网络中快速传播。它通过利用 Web 应用程序中的漏洞或错误配置的容器环境来进入。
最近,Kinsing 背后的威胁参与者一直在利用CVE-2023-4911 (Looney Tunables)等备受瞩目的漏洞。一旦 Kinsing 感染系统,它就会部署一个加密货币挖掘脚本,利用主机的资源来挖掘比特币等加密货币,从而对基础设施造成重大损害,并对系统性能产生负面影响。
受影响的ActiveMQ版本
以下列表详细介绍了易受 CVE-2023-46604 影响的 Apache ActiveMQ 版本:
Apache ActiveMQ 5.18.0 5.18.3 之前的版本
Apache ActiveMQ 5.17.0 5.17.6 之前的版本
Apache ActiveMQ 5.16.0 5.16.7 之前的版本
Apache ActiveMQ 5.15.16 之前的版本
Apache ActiveMQ 旧版 OpenWire 模块 5.18.0 之前的 5.18.3
Apache ActiveMQ 旧版 OpenWire 模块 5.17.0 之前的 5.17.6
Apache ActiveMQ 旧版 OpenWire 模块 5.16.0 之前的 5.16.7
Apache ActiveMQ 旧版 OpenWire 模块 5.8.0 5.15.16 之前的版本
建议用户将 Java OpenWire 代理和客户端升级到版本 5.15.16、5.16.7、5.17.6 或 5.18.3,因为其中任何版本都可以修复该问题。
CVE-2023-46604 补丁差异
基于AMQ-9370,我们能够检查漏洞的根本原因,这是与 OpenWire 命令解组时可抛出类类型的验证有关的问题。
OpenWire 是一种二进制协议,专为使用面向消息的中间件而设计。它作为 ActiveMQ 的本机传输格式,ActiveMQ 是一种广泛使用的开源消息传递和集成平台。与其他格式相比,OpenWire 的二进制格式具有多种优势,例如有效利用带宽以及支持多种消息类型的能力。这些特性使其成为需要可靠且高性能消息传递系统的企业和组织的理想选择。
根据补丁差异,我们可以看到validateIsThrowable方法已包含在BaseDataStreamMarshall类中。
图 1. validateIsThrowable 方法包含在 BaseDataStreamMarshall 类中。
图 2. 无法验证 Throwable 类的类类型
当编组器无法验证 Throwable(Java 中表示异常和错误的对象)的类类型时,它可能会意外创建并执行任何类的实例。这可能会导致 RCE 漏洞,允许攻击者在服务器或应用程序上执行任意代码。因此,必须确保 Throwable 的类类型始终经过验证,以防止潜在的安全风险。
检测
自 11 月初以来,多起有关积极利用的报告浮出水面。这些报告是关于积极利用 CVE-2023-46604 的威胁行为者(例如HelloKitty 勒索软件系列背后的攻击者),以及Metasploit 和 Nuclei 等概念验证漏洞。考虑到 CVE-2023-46604 的 CVSS 评分为 9.8,总体检测结果仍然较低。
根据我们在野外恢复的 Kinsing 使用的漏洞,我们提供了可用于扫描的 YARA 规则:
rule JAVA_ClassPathXmlApplicationContext_CVE_2023_46604_A
{
meta:
author = "Peter Girnus"
description = "Detects exploit variant used by Kinsing Malware for CVE-2023-46604 ClassPathXmlApplicationContext."
cve = "CVE-2023-46604"
hash = "d8f55bbbcc20e81e46b9bf78f93b73f002c76a8fcdb4dc2ae21b8609445c14f9"
strings:
$s1 = "<?xml"
$s2 = "<beans"
$s3 = "<bean id="
$s4 = "<constructor-arg"
$s5 = "<list>"
$r1 = /\bclass=["']java\.lang\.ProcessBuilder["']/ nocase
$r2 = /<value>[^<]+\.(exe|vbs|bat|ps1|psm|sh)/ nocase
condition:
all of them
}
CVE-2023-46604 的 Kinsing 漏洞利用
目前,存在利用 ProcessBuilder 方法在受影响的系统上执行命令的现有公共漏洞。在 Kinsing 的背景下,CVE-2023-46604 被用来在易受攻击的系统上下载并执行 Kinsing 加密货币矿工和恶意软件。
图 3. 使用 ProcessBuilder 方法进行利用
成功利用后,加密货币矿工和恶意软件将下载恶意安装程序,然后使用 bash 执行恶意脚本。
图 4. 通过 bash 执行恶意脚本
执行 bash 脚本后,Kinsing 恶意软件会从各种架构的命令与控制 (C&C) 服务器下载额外的二进制文件和有效负载。
图 5. 从 C&C 服务器下载额外的二进制文件和有效负载
Kinsing 恶意软件的一个有趣特征是,它会在进程、crontab 和活动网络连接中主动寻找竞争的加密货币矿工(例如与 Monero 相关的矿工或利用 Log4Shell 和 WebLogic 漏洞的矿工)。然后它会继续终止它们的进程和网络连接。此外,Kinsing 还会从受感染主机的 crontab 中删除竞争性恶意软件和矿工。
图 6. Kinsing 搜索竞争的加密货币矿工
然后为 Kinsing 二进制文件分配一个 Linux 环境变量并执行。
图 7. 将 Linux 环境变量分配给 Kinsing 二进制文件,然后执行它
最后,Kinsing 添加了一个 cronjob,每分钟下载并执行其恶意引导脚本。
图 8. 负责每分钟下载并执行 Kinsing 恶意引导脚本的 cronjob
这确保了受影响主机上的持久性,并确保最新的恶意 Kinsing 二进制文件在受影响的主机上可用。
Kinsing 通过将其 rootkit 加载到/etc/ld.so.preload中,使其持久性和妥协性加倍,从而完成了整个系统的妥协。我们之前发表过关于过去的研究。
图 9. 加载 Kinsing rootkit“/etc/ld.so.preload”
结论
CVE-2023-46604 漏洞继续被各种威胁参与者广泛利用,例如 Kinsing 恶意软件背后的组织,他们利用此漏洞执行恶意活动,包括加密货币挖掘。这使其成为全球组织的重大安全风险。
使用 Apache ActiveMQ 的组织必须立即采取行动,尽快修补 CVE-2023-46604 ,并减轻与 Kinsing 相关的风险。鉴于恶意软件能够跨网络传播并利用多个漏洞,维护最新的安全补丁、定期审核配置并监控网络流量是否存在异常活动非常重要,所有这些都是全面网络安全策略的关键组成部分。