
Ce dépôt fournit une solution de contournement empêchant l'exploitation de SECURITY-3430 / CVE-2024-43044
Il s'agit d'un agent Java destiné aux contrôleurs Jenkins qui ne disposent pas du correctif pour SECURITY-3430 (c'est-à-dire jusqu'à la version 2.470 incluse et LTS 2.452.3).
Il transforme la définition de la classe contenant la vulnérabilité SECURITY-3430 pour empêcher son exploitation. Si cela échoue pour une raison quelconque, Jenkins est arrêté de force.
Ce contournement bloquera complètement ClassLoaderProxy#fetchJar et est donc incompatible avec la fonctionnalité affectée des plugins mentionnés dans l'avis de sécurité, contrairement au correctif standard.
Ce contournement a été testé avec succès avec plusieurs versions récentes de Jenkins des dernières années.
AVERTISSEMENT : En raison du fonctionnement de ce contournement, nous recommandons vivement de faire régulièrement des sauvegardes de Jenkins et de déployer le contournement progressivement.
Protéger le processus du contrôleur Jenkins contre l'exploitation :
java -javaagent:/path/to/security3430-workaround.jar -jar jenkins.war
Appliquer la transformation au fichier de classe RemoteClassLoader$ClassLoaderProxy.class spécifié et écrire le résultat dans un fichier différent :
java -jar /path/to/security3430-workaround.jar <source file> <target file>
Cela pourrait être utilisé pour créer des fichiers remoting.jar légèrement modifiés.
Deux propriétés système Java peuvent être définies pour modifier le comportement de cet agent Java :
io.jenkins.security.Security3430Workaround.DISABLE :
Définissez cette propriété sur true pour désactiver la transformation de classe.io.jenkins.security.Security3430Workaround.SKIP_SHUTDOWN :
Définissez cette propriété sur true pour ne pas arrêter le processus Jenkins en cas d'échec de la transformation de classe.
Recommandé uniquement dans des situations spécifiques et étroites, par exemple lorsqu'on surveille attentivement les messages de journalisation (voir ci-dessous).Les deux doivent être définies avant que la classe ne soit chargée et qu'une tentative de transformation soit effectuée, idéalement en tant qu'option de ligne de commande -D.
Les messages de journalisation utilisent le journalisateur io.jenkins.security.Security3430Workaround. Les messages enregistrés au niveau SEVERE indiquent un échec de la transformation.
Exécutez le code suivant dans la console de script d'un agent Jenkins connecté pour confirmer l'efficacité de ce contournement :
def cl = Thread.currentThread().getContextClassLoader().proxy
cl.fetchJar(new URL('file:/path/to/jenkins/home/secrets/master.key'))
Sans correctif ni contournement, cela affichera un message comme celui-ci, indiquant une exploitation réussie : Result: [B@23edd8a0
Avec ce contournement appliqué, cela lèvera une AbstractMethodError et affichera une longue trace de pile.
Sous licence MIT. Copyright 2024 CloudBees, Inc.