
Este repositorio proporciona una solución alternativa que previene la explotación de SECURITY-3430 / CVE-2024-43044
Este es un agente Java para usar con controladores de Jenkins que no tienen la corrección para SECURITY-3430 (es decir, hasta 2.470 inclusive y LTS 2.452.3).
Transforma la definición de la clase que contiene la vulnerabilidad SECURITY-3430 para prevenir su explotación. Si eso falla por alguna razón, Jenkins se detiene forzosamente.
Esta solución bloqueará completamente ClassLoaderProxy#fetchJar y, por lo tanto, es incompatible con la funcionalidad afectada de los plugins mencionados en el aviso de seguridad, a diferencia de la corrección regular.
Esta solución se ha probado con éxito con varias versiones recientes de Jenkins de los últimos años.
ADVERTENCIA: Debido a cómo funciona esta solución, recomendamos encarecidamente que realice copias de seguridad periódicas de Jenkins e implemente la solución de forma progresiva.
Proteger el proceso del controlador de Jenkins de la explotación:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
Aplicar la transformación al archivo de clase RemoteClassLoader$ClassLoaderProxy.class especificado y escribir el resultado en un archivo diferente:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
Esto podría usarse para crear archivos remoting.jar mínimamente modificados.
Se pueden establecer dos propiedades del sistema Java para cambiar el comportamiento de este agente Java:
io.jenkins.security.Security3430Workaround.DISABLE:
Establecer esto a true para deshabilitar la transformación de clases.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
Establecer esto a true para no detener el proceso de Jenkins cuando falla la transformación de clases.
Solo se recomienda en situaciones específicas limitadas, por ejemplo, cuando se supervisan de cerca los mensajes de registro (ver más abajo).Ambas deben configurarse antes de que se cargue la clase y se intente la transformación, idealmente como una opción de línea de comandos -D.
Los mensajes de registro utilizan el registrador io.jenkins.security.Security3430Workaround.
Los mensajes registrados en SEVERE indican un fallo en la transformación.
Ejecute el siguiente código en la consola de scripts de un agente Jenkins conectado para confirmar la efectividad de esta solución:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
Sin corrección ni solución, esto imprimirá un mensaje como el siguiente, indicando una explotación exitosa: Result: [B@23edd8a0
Con esta solución aplicada, esto lanzará un AbstractMethodError e imprimirá un rastro de pila largo.
Licenciado bajo los términos de la Licencia MIT. Copyright 2024 CloudBees, Inc.