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用户管理机制

  1. 用户存储结构

    • 每个Jenkins用户都会在JENKINS_HOME/users/目录下创建一个对应的文件夹
    • 每个用户文件夹中包含一个config.xml文件,存储用户详细信息:
      • 加密的API token
      • 用户邮件地址
      • 用户全名
      • 哈希后的用户密码(当使用Jenkins自建用户数据库时)
  2. 安全配置机制

    • Jenkins的全局安全配置通过Configure Global Security页面管理
    • 从Jenkins 2.0开始,enable security选项默认启用
    • 安全状态保存在JENKINS_HOME/config.xml文件中

认证机制分析

Jenkins支持两种认证方式:

  1. HTTP基本认证:用于脚本客户端,使用username:passwordusername:APItoken组合
  2. 基于表单的认证:用于Web UI登录

基本认证流程:

  1. 客户端发送Base64编码的username:passwordusername:APItoken组合
  2. Jenkins通过Hudson.Security.BasicAuthenticationFilter模块处理认证
  3. 调用User.getById(username, true)函数验证用户

漏洞利用原理

  1. 关键函数分析

    • getById()调用getOrCreate()函数
    • getOrCreate()使用getUnsanitizedLegacyConfigFileFor()获取用户配置文件路径
    • 存在路径遍历漏洞:getUnsanitizedLegacyConfigFileFor()不对用户名进行安全处理
  2. 漏洞触发条件

    • 当满足以下三个条件时,Jenkins会移动配置文件:
      1. 未处理的遗留配置文件存在
      2. 遗留配置文件与处理后的配置文件不同
      3. 处理后的配置文件不存在
  3. 具体利用方法

    • 使用特殊用户名..构造请求:
      • 未处理路径:/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编码
  4. 后续攻击

    • 等待Jenkins重启使配置更改生效
    • 系统将运行在"Security Disabled"模式,所有用户拥有管理员权限
    • 攻击者可恢复原始配置以隐藏攻击痕迹

相关漏洞:CVE-2018-1999043

  1. 漏洞原理

    • 通过创建超长用户名的用户耗尽Java虚拟机内存
    • 强制Jenkins管理员重启服务器
  2. 组合利用

    • 先利用CVE-2018-1999001移动主配置文件
    • 再利用CVE-2018-1999043迫使服务器重启
    • 服务器重启后以无安全模式运行

防护措施

  1. 及时更新Jenkins到修复版本
  2. 限制对Jenkins管理接口的访问
  3. 监控JENKINS_HOME/config.xml文件的异常修改
  4. 实施严格的用户权限管理

参考链接

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的全局安全配置通过 Configure Global Security 页面管理 从Jenkins 2.0开始, enable security 选项默认启用 安全状态保存在 JENKINS_HOME/config.xml 文件中 认证机制分析 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_HOME/users/../config.xml → /JENKINS_HOME/config.xml 处理后路径: /JENKINS_HOME/users/$002e$002e/config.xml 发送恶意请求: 其中 Li46QU5ZUEFTU1dPUkQ= 是 ..:ANYPASSWORD 的Base64编码 后续攻击 : 等待Jenkins重启使配置更改生效 系统将运行在"Security Disabled"模式,所有用户拥有管理员权限 攻击者可恢复原始配置以隐藏攻击痕迹 相关漏洞:CVE-2018-1999043 漏洞原理 : 通过创建超长用户名的用户耗尽Java虚拟机内存 强制Jenkins管理员重启服务器 组合利用 : 先利用CVE-2018-1999001移动主配置文件 再利用CVE-2018-1999043迫使服务器重启 服务器重启后以无安全模式运行 防护措施 及时更新Jenkins到修复版本 限制对Jenkins管理接口的访问 监控 JENKINS_HOME/config.xml 文件的异常修改 实施严格的用户权限管理 参考链接 CyberArk实验室漏洞分析原文