
Questo repository fornisce una soluzione alternativa per prevenire lo sfruttamento di SECURITY-3430 / CVE-2024-43044
Questo è un agente Java per l'uso con controller Jenkins che non dispongono della correzione per SECURITY-3430 (cioè fino alla versione 2.470 e LTS 2.452.3 incluse).
Trasforma la definizione della classe contenente la vulnerabilità SECURITY-3430 per prevenire lo sfruttamento. Se per qualche motivo fallisce, Jenkins viene forzatamente arrestato.
Questo workaround bloccherà completamente ClassLoaderProxy#fetchJar ed è quindi incompatibile con la funzionalità interessata dei plugin menzionati nell'avviso di sicurezza, a differenza della correzione regolare.
Questo workaround è stato testato con successo con diverse versioni recenti di Jenkins degli ultimi anni.
ATTENZIONE: A causa del funzionamento di questo workaround, si consiglia vivamente di eseguire regolarmente backup di Jenkins e di distribuire il workaround in modo progressivo.
Proteggere il processo del controller Jenkins dallo sfruttamento:
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
Applicare la trasformazione al file di classe RemoteClassLoader$ClassLoaderProxy.class specificato e scrivere il risultato in un file diverso:
java -jar /path/to/security3430-workaround.jar <source file> <target file>
Ciò potrebbe essere utilizzato per creare file remoting.jar minimamente modificati.
È possibile impostare due proprietà di sistema Java per modificare il comportamento di questo agente Java:
io.jenkins.security.Security3430Workaround.DISABLE:
Impostare su true per disabilitare la trasformazione della classe.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN:
Impostare su true per non arrestare il processo Jenkins quando la trasformazione della classe fallisce.
Raccomandato solo in situazioni specifiche e ristrette, ad esempio quando si monitorano attentamente i messaggi di log (vedere sotto).Entrambe devono essere impostate prima che la classe venga caricata e che venga effettuato un tentativo di trasformazione, idealmente come opzione della riga di comando -D.
I messaggi di log utilizzano il logger io.jenkins.security.Security3430Workaround.
I messaggi registrati a livello SEVERE indicano un fallimento nella trasformazione.
Eseguire il seguente codice nella console degli script di un agente Jenkins connesso per confermare l'efficacia di questo workaround:
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
Senza né correzione né workaround, questo stamperà un messaggio come il seguente, indicando uno sfruttamento riuscito: Result: [B@23edd8a0
Con questo workaround applicato, verrà sollevato un AbstractMethodError e verrà stampata una lunga traccia dello stack.
Concesso in licenza secondo i termini della licenza MIT. Copyright 2024 CloudBees, Inc.