
Demonstra com segurança a travessia de caminho CVE-2026-16219 no Croogo CMS com um PoC somente de loopback, análise técnica, orientação de remediação e demonstração autônoma para defensores e pesquisadores.
Este repositório documenta e demonstra com segurança a falha de autorização de caminho rastreada como CVE-2026-16219 no Croogo CMS. Ele é destinado a defensores, mantenedores, estudantes e pesquisadores que testam sistemas próprios ou que estão explicitamente autorizados a avaliar.
Limite de segurança: A prova de conceito HTTP incluída aceita apenas o endereço de loopback literal
127.0.0.1, grava apenas um marcador.txtgerado no destino fixo fora da web/tmp/croogo-cve-2026-16219/, não segue redirecionamentos e se recusa a executar sem um reconhecimento explícito de laboratório. Ela não contém payload executável nem modo de alvo remoto.
Data do instantâneo: 2026-07-20.
| Campo | Valor |
|---|---|
| Produto | Croogo CMS, Admin File Manager |
| Versões afetadas (NVD) | 4.0.0 até 4.0.7 |
| Fraqueza | CWE-22, path traversal / restrição inadequada de caminho |
| NVD CNA CVSS v3.1 | 6.3 Médio |
| Privilégios | Conta autenticada com capacidade FileManager |
| Interação do usuário | Nenhuma após a autenticação |
| Divulgação pública | Existem issue upstream e informações públicas de exploit |
| Versão corrigida | Não identificada no instantâneo do aviso citado |
O status atual pode mudar. Reconsulte as fontes primárias em docs/references.md antes de tomar decisões de produção.
O Croogo configura uma raiz editável estreita, como WWW_ROOT/assets. O helper afetado obtém FileManager.editablePaths com Configure::check() em vez de Configure::read(). check() responde se a chave existe; ele não retorna a lista de caminhos configurados. O Boolean resultante é então usado pela verificação de contenção de caminho, enfraquecendo o limite de autorização pretendido.
As operações de criação e edição do File Manager confiam nessa verificação. Sob as condições descritas no relatório upstream, um usuário autenticado do FileManager pode gravar fora da raiz editável configurada quando a conta de serviço do PHP puder gravar no local selecionado.
Consulte docs/technical-analysis.md para o fluxo de dados e docs/remediation.md para orientações de hardening.
.
|-- demo/ Standalone logic demonstration; no Croogo required
|-- docs/ Analysis, lab setup, detection, remediation, references
|-- patches/ Illustrative defense-in-depth patch
|-- poc/ Strictly loopback, text-marker HTTP PoC and cleanup tools
|-- tests/ Guardrail and demo tests
|-- .github/workflows/validate.yml
|-- DISCLAIMER.md
|-- GITHUB_UPLOAD.md
|-- LICENSE
|-- Makefile
|-- SECURITY.md
`-- VERSION
O modelo autônomo explica a falha sem executar um CMS vulnerável ou enviar qualquer requisição de rede:
php demo/path_authorization_demo.php
Resultado esperado:
Buggy modeled check for outside path: ALLOWED
Safe boundary check for outside path: DENIED
A demonstração cria arquivos temporários no diretório temporário do sistema operacional e os remove antes de sair.
Siga docs/lab-setup.md. Vincule o aplicativo somente a 127.0.0.1 e crie o diretório de marcadores fixo dentro da mesma VM ou contêiner que o Croogo:
sudo install -d -o www-data -g www-data -m 0750 \
/tmp/croogo-cve-2026-16219
Substitua www-data pela conta do PHP-FPM ou do servidor web no laboratório descartável.
Obtenha o cabeçalho Cookie completo e o token CSRF do CakePHP a partir de uma requisição legítima do File Manager no seu próprio laboratório. Nunca faça commit deles.
export BASE='http://127.0.0.1:8080'
export COOKIE='CAKEPHP=lab-session; csrfToken=lab-cookie-token'
export CSRF_TOKEN='lab-request-token'
export LAB_ACK='I_OWN_THIS_LAB'
POC_VALIDATE_ONLY=1 ./poc/croogo_local_poc.sh
./poc/croogo_local_poc.sh
O script imprime o nome do arquivo gerado e o status HTTP. Uma resposta de redirecionamento ou de sucesso HTTP não é prova por si só; verifique o marcador de dentro da VM ou contêiner do Croogo:
sudo ./poc/verify_marker.sh
Um marcador fora de WWW_ROOT/assets demonstra a falha de autorização. O marcador é texto simples e não é executável pela web.
sudo LAB_ACK='I_OWN_THIS_LAB' ./poc/cleanup_marker.sh
unset COOKIE CSRF_TOKEN LAB_ACK BASE
make test
Os testes confirmam a sintaxe do shell, rejeitam entradas de não-loopback e de confusão de URL, garantem que segredos não são impressos durante a validação e verificam o resultado esperado do modelo autônomo.
Configure::read().O patch utilitário em patches/illustrative-hardening.patch e a orientação de controlador em patches/create-file-hardening-example.md são auxílios de revisão, não correções oficiais do fornecedor. Teste-os na branch exata que está implantada.
Use este repositório apenas em sistemas que você possui ou para os quais tem autorização escrita explícita para testar. Não adapte a PoC para alvos públicos, payloads executáveis, persistência, acesso a credenciais ou ações destrutivas. Consulte SECURITY.md e DISCLAIMER.md.
MIT. Consulte LICENSE.