
Agente Java que transforma uma classe vulnerável para bloquear a exploração da CVE-2024-43044 em controladores Jenkins, com desligamento forçado opcional em caso de falha.
Este é um agente Java para uso com controladores Jenkins que não possuem a correção para SECURITY-3430 (ou seja, até e incluindo as versões 2.470 e LTS 2.452.3).
Ele transforma a definição da classe que contém a vulnerabilidade SECURITY-3430 para evitar a exploração. Se isso falhar por algum motivo, o Jenkins é interrompido à força.
Esta solução alternativa bloqueará completamente ClassLoaderProxy#fetchJar e, portanto, é incompatível com a funcionalidade afetada dos plugins mencionados no aviso de segurança, ao contrário da correção normal.
Esta solução alternativa foi testada com sucesso em diversas versões recentes do Jenkins dos últimos anos.
AVISO: Devido à forma como esta solução alternativa funciona, recomendamos fortemente que você faça backups regulares do Jenkins e implemente a solução alternativa progressivamente.
Proteja o processo do controlador Jenkins contra exploração:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
Aplique a transformação ao arquivo de classe RemoteClassLoader$ClassLoaderProxy.class especificado e escreva o resultado em um arquivo diferente:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
Isso pode ser usado para criar arquivos remoting.jar minimamente modificados.
Duas propriedades de sistema Java podem ser definidas para alterar o comportamento deste agente Java:
io.jenkins.security.Security3430Workaround.DISABLE:
Defina essa propriedade como true para desabilitar a transformação de classe.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
Defina essa propriedade como true para não interromper o processo Jenkins quando a transformação de classe falhar.
Recomendada apenas em situações específicas e restritas, por exemplo, ao monitorar de perto as mensagens de log (veja abaixo).Ambas precisam ser definidas antes que a classe seja carregada e antes que uma tentativa de transformação seja feita, idealmente como uma opção de linha de comando -D.
As mensagens de log usam o logger io.jenkins.security.Security3430Workaround.
Mensagens registradas no nível SEVERE indicam falha na transformação.
Execute o seguinte código no console de scripts de um agente Jenkins conectado para confirmar a eficácia desta solução alternativa:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
Sem correção nem solução alternativa, isso imprimirá uma mensagem como a seguinte, indicando exploração bem-sucedida: Result: [B@23edd8a0
Com esta solução alternativa aplicada, isso lançará um AbstractMethodError e imprimirá um longo stack trace.
Licenciado sob os termos da Licença MIT. Copyright 2024 CloudBees, Inc.