Jenkins est l'outil d'intégration continue et de déploiement continu (CI/CD) le plus déployé au monde. Un Jenkins compromis donne accès aux pipelines de build, aux credentials de production, aux clés SSH et aux secrets d'infrastructure — c'est un actif de valeur extrême pour un attaquant.
CVE-2024-23897 : Arbitrary File Read (CVSS 9.8)
La CVE Jenkins de 2024
En janvier 2024, CVE-2024-23897 — une lecture de fichier arbitraire dans le CLI Jenkins conduisant potentiellement à une exécution de code à distance.
Mécanisme :
Jenkins utilise la bibliothèque args4j pour parser les arguments CLI. Une option permet de lire le contenu de fichiers comme arguments (@/path/to/file). En exploitant cette fonctionnalité via des requêtes CLI non authentifiées (selon la configuration), un attaquant peut lire des fichiers arbitraires sur le serveur Jenkins.
Les fichiers sensibles ciblés :
/etc/passwd— liste des utilisateurs système~/.ssh/id_rsa— clés SSH des comptes de buildsecrets/master.key— clé maître Jenkins pour déchiffrer les credentialscredentials.xml— fichier contenant tous les credentials chiffrés
Avec la clé maître et le fichier credentials.xml, tous les secrets Jenkins sont déchiffrables.
Versions affectées : Jenkins < 2.442, LTS < 2.426.3
Score CVSS : 9.8
Exploitation active
Des exploits publics étaient disponibles dans les 48 heures suivant la divulgation. Des honeypots Jenkins ont détecté des tentatives d'exploitation massives ciblant spécifiquement les fichiers secrets/master.key et credentials.xml.
CVE-2019-1003000 : Script Security Sandbox Escape (CVSS 9.8)
Une évasion du sandbox Groovy dans Jenkins Pipelines. Le sandbox est censé empêcher l'exécution de code arbitraire dans les pipelines — cette CVE permettait de le contourner via des méthodes de métaprogrammation Groovy spécifiques.
// Exemple de bypass sandbox (simplifié)
@NonCPS
def exploit() {
// Code s'échappant du sandbox Jenkins
}
CVE-2018-1000861 : RCE non authentifiée (CVSS 9.8)
Une désérialisation non sécurisée dans la bibliothèque Stapler utilisée par Jenkins permettait une exécution de code à distance sans authentification via une requête HTTP forgée.
CVE-2016-0792 : RCE via Remoting (CVSS 9.8)
Une faille dans le protocole Jenkins Remoting (communications master-slave) permettait à un nœud Jenkins esclave de compromettre le master, ou vice versa.
Le problème du Groovy dans Jenkins
Les pipelines Jenkins utilisent Groovy — un langage complet de la JVM. Même avec le sandbox activé, des échappées régulières sont découvertes. Des recommandations clés :
Pipeline Declarative vs Scripted
// MOINS SÉCURISÉ — Scripted Pipeline, accès complet Groovy
node {
sh "deploy.sh"
}
// PLUS SÉCURISÉ — Declarative Pipeline, syntaxe restreinte
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sh 'deploy.sh'
}
}
}
}
Sécuriser Jenkins
1. Désactiver l'accès CLI si inutilisé
// jenkins.yaml (JCasC)
jenkins:
disabledAdministrativeMonitors:
- "hudson.diagnosis.ReverseProxySetupMonitor"
remotingSecurity:
enabled: true
# Ou via l'interface : Administrer Jenkins → Sécurité → Désactiver le CLI
2. Activer l'authentification et l'autorisation strictes
Administrer Jenkins → Configurer la sécurité globale
→ Sécurité : Matrice basée sur les projets
→ Autoriser uniquement les utilisateurs authentifiés
→ Désactiver l'accès anonyme
3. Utiliser les credentials Jenkins plutôt que des variables en clair
// DANGEREUX
environment {
AWS_SECRET = "mon-secret-en-clair"
}
// CORRECT — utiliser les credentials Jenkins
withCredentials([string(credentialsId: 'aws-secret', variable: 'AWS_SECRET')]) {
sh 'aws deploy ...'
}
4. Ne pas exposer Jenkins directement sur internet
Placez Jenkins derrière un reverse proxy (Nginx/Apache) avec authentification forte. N'exposez jamais le port Jenkins (8080) directement.
5. Mettre à jour Jenkins et ses plugins
# Via CLI Jenkins
java -jar jenkins-cli.jar -s http://localhost:8080 install-plugin <plugin-name>
# Ou automatiser via Jenkins Configuration as Code (JCasC)
Les plugins Jenkins sont souvent la source de vulnérabilités — maintenez-les à jour.
6. Isoler les nœuds de build
Les agents Jenkins exécutent du code potentiellement non fiable (code des développeurs, dépendances tierces). Utilisez des agents Docker éphémères :
pipeline {
agent {
docker {
image 'node:18-alpine'
args '--network none' // Isolation réseau
}
}
}
7. Activer les audit logs
Administrer Jenkins → Audit Trail Plugin
→ Logger toutes les actions admin et les builds
Jenkins en 2024 : la surface d'attaque reste large
Jenkins a plus de 1800 plugins officiels — chacun représente une surface d'attaque potentielle. Des CVE de plugins (parfois critiques) sont publiées chaque semaine. Si vous utilisez Jenkins, la veille CVE sur le core ET les plugins est indispensable.
Vérifiez les CVE Jenkins sur cveo.tech — cherchez jenkins pour voir l'historique complet des vulnérabilités.