Jenkins漏洞分析 CVE-2018-1999001
字数 1557 2025-08-29 08:31:35
Jenkins漏洞分析:CVE-2018-1999001技术文档
漏洞概述
CVE-2018-1999001是一个影响Jenkins自动化服务器的高危漏洞(CVSS评分3.0)。该漏洞允许非授权攻击者通过移除Jenkins主文件系统中的特定文件来修改主安全开关,可能导致Jenkins完全放弃所有安全防护措施,包括防数据泄露的安全机制,最终使非授权用户能够以管理员权限访问Jenkins系统。
漏洞技术细节
Jenkins用户管理机制
-
用户存储结构:
- 每个Jenkins用户都会在
JENKINS_HOME/users/目录下创建一个对应的文件夹 - 每个用户文件夹中包含一个
config.xml文件,存储用户详细信息:- 加密的API token
- 用户邮件地址
- 用户全名
- 哈希后的用户密码(当使用Jenkins自建用户数据库时)
- 每个Jenkins用户都会在
-
安全配置机制:
- Jenkins的全局安全配置通过
Configure Global Security页面管理 - 从Jenkins 2.0开始,
enable security选项默认启用 - 安全状态保存在
JENKINS_HOME/config.xml文件中
- Jenkins的全局安全配置通过
认证机制分析
Jenkins支持两种认证方式:
- HTTP基本认证:用于脚本客户端,使用
username:password或username:APItoken组合 - 基于表单的认证:用于Web UI登录
基本认证流程:
- 客户端发送Base64编码的
username:password或username:APItoken组合 - Jenkins通过
Hudson.Security.BasicAuthenticationFilter模块处理认证 - 调用
User.getById(username, true)函数验证用户
漏洞利用原理
-
关键函数分析:
getById()调用getOrCreate()函数getOrCreate()使用getUnsanitizedLegacyConfigFileFor()获取用户配置文件路径- 存在路径遍历漏洞:
getUnsanitizedLegacyConfigFileFor()不对用户名进行安全处理
-
漏洞触发条件:
- 当满足以下三个条件时,Jenkins会移动配置文件:
- 未处理的遗留配置文件存在
- 遗留配置文件与处理后的配置文件不同
- 处理后的配置文件不存在
- 当满足以下三个条件时,Jenkins会移动配置文件:
-
具体利用方法:
- 使用特殊用户名
..构造请求:- 未处理路径:
/JENKINS_HOME/users/../config.xml→/JENKINS_HOME/config.xml - 处理后路径:
/JENKINS_HOME/users/$002e$002e/config.xml
- 未处理路径:
- 发送恶意请求:
其中curl JenkinsURL -H "Authorization: Basic Li46QU5ZUEFTU1dPUkQ="Li46QU5ZUEFTU1dPUkQ=是..:ANYPASSWORD的Base64编码
- 使用特殊用户名
-
后续攻击:
- 等待Jenkins重启使配置更改生效
- 系统将运行在"Security Disabled"模式,所有用户拥有管理员权限
- 攻击者可恢复原始配置以隐藏攻击痕迹
相关漏洞:CVE-2018-1999043
-
漏洞原理:
- 通过创建超长用户名的用户耗尽Java虚拟机内存
- 强制Jenkins管理员重启服务器
-
组合利用:
- 先利用CVE-2018-1999001移动主配置文件
- 再利用CVE-2018-1999043迫使服务器重启
- 服务器重启后以无安全模式运行
防护措施
- 及时更新Jenkins到修复版本
- 限制对Jenkins管理接口的访问
- 监控
JENKINS_HOME/config.xml文件的异常修改 - 实施严格的用户权限管理