Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-34234-Lab | Kitploit
Strumenti/GitHubGitHub/rootdirective-sec/cve-2026-34234-lab
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubrootdirective-sec/cve-2026-34234-lab

CVE-2026-34234-Lab

Vedi Repository
2 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-34234 - Lab RCE dell'Installer CtrlPanel

Lab Docker locale per dimostrare CVE-2026-34234 in CtrlPanel.

Questo repository confronta:

  • vuln: CtrlPanel 1.1.1 bloccata tramite digest
  • patched: CtrlPanel 1.2.0 bloccata tramite digest

Il lab è esclusivamente locale e vincola i servizi a 127.0.0.1.


Riepilogo

CVE-2026-34234 è una RCE non autenticata nell'installer web di CtrlPanel.

Il problema è causato da due bug concatenati:

  1. I gestori dei moduli dell'installer erano raggiungibili prima del controllo install.lock.
  2. L'input dell'installer veniva interpolato nelle stringhe di comando shell.

In questo lab, il container vulnerabile esegue un comando di prova innocuo e scrive il suo output all'interno del container. Il container corretto riceve la stessa richiesta ma non crea il file di prova.

Risultato atteso:

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

Causa principale

1. Esecuzione shell vulnerabile in 1.1.1

File vulnerabile originale:

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

Codice upstream pertinente in 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'", ...);
}

Problema:

  • run_console() accetta una singola stringa di comando shell.
  • Tale stringa viene passata a bash -c.
  • I valori dell'installer controllabili dall'utente possono diventare parte di quella stringa di comando.
  • I metacaratteri shell possono modificare la struttura del comando.

2. Percorso del modulo installer vulnerabile

File vulnerabile originale:

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

Comportamento upstream pertinente in 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'", ...);

Problema:

  • url, key e clientkey provengono dai dati POST dell'installer.
  • I valori vengono incorporati nelle stringhe di comando shell.
  • L'endpoint dell'installer è raggiungibile senza autenticazione.

3. Ordine del controllo dell'installer

L'advisory afferma che public/installer/index.php controllava install.lock solo dopo aver caricato/eseguito la logica dei moduli dell'installer. Ciò rendeva i gestori dell'installer raggiungibili anche su istanze già installate.


Patch / Correzione

1. Controllo anticipato del lock dell'installer

La correzione sposta il controllo di install.lock prima del caricamento dei gestori dei moduli.

Comportamento corretto:

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

2. Evitare l'esecuzione di stringhe shell

File corretto originale:

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

Codice upstream pertinente in 1.2.0:

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

Perché questo risolve il problema:

  • run_console() ora accetta un array in stile argv.
  • Il comando non è più composto come un'unica stringa shell.
  • La sintassi di payload come $() rimane input letterale invece di sintassi shell.

Il comportamento del modulo corretto in 1.2.0 usa l'esecuzione di comandi in stile array:

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], ...);

Progettazione del 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

Servizi:

  • vuln: CtrlPanel reale 1.1.1
  • patched: CtrlPanel reale 1.2.0
  • fake-api: API Pterodactyl finta locale usata solo per soddisfare i controlli dell'installer
  • mysql_vuln / mysql_patched: istanze MariaDB separate
  • redis_vuln / redis_patched: istanze Redis separate

Il lab non modifica il codice sorgente dell'applicazione CtrlPanel.

I Dockerfile si limitano a incapsulare l'entrypoint originale del container per normalizzare i permessi di runtime di Docker Desktop per:

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

Dopo aver corretto i permessi, il wrapper esegue l'entrypoint originale del prodotto.


Progettazione del PoC

PoC primario:

root@kitploit:~
poc/poc_http_only.py

Proprietà:

  • Invia solo POST HTTP
  • Non usa docker exec
  • Non ispeziona i container
  • Non avvia reverse shell
  • Usa solo comandi innocui: id, whoami, hostname

Script di supporto:

root@kitploit:~
poc/poc_lab.py

Scopo:

  • Invia la stessa richiesta HTTP
  • Verifica la prova all'interno dei container usando docker compose exec
  • Pensato solo per demo e test di regressione

File di prova all'interno del container dell'app:

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

Esecuzione

Parti da uno stato pulito del lab:

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

Attendi che i container dell'app siano attivi, poi esegui:

root@kitploit:~
python3 poc/poc_lab.py

Output atteso:

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 manuale solo HTTP

Invia il PoC solo HTTP al target vulnerabile:

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

Verifica manualmente la prova:

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

Prova attesa:

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

Esegui la stessa richiesta contro il container corretto:

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

Verifica il comportamento corretto:

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"'

Atteso:

root@kitploit:~
no proof file

Pulizia

Rimuovi container, reti e volumi del lab:

root@kitploit:~
docker compose down -v

Note

  • Questo lab è destinato esclusivamente alla ricerca di sicurezza locale.
  • Non eseguire il PoC contro sistemi che non possiedi o per i quali non hai il permesso di test.
  • La prova è volutamente limitata all'output locale dei comandi all'interno del container.
  • I servizi vulnerabile e corretto usano database e istanze Redis separati.
  • L'API finta esiste solo per emulare le risposte minime dell'API Pterodactyl richieste dal flusso dell'installer.

Disclaimer

Questo repository è fornito esclusivamente per ricerca di sicurezza educativa e validazione difensiva.

Tutte le dimostrazioni sono pensate per essere eseguite all'interno dell'ambiente lab Docker locale fornito. La proof-of-concept evita azioni distruttive, persistenza, furto di credenziali, esfiltrazione di dati e l'uso contro sistemi reali.

Non usare questo progetto contro alcun sistema senza autorizzazione esplicita. L'autore non è responsabile per usi impropri o danni derivanti da questo materiale.


Riferimenti

  • Advisory di sicurezza GitHub: https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh
  • Record CVE / NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-34234
  • Release corretta: https://github.com/Ctrlpanel-gg/panel/releases/tag/1.2.0
  • Repository upstream: https://github.com/Ctrlpanel-gg/panel
Scarica lo strumento