作者:Le1a@threatbook
校验:jweny@threatboook
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。Jenkins 有一个内置的命令行界面(CLI),可从脚本或 shell 环境访问 Jenkins。处理 CLI 命令时, Jenkins 使用args4j库解析 Jenkins 控制器上的命令参数和选项。
Jenkins处理CLI命令的命令解析器中的expandAtFile功能存在任意文件读取漏洞,未经身份认证的远程攻击者利用该漏洞可以读取部分文件的有限行内容,攻击者经过身份验证或目标Jenkins更改了默认”Security”配置可以通过该漏洞读取任意文件,攻击者进一步利用该漏洞并结合其他功能可能导致任意代码执行。
该漏洞成因比较简单。
通过补丁可以发现,主要是对CLICommand.java
文件做了修改。
跟进该文件,可以发现在main函数中,把CLI的参数传入了parseArgument()
函数进行解析
继续跟进
继续跟进到expandAtFiles()
函数后,可以发现,如果参数以@
开头,那么将会把@
后面的内容当作路径,建立一个File对象,并且会读取该文件的内容,并添加至result中返回。
而CLI参数可控,所以通过以下命令即可读取Jenkins中的master.key
文件
java -jar jenkins-cli.jar -s http://localhost:9095/ who-am-i @/var/jenkins_home/secrets/master.key
通过CLI工具读取目标服务器上的master.key文件
java -jar jenkins-cli.jar -s http://localhost:9095/ who-am-i @/var/jenkins_home/secrets/master.key
16 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!