CVE-2024-23897 Jenkins 任意文件读取漏洞

项目介绍

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。

项目地址

https://www.jenkins.io/zh/

漏洞概述

Jenkins 有一个内置的命令行界面CLI,在处理 CLI 命令时Jenkins 使用args4j 库解析 Jenkins 控制器上的命令参数和选项。此命令解析器具有一个功能,可以将@参数中后跟文件路径的字符替换为文件内容 ( expandAtFiles)。

根据Jenkins 官方描述,具有Overall/Read权限的攻击者可以读取整个文件,未授权的攻击者仅能读取文件前几行内容。攻击者可以通过读取jenkins文件获取相关密钥从而实现命令执行。

此功能默认启用,Jenkins 2.441 及更早版本、LTS 2.426.2 及更早版本默认不会禁用它。鉴于漏洞 exp 已公开,为避免您的资产受到影响,建议尽快安排修复升级方案。

影响版本

<= Jenkins 2.441、<= LTS 2.426.2

环境搭建

1、下载漏洞版本的jenkins

https://mirrors.jenkins.io/war-stable/

2、运行命令

java -jar jenkins.war --httpPort=8080

漏洞复现

1、下载jenkins-cli.jar,CLI 客户端可以直接在Jenkins主机下载

2、执行poc

漏洞分析

根据官方描述,问题出在args4j 库的expandAtFiles,因此在对应方法上直接下断点。根据调用堆栈,分析执行流程。

在main方法中会首先检查当前命令是否是who-am-i或者help,如果使用其他命令就会检查权限,并出现如下错误。

通过使用help命令绕过权限校验,继续跟踪调用流程。当getAtSyntax属性为true时,将通过expandAtFiles继续解析参数

在expandAtFiles中如果检测到@开头的参数,则会读取对应文件内容并返回

由于文件内容不符合参数格式要求,因此最后作为异常返回

由于读取的文件内容最后是通过异常返回的,因此不同的命令返回的结果长度不同,如果没有权限,则只能使用help或者who-am-i命令,返回的长度有限。但是当攻击者具备Overall/Read权限时,就可以使用更多jenkins命令,从而读取更多文件内容。这里仅仅分析漏洞原理,不在深究。

在新版本中,jenkins默认关闭了ALLOW_AT_SYNTAX参数

修复方式

升级到最新版或者禁用cli功能

参考链接

https://www.jenkins.io/security/advisory/2024-01-24/#SECURITY-3314

https://mp.weixin.qq.com/s/9xXO73YGi5xOQQ_Uakregw

https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

https://github.com/jenkinsci/jenkins/commit/554f03782057c499c49bbb06575f0d28b5200edb

相关推荐
斯普信专业组18 分钟前
Apidog MCP服务器,连接API规范和AI编码助手的桥梁
运维·服务器·人工智能
wayuncn19 分钟前
深度解析物理机服务器故障修复时间:影响因素与优化策略
运维·服务器·物理机·服务器租用·服务器托管·物理服务器·哈尔滨idc
人间不清醒ab41 分钟前
Ubuntu ping网络没有问题,但是浏览器无法访问到网络
linux·运维·ubuntu
黄暄1 小时前
Docker项目部署深度解析:从基础命令到复杂项目部署
运维·笔记·docker·容器·持续部署
秦jh_1 小时前
【Linux网络】传输层协议UDP
linux·运维·服务器·网络·udp
饼干ovo2 小时前
Linux下软件安装实战
linux·运维·服务器
2302_799525742 小时前
【Linux】第十八章 调优系统性能
linux·运维·服务器
上海云盾-高防顾问2 小时前
DDoS与CC攻击:谁才是服务器的终极威胁?
运维·服务器·ddos
HvrI12 小时前
【解决】自己的域名任何端口都访问不到,公网地址正常访问,服务器报错500。
运维·服务器·阿里云
Rverdoser2 小时前
高防服务器流量“清洗”什么意思
运维·服务器