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.

Publicado em 16/06/2026 16:55
Compartilhe:

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/

Compartilhe: