RCE Pré-autenticado no JCE Pro — CVE-2026-48907
CVSS v4.0: 10.0. Exploração ativa confirmada. PoC público disponível. Atualização imediata necessária.
RCE Pré-autenticado no JCE Pro (Joomla Content Editor) — CVE-2026-48907
Severidade: CRÍTICA. CVSS v4.0: 10.0. Exploração ativa confirmada. PoC público disponível. Atualização imediata necessária.
O JCE Pro (Joomla Content Editor), o plugin de editor mais instalado no ecossistema Joomla!, possui uma vulnerabilidade crítica de execução remota de código pré-autenticada (CVE-2026-48907). A falha é resultado de uma cadeia de três fraquezas independentes no endpoint de importação de perfis que, combinadas, permitem a qualquer atacante sem credenciais fazer upload e executar código PHP arbitrário no servidor em três requisições HTTP. Todas as versões do JCE Pro anteriores a 2.9.99.5 são afetadas. Versão corrigida: 2.9.99.5 (03/06/2026), com hardening adicional na 2.9.99.6 ( versão recomendada).
DESTINATÁRIOS
Órgãos e entidades do SISP que operam sites ou portais construídos sobre Joomla com o plugin JCE Pro instalado em qualquer versão anterior a 2.9.99.5, independentemente da versão do Joomla (a falha afeta Joomla 3, 4, 5 e 6). Inclui ambientes de produção, homologação e desenvolvimento expostos à internet.
DESCRIÇÃO TÉCNICA
CVE-2026-48907 — RCE Pré-autenticado no JCE Pro (Joomla Content Editor)
- Tipo: CWE-284 - Improper Access Control.
- Componente: endpoint profiles.import (/index.php?option=com_jce&task=profiles.import).
- Versões afetadas: JCE Pro 1.0.0 a 2.9.99.4.
- Versões corrigidas: JCE Pro 2.9.99.5 e 2.9.99.6.
- Interação necessária: Nenhuma. Ataque totalmente remoto, sem autenticação prévia.
- CVSS v4.0: 10.0 CRÍTICO.
- Patch disponível: SIM.
- Exploração ativa confirmada: SIM.
Mecanismo CVE-2026-48907 — cadeia de três fraquezas:
Fraqueza 1 - Ausência de autorização no endpoint de importação: o controlador JceControllerProfiles::import() verificava apenas o token CSRF, sem qualquer chamada a Factory::getUser() ou user->authorise(). O token CSRF do Joomla é embutido em qualquer página pública do site (meta tag ou variável JS), sendo trivialmente obtido por atacante externo. A verificação de CSRF não impede requisições diretas autorizadas pelo próprio atacante.
Fraqueza 2 - Ausência de validação de extensão de arquivo: a função File::makeSafe() sanitizava apenas caracteres proibidos pelo sistema de arquivos, sem restrição de extensão. Um filename como 'payload.xml.php' passava sem objeções. Não havia verificação posterior de que a extensão fosse .xml, permitindo extensões executáveis como .php, .php5 e .phtml.
Fraqueza 3 - Flag allow_unsafe=true no File::upload(): a chamada File::upload($src, $dest, false, true) desabilitava explicitamente a blacklist interna do Joomla de extensões perigosas (.php, .php3–.php7, .phtml etc.), que normalmente renomeia ou rejeita o arquivo. Com o flag ativo, o arquivo era gravado no diretório /tmp/ com extensão original intacta e, em instalação Joomla padrão (incluindo imagem Docker oficial), esse diretório é acessível via HTTP com execução PHP habilitada.
Fluxo de ataque completo (3 requisições HTTP, sem credenciais):
Requisição 1 — GET / : extração do token CSRF da página pública (meta tag ou variável JS).
Requisição 2 — POST /index.php?option=com_jce&task=profiles.import : upload multipart com arquivo .xml.php contendo payload PHP (<?= 45*69 ?>).
Requisição 3 — GET /tmp/<filename>.xml.php : execução do payload pelo servidor web. RCE confirmado (resposta: 3105).
IMPACTO
A exploração bem-sucedida permite execução remota de código arbitrário no contexto do servidor web, sem qualquer credencial ou interação do usuário.
Impactos potenciais incluem:
- Comprometimento total do servidor web e da aplicação Joomla.
- Acesso não autorizado a dados da aplicação, banco de dados e arquivos de configuração.
- Defacement do portal ou site institucional.
- Implantação de webshells para persistência e acesso futuro.
- Uso do servidor comprometido como ponto de pivô para movimentação lateral na rede interna.
- Extração de credenciais de banco de dados e outros serviços a partir dos arquivos de configuração do Joomla.
AÇÕES RECOMENDADAS
Ação imediata:
Atualizar para JCE Pro >= 2.9.99.6 em todas as instâncias via Joomla Updater ou download direto em joomlacontenteditor.net/downloads. A versão 2.9.99.5 corrige as três fraquezas; a 2.9.99.6 inclui hardening adicional. Verificar se a assinatura JCE Pro está ativa antes de atualizar.
Se a atualização imediata não for viável: Desinstalar o JCE Pro conforme orientação do fabricante.
Hardening do servidor web:
- Restringir acesso HTTP ao diretório /tmp/ da instalação Joomla.
- Desabilitar execução PHP no diretório /tmp/ via configuração do servidor web.
- Implementar regra WAF para bloquear ou monitorar requisições POST ao parâmetro task=profiles.import no componente com_jce.
Inventário e investigação:
- Inventariar todas as instâncias Joomla nos ambientes do órgão (produção, homologação, desenvolvimento) e verificar se o JCE Pro está instalado e qual a versão.
- Revisar logs de acesso do servidor web em busca de: POSTs ao endpoint /index.php?option=com_jce&task=profiles.import; e GETs ao diretório /tmp/ com extensões PHP.
REFERÊNCIAS
JCE Pro 2.9.99.5 Released (fabricante) https://www.joomlacontenteditor.net/news/jce-pro-2-9-99-5-released
NVD — CVE-2026-48907 https://nvd.nist.gov/vuln/detail/CVE-2026-48907
YesWeHack — Unauthenticated RCE in the Joomla Content Editor extension https://www.yeswehack.com/news/rce-joomla-content-editor-extension
mySites.guru — JCE 2.9.99.5 Security Update https://mysites.guru/blog/jce-pro-2-9-99-5-security-update/