管道作业中的Jenkins log4j漏洞测试

jbose2ul  于 2022-11-06  发布在  Jenkins
关注(0)|答案(2)|浏览(274)

我试图确保我的Jenkins示例不会被最新的log4j漏洞利用。
我有一个运行的管道脚本,我尝试按照以下指令:
https://community.jenkins.io/t/apache-log4j-2-vulnerability-cve-2021-44228/990
这是我的管道脚本的一个阶段:

stage('Building image aaa') {
      steps{
        script {
          sh "echo executing"
          org.apache.logging.log4j.core.lookup.JndiLookup.class.protectionDomain.codeSource
          sh "docker build --build-arg SCRIPT_ENVIRONMENT=staging -t $IMAGE_REPO_NAME:$IMAGE_TAG ."
        }
      }
    }

但是我得到了一个与这里描述的不同的错误,我不确定我是否正确地检查了这个错误。

groovy.lang.MissingPropertyException: No such property: org for class: groovy.lang.Binding
    at groovy.lang.Binding.getVariable(Binding.java:63)
    at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:271)
    at org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:353)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:357)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:333)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:333)
    at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:333)
    at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:29)
    at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:20)
    at WorkflowScript.run(WorkflowScript:31)
    at ___cps.transform___(Native Method)
    at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:74)
    at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
....etc
xyhw6mcr

xyhw6mcr1#

这可能是检查Jenkins是否有log4j漏洞(通过插件或其他方式)的最简单方法。
1.转到https://your-jenkins.domain/script
1.粘贴org.apache.logging.log4j.core.lookup.JndiLookup.class.protectionDomain.codeSource
如果输出是groovy.lang.MissingPropertyException: No such property: org for class: Script1那么你很好,否则你不好。
这样,您就不必像other answer中提到的那样,更改管道以进行测试或通过审批流程,您只需粘贴和验证,而无需额外配置。

nhhxz33t

nhhxz33t2#

我不认为类名会被直接解释为声明性管道中的groovy codeSource参数(而不是脚本化管道)
尝试使用“How to import a file of classes in a Jenkins Pipeline?“的方法:

node{
    def cl = load 'Classes.groovy'
    def a = cl.getProperty("org.apache.logging.log4j.core.lookup.JndiLookup").protectionDomain.codeSource
    ...
}

请注意,getCLassLoader()在默认情况下是不允许的,并且应该从Jenkins administrator In-process Script Approval请求。

相关问题