“ Jenkins是一个可扩展的开源持续集成服务器。Jenkins 1.637及之前版本、Jenkins LTS 1.625.1及之前版本,存在不安全的反序列化漏洞,可使未经身份验证的远程攻击者在Jenkins主机上运行任意代码。”
01
—
漏洞概述
影响版本:
Jenkins 1.637及之前版本
Jenkins LTS 1.625.1及之前版本
利用条件:需要服务器开启CLI,开启方式
开启后,在http response头如下:
02
—
漏洞分析
CLI接口利用TCP Socket模式进行通信,入口点为
处理点:
变量p是一个代理协议AgentProtocol
分析CliProtocol:
实例化 CliProtocol.Handler 来处理,并且调用其中的run函数:
调用 runcli 针对socket连接进行处理:
Channel channel = cb.withMode(Mode.BINARY).withRestricted(true).withBaseLoader(Jenkins.getInstance().pluginManager.uberClassLoader).build(new BufferedInputStream(c.in), new BufferedOutputStream(c.out));
调用 hudson.remoting.ChannelBuilder#build 来处理传入的buffer缓冲区的数据,跟进这个看看。
跟进一下 hudson.remoting.ChannelBuilder.negotiate:
定位缓存区输入的is信息:
跟进 hudson.remoting.Capability#read
标准的反序列化的输入点了,之后就是调用Commons Collections执行反序列化下一步的命令执行操作了。具体EXP就不放出来了。
03
—