
CVE-2025-53652: Analyse de Jenkins Git Parameter
Cette vulnérabilité provient du fait que les entrées contrôlées par l'utilisateur provenant des paramètres de build Jenkins sont injectées de manière non sécurisée dans la commande Git checkout.
L'entrée utilisateur est fournie sous forme de paramètre de build (par exemple, gitParameters), qui peut contenir des commandes shell malveillantes.
Ce paramètre est encapsulé dans un GitParameterValue (étendant StringParameterValue), dont la méthode buildEnvironment() l'expose comme variable d'environnement dans le contexte de build sans assainissement.
Pendant le processus de checkout SCM, Jenkins charge les variables d'environnement de build via build.getEnvironment().
Le nom de branche utilisé pour le checkout (localBranchName) est obtenu à partir de ces variables d'environnement.
Le nom de branche est ensuite transmis directement à la méthode CheckoutCommand.branch().
Enfin, CheckoutCommand.execute() invoque la commande Git CLI sous-jacente, qui concatène le nom de branche sans validation ni échappement.
Cela permet une injection de commande, permettant à un attaquant d'exécuter des commandes shell arbitraires sur l'hôte de build Jenkins.
La méthode createValue qui gère l'entrée utilisateur (par exemple, depuis la charge utile JSON HTTP POST),C'est ici que Jenkins accepte les valeurs de paramètres fournies par l'utilisateur via la requête (par exemple, "selected": "master; rm -rf /").
L'entrée est encapsulée dans un GitParameterValue, qui étend StringParameterValue, sans assainissement ni validation de l'entrée.
Cela signifie que les données brutes de l'utilisateur sont acceptées comme paramètre de build et stockées comme instance de ParameterValue.

La classe GitParameterValue étendant StringParameterValue, GitParameterValue hérite de StringParameterValue mais n'ajoute aucun assainissement.
La chaîne de constructeurs signifie que l'entrée utilisateur est désormais stockée dans un objet qui sera ensuite utilisé par Jenkins pour construire les variables d'environnement.
Cela propage l'entrée malveillante dans les variables d'environnement de build de Jenkins.
"
La classe StringParameterValue et sa méthode buildEnvironment, Cette méthode est cruciale — elle expose le paramètre comme variables d'environnement dans le contexte de build en faisant
"
env.put(name, value);
env.put(name.toUpperCase(Locale.ENGLISH), value);
Puisque la valeur est une entrée utilisateur non assainie, cela permet à une entrée malveillante d'entrer dans les variables d'environnement de Jenkins, la rendant accessible aux processus ultérieurs comme les commandes Git.
La méthode _checkout dans le plugin GitSCM, Cette méthode appelle build.getEnvironment(listener), qui collecte les variables d'environnement, y compris la variable malveillante définie précédemment.
Elle utilise ces variables pour obtenir le nom de branche (via localBranchName), qui est ensuite transmis au CheckoutCommand.
La variable d'environnement du paramètre malveillant circule directement dans le processus de checkout.

La création du CheckoutCommand et la définition de la branche/référence avec l'entrée utilisateur, Le CheckoutCommand.branch(localBranchName) utilise la variable d'environnement non assainie.
Puisque localBranchName provient de variables d'environnement contrôlées par l'utilisateur, il injecte des commandes arbitraires dans le checkout, Cela prépare le terrain pour l'injection de commande lorsque execute() est appelé.

Cette analyse révèle comment le plugin Jenkins Git Parameter, combiné au plugin Git SCM, peut conduire à une vulnérabilité critique d'injection de commande. En exposant de manière non sécurisée les valeurs de paramètres contrôlées par l'utilisateur comme variables d'environnement, puis en les transmettant directement aux commandes Git CLI sans assainissement approprié, les attaquants peuvent exécuter des commandes arbitraires sur le serveur de build Jenkins.
Cette chaîne de rupture de confiance—de la charge utile JSON malveillante initiale à l'exécution shell finale—souligne l'importance d'une validation stricte des entrées et d'une gestion sécurisée des paramètres de build dans les systèmes d'intégration continue.
Les utilisateurs et administrateurs doivent s'assurer qu'ils exécutent des versions à jour de Jenkins et de tous les plugins, et auditer soigneusement tous les paramètres qui influencent les commandes shell. Des mesures d'atténuation telles que l'assainissement des entrées, la mise sur liste blanche des branches autorisées ou l'isolation des environnements de build peuvent réduire le risque.
La compréhension de ce flux donne aux professionnels de la sécurité et aux développeurs la perspicacité nécessaire pour détecter, prévenir et corriger des vulnérabilités d'injection similaires dans Jenkins ou des plateformes CI/CD comparables.
La CheckoutCommand.execute() méthode qui exécute la commande Git CLI, C'est l'étape finale où la chaîne de branche injectée est transmise directement à la Git CLI du système sans échappement ni assainissement, Par conséquent, la charge utile malveillante est exécutée comme commandes shell, permettant l'exécution de code à distance sur l'hôte Jenkins.
