Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-34234-Lab — Laboratório Docker local demonstrando a CVE-2026-34234 RCE não autenticada no instalador web do CtrlPanel. Inclui contêineres vulneráveis e corrigidos, scripts de PoC e análise de causa raiz para pesquisa de segurança e validação defensiva. | Kitploit
Ferramentas/GitHubGitHub/rootdirective-sec/cve-2026-34234-lab
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubrootdirective-sec/cve-2026-34234-lab

CVE-2026-34234-Lab

Laboratório Docker local demonstrando a CVE-2026-34234 RCE não autenticada no instalador web do CtrlPanel. Inclui contêineres vulneráveis e corrigidos, scripts de PoC e análise de causa raiz para pesquisa de segurança e validação defensiva.

Ver Repositório
1há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2026-34234 - Laboratório RCE do Instalador CtrlPanel

Laboratório Docker local para demonstração do CVE-2026-34234 no CtrlPanel.

Este repositório compara:

  • vuln: CtrlPanel 1.1.1 fixado por digest
  • patched: CtrlPanel 1.2.0 fixado por digest

O laboratório é apenas local e vincula serviços a 127.0.0.1.


Resumo

CVE-2026-34234 é um RCE não autenticado no instalador web do CtrlPanel.

O problema é causado por dois bugs encadeados:

  1. Os manipuladores de formulários do instalador estavam acessíveis antes da barreira install.lock.
  2. A entrada do instalador era interpolada em strings de comando do shell.

Neste laboratório, o container vulnerável executa um comando de prova inofensivo e grava sua saída dentro do container. O container corrigido recebe a mesma requisição, mas não cria o arquivo de prova.

Resultado esperado:

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

Causa Raiz

1. Execução vulnerável de shell no 1.1.1

Arquivo vulnerável original:

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

Código relevante upstream no 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() aceita uma string de comando do shell.
  • Essa string é passada para bash -c.
  • Valores controlados pelo usuário no instalador podem fazer parte dessa string de comando.
  • Metacaracteres do shell podem alterar a estrutura do comando.

2. Caminho vulnerável do formulário do instalador

Arquivo vulnerável original:

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

Comportamento upstream relevante no 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 são originados de dados POST do instalador.
  • Os valores são embutidos em strings de comando do shell.
  • O endpoint do instalador é acessível sem autenticação.

3. Ordem da barreira do instalador

O advisory afirma que public/installer/index.php verificava install.lock apenas após carregar/executar a lógica do formulário do instalador. Isso tornava os manipuladores do instalador acessíveis mesmo em instâncias já instaladas.


Correção / Conserto

1. Verificação antecipada da trava do instalador

A correção move a verificação de install.lock para antes do carregamento dos manipuladores do formulário.

Comportamento corrigido:

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

2. Evitar execução de string do shell

Arquivo corrigido original:

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

Código upstream relevante no 1.2.0:

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

Por que isso corrige o problema:

  • run_console() agora aceita um array estilo argv.
  • O comando não é mais composto como uma única string do shell.
  • Sintaxe de payload como $() permanece como entrada literal em vez de sintaxe do shell.

Comportamento corrigido do formulário no 1.2.0 usa execução de comando estilo 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], ...);

Design do Laboratório

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

Serviços:

  • vuln: CtrlPanel real 1.1.1
  • patched: CtrlPanel real 1.2.0
  • fake-api: API Pterodactyl falsa local usada apenas para satisfazer as verificações do instalador
  • mysql_vuln / mysql_patched: instâncias MariaDB separadas
  • redis_vuln / redis_patched: instâncias Redis separadas

O laboratório não modifica o código-fonte da aplicação CtrlPanel.

Os Dockerfiles apenas envolvem o entrypoint original do container para normalizar as permissões de tempo de execução do Docker Desktop para:

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

Após corrigir as permissões, o wrapper executa o entrypoint original do produto.


Design da Prova de Conceito

Prova de Conceito principal:

root@kitploit:~
poc/poc_http_only.py

Propriedades:

  • Envia apenas HTTP POST
  • Não utiliza docker exec
  • Não inspeciona containers
  • Não inicia reverse shells
  • Usa apenas comandos inofensivos: id, whoami, hostname

Script auxiliar:

root@kitploit:~
poc/poc_lab.py

Propósito:

  • Envia a mesma requisição HTTP
  • Verifica a prova dentro dos containers usando docker compose exec
  • Destinado apenas para demonstração e testes de regressão

Arquivo de prova dentro do container da aplicação:

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

Executar

Inicie a partir de um estado limpo do laboratório:

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

Aguarde até que os containers da aplicação estejam ativos, então execute:

root@kitploit:~
python3 poc/poc_lab.py

Saída esperada:

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

Teste Manual Apenas HTTP

Envie a PoC apenas HTTP para o alvo vulnerável:

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

Verifique a prova manualmente:

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

Prova esperada:

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

Execute a mesma requisição contra o corrigido:

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

Verifique o comportamento corrigido:

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

Esperado:

root@kitploit:~
no proof file

Limpeza

Remova containers, redes e volumes do laboratório:

root@kitploit:~
docker compose down -v

Notas

  • Este laboratório é apenas para pesquisa de segurança local.
  • Não execute a PoC contra sistemas que você não possui ou não tem permissão para testar.
  • A prova é intencionalmente limitada à saída de comando local dentro do container.
  • Os serviços vulnerável e corrigido usam bancos de dados e instâncias Redis separados.
  • A API falsa existe apenas para emular as respostas mínimas da API Pterodactyl exigidas pelo fluxo do instalador.

Aviso Legal

Este repositório é fornecido apenas para fins educacionais de pesquisa em segurança e validação defensiva.

Todas as demonstrações destinam-se a ser executadas dentro do ambiente de laboratório Docker local fornecido. A prova de conceito evita ações destrutivas, persistência, roubo de credenciais, exfiltração de dados e direcionamento a sistemas reais.

Não use este projeto contra qualquer sistema sem autorização explícita. O autor não é responsável por uso indevido ou danos resultantes deste material.


Referências

  • GitHub Security Advisory: https://github.com/Ctrlpanel-gg/panel/security/advisories/GHSA-jmhr-q9q5-fqwh
  • CVE Record / NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-34234
  • Patched release: https://github.com/Ctrlpanel-gg/panel/releases/tag/1.2.0
  • Upstream repository: https://github.com/Ctrlpanel-gg/panel
Baixar ferramenta