Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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-34234-Lab — # Laboratoire Docker local démontrant la RCE non authentifiée CVE-2026-34234 dans l'installateur web CtrlPanel Comprend des conteneurs vulnérables et corrigés, des scripts PoC et une analyse de cause racine pour la recherche en sécurité et la validation défensive. | Kitploit
Outils/GitHubGitHub/rootdirective-sec/cve-2026-34234-lab
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubrootdirective-sec/cve-2026-34234-lab

CVE-2026-34234-Lab

# Laboratoire Docker local démontrant la RCE non authentifiée CVE-2026-34234 dans l'installateur web CtrlPanel Comprend des conteneurs vulnérables et corrigés, des scripts PoC et une analyse de cause racine pour la recherche en sécurité et la validation défensive.

Voir le dépôt
1il y a 3 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-34234 - Lab RCE de l'installateur CtrlPanel

Lab Docker local pour démontrer la CVE-2026-34234 dans CtrlPanel.

Ce dépôt compare :

  • vuln : CtrlPanel 1.1.1 épinglé par digest
  • patched : CtrlPanel 1.2.0 épinglé par digest

Le lab est exclusivement local et lie les services à 127.0.0.1.


Résumé

La CVE-2026-34234 est une RCE non authentifiée dans l'installateur web de CtrlPanel.

Le problème est causé par deux bogues enchaînés :

  1. Les gestionnaires de formulaires de l'installateur étaient accessibles avant le verrou install.lock.
  2. Les entrées de l'installateur étaient interpolées dans des chaînes de commandes shell.

Dans ce lab, le conteneur vulnérable exécute une commande de preuve inoffensive et écrit sa sortie dans le conteneur. Le conteneur corrigé reçoit la même requête mais ne crée pas le fichier de preuve.

Résultat attendu :

root@kitploit:~
vulnerable => proof file created
patched    => no proof file

Cause racine

1. Exécution shell vulnérable dans 1.1.1

Fichier vulnérable d'origine :

root@kitploit:~
public/installer/src/functions/shell.php

Code amont pertinent dans 1.1.1 :

root@kitploit:~
function run_console(string $command, ...) {
    $path = dirname(__DIR__, 4);
    $handle = proc_open("cd '$path' && bash -c 'exec -a ServerCPP $command'", ...);
}

Problème :

  • run_console() accepte une chaîne de commande shell.
  • Cette chaîne est passée à bash -c.
  • Les valeurs de l'installateur contrôlées par l'utilisateur peuvent faire partie de cette chaîne de commande.
  • Les métacaractères shell peuvent modifier la structure de la commande.

2. Chemin de formulaire vulnérable de l'installateur

Fichier vulnérable d'origine :

root@kitploit:~
public/installer/src/forms/pterodactyl.php

Comportement amont pertinent dans 1.1.1 :

root@kitploit:~
run_console("php artisan settings:set 'PterodactylSettings' 'panel_url' '$url'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'admin_token' '$key'", ...);
run_console("php artisan settings:set 'PterodactylSettings' 'user_token' '$clientkey'", ...);

Problème :

  • url, key et clientkey proviennent des données POST de l'installateur.
  • Les valeurs sont intégrées dans des chaînes de commandes shell.
  • Le point de terminaison de l'installateur est accessible sans authentification.

3. Ordre du verrou de l'installateur

L'avis de sécurité indique que public/installer/index.php ne vérifiait install.lock qu'après le chargement/exécution de la logique des formulaires de l'installateur. Cela rendait les gestionnaires de l'installateur accessibles même sur des instances déjà installées.


Correctif

1. Vérification précoce du verrou de l'installateur

Le correctif déplace la vérification de install.lock avant le chargement des gestionnaires de formulaires.

Comportement corrigé :

root@kitploit:~
if (file_exists('../../install.lock')) {
    exit("The installation has been completed already. Please delete the File 'install.lock' to re-run");
}

2. Éviter l'exécution de chaînes shell

Fichier corrigé d'origine :

root@kitploit:~
public/installer/src/functions/shell.php

Code amont pertinent dans 1.2.0 :

root@kitploit:~
function run_console(array $command, ...): string {
    $cwd = $cwd ?? $path;
    $handle = proc_open($command, $descriptors, $pipes, $cwd, null, $options);
}

Pourquoi cela corrige le problème :

  • run_console() accepte désormais un tableau de type argv.
  • La commande n'est plus composée comme une chaîne shell unique.
  • La syntaxe de payload telle que $() reste une entrée littérale au lieu d'une syntaxe shell.

Le comportement corrigé des formulaires dans 1.2.0 utilise une exécution de commande de type tableau :

root@kitploit:~
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'panel_url', $url], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'admin_token', $key], ...);
run_console(['php', 'artisan', 'settings:set', 'PterodactylSettings', 'user_token', $clientkey], ...);

