
CVE-2026-53767 + CVE-2026-53768 - RCE autenticado em Chyrp Lite ≤ 2026.01 via bypass da blocklist de uploads_path e ausência de validação de extensão
CVE-2026-53767 + CVE-2026-53768 - RCE autenticado no Chyrp Lite ≤ 2026.01 ("Iriomote")
Ataque encadeado: bypass da blocklist de
uploads_path(CVE-2026-53768) + ausência de validação de extensão de arquivo emadmin_update_upload()(CVE-2026-53767) → Execução Remota de Código comowww-data
O Chyrp Lite ≤ 2026.01 é vulnerável a uma cadeia de Execução Remota de Código autenticada, explorável por qualquer usuário que possua as permissões change_settings e edit_upload (padrão: Administrador).
| CVE | CVE-2026-53767 · CVE-2026-53768 |
| CVSS | 9.1 Crítico (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) |
| Afetado | xenocrat/chyrp-lite ≤ 2026.01 |
| Corrigido | commit 1489dc9 |
| Avisos de segurança | GHSA-8h86-c24h-5jp3 · GHSA-r9w7-5h94-wq5x |
| Relator | iltosec |
python chyrp_rce_poc.py -h
usage: chyrp_rce_poc.py [-h] -u URL -U USERNAME -P PASSWORD [-c CMD] [-i]
[--config CONFIG] [--restore RESTORE]
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:'
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -c 'cat /etc/passwd'
python chyrp_rce_poc.py -u http://127.0.0.1/chyrp -U admin -P 'fJ945@5:3s8v+X:' -i
Etapa 1 - Autenticar
Etapa 2 - Redirecionar uploads_path para tools/ (não está na blocklist)
imagem
imagem
Etapa 3 - Sobrescrever tools/docgen.php (sem verificação de extensão na substituição)
imagem
imagem
Etapa 4 - Executar
http://127.0.0.1/chyrp/tools/docgen.php?cmd=id
imagem
uploads_pathincludes/controller/Admin.php valida uploads_path contra uma blocklist fixa no código:
admin | ajax | feathers | fonts | includes | modules | themes
O diretório tools/ - que acompanha o Chyrp Lite e contém arquivos .php executáveis (docgen.php, gettext.php, triggers.php) - não está listado. Enviar uploads_path=tools passa na validação e é persistido em config.json.php.
admin_update_upload()upload_tester() (includes/helpers.php) apenas verifica o código de erro do upload PHP e o tamanho do arquivo - ele não realiza nenhuma validação de extensão no arquivo de substituição. O nome do arquivo de destino é obtido de $_POST['file'] e resolvido em relação ao uploads_path atual. Como tools/docgen.php já existe (satisfazendo a verificação is_file()), ele é silenciosamente sobrescrito com conteúdo arbitrário.
Nota: A flag
--configaponta paraconfig.json.phppara o cálculo do token CSRF. Se o arquivo não for legível localmente, o script recorre automaticamente à extração do token a partir da resposta HTML.
Atualize para uma versão que contenha o commit 1489dc9 ou posterior.
Duas correções independentes foram aplicadas:
Correção 1 - Adicionar tools (e licenses) à blocklist de uploads_path:
// Before
"/^$qdir((admin|ajax|feathers|fonts|includes|modules|themes)$qdir|$)/"
// After
"/^$qdir((admin|ajax|feathers|fonts|includes|licenses|modules|themes|tools)$qdir|$)/"
Correção 2 - Validar a extensão do arquivo enviado contra a whitelist em admin_update_upload():
$new_extension = strtolower(pathinfo($_FILES['upload']['name'], PATHINFO_EXTENSION));
$whitelist = upload_filter_whitelist();
if (!in_array($new_extension, $whitelist))
error(__("Error"), __("File type is not allowed."), code: 422);
Este PoC é disponibilizado apenas para fins educacionais e de pesquisa. Utilize-o somente contra sistemas que você possua ou para os quais tenha permissão explícita por escrito para testar. O autor não se responsabiliza por qualquer uso indevido.