Estoy tratando de asegurarme de que mi instancia de Jenkins no sea explotable con el último exploit log4j.
Tengo un script de canalización que se ejecuta, intenté seguir estas instrucciones:
https://community.jenkins.io/t/apache-log4j-2-vulnerability-cve-2021-44228/990
Esta es una de mis etapas de mi script de canalización:
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 ." } } }Pero recibo un error diferente al que se describe aquí y no estoy seguro de si lo estoy verificando correctamente. Este es el error:
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) ....etcNo creo que un nombre de clase se interprete directamente como un argumento codeSource maravilloso en una canalización declarativa (a diferencia de una secuencia de comandos)
Prueba el enfoque de " ¿Cómo importar un archivo de clases en un Pipeline de Jenkins? ", con:
node{ def cl = load 'Classes.groovy' def a = cl.getProperty("org.apache.logging.log4j.core.lookup.JndiLookup").protectionDomain.codeSource ... } Tenga en cuenta que getCLassLoader() está deshabilitado de manera predeterminada y debe requerir la aprobación de secuencias de comandos en proceso del administrador de Jenkins .
Esta es probablemente la forma más fácil de verificar si Jenkins tiene la vulnerabilidad log4j (a través de complementos o de otra manera).
org.apache.logging.log4j.core.lookup.JndiLookup.class.protectionDomain.codeSource Si la salida es groovy.lang.MissingPropertyException: No such property: org for class: Script1 Está bien entonces, de lo contrario no está bien.
De esta manera, no tiene que cambiar su tubería para probar o pasar por el proceso de aprobación como se menciona en la otra respuesta , puede simplemente pegar y verificar sin necesidad de configurar adicionalmente.