Conception du lab

root@kitploit:~
127.0.0.1:8081 -> vulnerable CtrlPanel 1.1.1
127.0.0.1:8082 -> patched CtrlPanel 1.2.0
127.0.0.1:9100 -> fake Pterodactyl API

Services :

  • vuln : réel CtrlPanel 1.1.1
  • patched : réel CtrlPanel 1.2.0
  • fake-api : fausse API Pterodactyl locale utilisée uniquement pour satisfaire les vérifications de l'installateur
  • mysql_vuln / mysql_patched : instances MariaDB séparées
  • redis_vuln / redis_patched : instances Redis séparées

Le lab ne modifie pas le code source de l'application CtrlPanel.

Les Dockerfiles ne font qu'envelopper le point d'entrée du conteneur d'origine pour normaliser les permissions d'exécution Docker Desktop pour :

root@kitploit:~
/var/www/html/storage
/var/www/html/bootstrap/cache

Après la correction des permissions, le wrapper exécute le point d'entrée du produit d'origine.


Conception du PoC

PoC principal :

root@kitploit:~
poc/poc_http_only.py

Propriétés :

  • Envoie uniquement des requêtes HTTP POST
  • N'utilise pas docker exec
  • N'inspecte pas les conteneurs
  • Ne lance pas de shells inversés
  • N'utilise que des commandes inoffensives : id, whoami, hostname

Script auxiliaire :

root@kitploit:~
poc/poc_lab.py

Objectif :

  • Envoie la même requête HTTP
  • Vérifie la preuve dans les conteneurs à l'aide de docker compose exec
  • Destiné uniquement à la démonstration et aux tests de régression

Fichier de preuve dans le conteneur applicatif :

root@kitploit:~
/var/www/html/storage/logs/cve_2026_34234_proof.txt

Exécution

Démarrez à partir d'un état de lab propre :

root@kitploit:~
docker compose down -v --remove-orphans
docker compose up -d --build

Attendez que les conteneurs applicatifs soient opérationnels, puis exécutez :

root@kitploit:~
python3 poc/poc_lab.py

Sortie attendue :

root@kitploit:~
== Testing vulnerable ==
proof_exists: True
result: PASS expected_proof=True

== Testing patched ==
proof_exists: False
result: PASS expected_proof=False

[+] Expected result reached:
    vulnerable => proof file created
    patched    => no proof file

Test manuel HTTP uniquement

Envoyez le PoC HTTP uniquement à la cible vulnérable :

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8081

Vérifiez la preuve manuellement :

root@kitploit:~
docker compose exec vuln sh -lc 'cat /var/www/html/storage/logs/cve_2026_34234_proof.txt'

Preuve attendue :

root@kitploit:~
uid=1000(laravel) gid=1000(laravel) groups=1000(laravel)
laravel
<container-hostname>

Exécutez la même requête contre la version corrigée :

root@kitploit:~
python3 poc/poc_http_only.py --target http://127.0.0.1:8082

Vérifiez le comportement corrigé :

root@kitploit:~
docker compose exec patched sh -lc 'test -f /var/www/html/storage/logs/cve_2026_34234_proof.txt && cat /var/www/html/storage/logs/cve_2026_34234_proof.txt || echo "no proof file"'

Attendu :

root@kitploit:~
no proof file

Nettoyage

Supprimez les conteneurs, les réseaux et les volumes du lab :

root@kitploit:~
docker compose down -v

Remarques

  • Ce lab est réservé à la recherche en sécurité locale.
  • N'exécutez pas le PoC contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation de tester.
  • La preuve est volontairement limitée à la sortie de commandes locales dans le conteneur.
  • Les services vulnérable et corrigé utilisent des bases de données et des instances Redis séparées.
  • La fausse API existe uniquement pour émuler les réponses minimales de l'API Pterodactyl requises par le flux de l'installateur.

Avertissement

Ce dépôt est fourni uniquement pour la recherche en sécurité à des fins éducatives et la validation défensive.

Toutes les démonstrations sont destinées à s'exécuter dans l'environnement de lab Docker local fourni. La preuve de concept évite les actions destructrices, la persistance, le vol d'identifiants, l'exfiltration de données et le ciblage dans le monde réel.

N'utilisez pas ce projet contre un système sans autorisation explicite. L'auteur n'est pas responsable d'une mauvaise utilisation ou des dommages résultant de ce contenu.


Références

  • Avis de sécurité GitHub : https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh
  • Fiche CVE / NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-34234
  • Version corrigée : https://github.com/Ctrlpanel-gg/panel/releases/tag/1.2.0
  • Dépôt amont : https://github.com/Ctrlpanel-gg/panel
Télécharger l’outil