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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-8054 — Injeção de SQL pré-autenticação no dotCMS | Kitploit
Ferramentas/GitHubGitHub/mr-xn/cve-2026-8054
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoLabs e Prática
GitHubmr-xn/cve-2026-8054

CVE-2026-8054

Injeção de SQL pré-autenticação no dotCMS

Ver Repositório
7há 3 mesesAinda não revisado
Site

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

1. Visão Geral da Vulnerabilidade

CVE-2026-8054 é uma vulnerabilidade de injeção SQL pré-autenticação de alto risco (Pre-auth SQL Injection) existente na API de Auditoria de Publicação (Publish Audit API) do dotCMS Core. Esta vulnerabilidade foi rastreada oficialmente como Incidente de Segurança SI-75 e foi divulgada formalmente no final de maio de 2026. Como um atacante pode acioná-la remotamente sem qualquer credencial, seu dano potencial é muito grave.

AtributoValor
ID CVECVE-2026-8054
Rastreamento OficialSI-75
Tipo de VulnerabilidadeInjeção SQL (CWE-89)
Componente AfetadodotCMS Core - Publish Audit API
Pontuação CVSS10.0 (Critical)
Versões Afetadas25.11.04-1 a 26.04.28-02
Versão Corrigida26.04.28-03
Vetor de AtaqueInjeção SQL remota não autenticada (Pre-auth)
Privilégios NecessáriosNenhum
Interação do UsuárioNenhuma
Impacto em LTSNão afetado (o ramo de código de auditoria não foi backportado para a árvore LTS)

2. Explicação Detalhada da Vulnerabilidade

2.1 Natureza da Vulnerabilidade

A vulnerabilidade reside nos endpoints REST /api/auditPublishing/get e /api/auditPublishing/getAll. Esses endpoints, ao receberem parâmetros de entrada do cliente, não realizam qualquer filtragem ou vinculação parametrizada, mas constroem dinamicamente consultas SQL por concatenação direta de strings.

Mais criticamente, o dotCMS omitiu completamente a verificação de autenticação e controle de acesso nesses endpoints de back-end sensíveis relacionados à auditoria. Isso significa que qualquer atacante remoto sem credenciais na rede externa, desde que consiga acessar o sistema pela rede, pode enviar requisições HTTP com payloads maliciosos diretamente para os endpoints.

2.2 Ponto de Entrada da Vulnerabilidade

Caminho do arquivo: dotCMS/src/main/java/com/dotcms/rest/AuditPublishingResource.java

A vulnerabilidade existe em dois endpoints REST:

  • GET /api/auditPublishing/get/{bundleId} - Obtém o status de auditoria de uma única publicação
  • POST /api/auditPublishing/getAll - Obtém o status de auditoria de múltiplas publicações

Problema chave: Antes da correção, esses endpoints não exigiam qualquer autenticação; qualquer usuário anônimo podia acessá-los diretamente.

@Path("/auditPublishing")
@Tag(name = "Publishing")
public class AuditPublishingResource {

    @POST
    @Path("/getAll")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAll(List<String> bundleIds) {
        // 【Ponto de vulnerabilidade】Nenhuma verificação de autenticação! Chama diretamente a API de back-end
        try {
            final List<PublishAuditStatus> statuses = auditAPI.getPublishAuditStatuses(bundleIds);
            // ...
        }
    }
}

2.3 Código Principal da Vulnerabilidade

Caminho do arquivo: dotCMS/src/main/java/com/dotcms/publisher/business/PublishAuditAPIImpl.java

Método: getPublishAuditStatuses(List<String> bundleIds) (linhas 224-245)

@CloseDBIfOpened
public List<PublishAuditStatus> getPublishAuditStatuses(List<String> bundleIds)
        throws DotPublisherException {
    try {
        final List<PublishAuditStatus> result = new ArrayList<>();

        DotConnect dc = new DotConnect();

        // 【Ponto de vulnerabilidade 1】Concatena diretamente a entrada do usuário na consulta SQL
        // Apenas adiciona aspas simples ao redor, sem qualquer parametrização ou escape
        final List<String> parameter = bundleIds.stream()
            .map(id -> "'" + id + "'")  // Perigoso: concatenação de strings
            .collect(Collectors.toList());

        // 【Ponto de vulnerabilidade 2】Usa String.format para construir SQL, a entrada do usuário é embutida diretamente
        dc.setSQL(String.format(SELECT_ALL_BY_BUNDLES_IDS,
            String.join(",", parameter)));

        List<Map<String, Object>> items = dc.loadObjectResults();

        for(Map<String, Object> item: items) {
            result.add(turnIntoPublishAuditStatus(NO_LIMIT_ASSETS, item));
        }

        return result;
    } catch(Exception e) {
        Logger.debug(PublisherUtil.class, e.getMessage(), e);
        throw new DotPublisherException("Unable to get list of elements with error:" + e.getMessage(), e);
    }
}

Constante SQL (SELECT_ALL_BY_BUNDLES_IDS):

SELECT * FROM publishing_queue_audit WHERE bundle_id IN (%s)

2.4 Caminho de Propagação do Dado Contaminado

graph LR
    subgraph 外部攻击者
        A[远程攻击者] -->|发送恶意payload| B[HTTP REST API]
    end

    subgraph Application Layer
        B -->|POST /api/auditPublishing/getAll| C[AuditPublishingResource<br/>GET/POST]
        C -->|调用| D[PublishAuditAPI]
        D -->|调用| E[PublishAuditAPIImpl]
        E -->|传递bundleIds| F[污点处理<br/>bundleIds.stream<br/>.map id -> id]
        F -->|拼接参数| G[SQL构造<br/>String.format]
    end

    subgraph Technology Layer
        G -->|构造SQL| H[动态SQL查询<br/>SELECT * FROM publishing_queue_audit<br/>WHERE bundle_id IN %s]
        H -->|执行| I[SQL执行]
        I -->|执行注入SQL| J[PostgreSQL/MySQL]
    end

    subgraph 漏洞点
        K[漏洞点1<br/>无认证检查] -.->|跳过认证| C
        L[漏洞点2<br/>无参数化绑定] -.->|仅添加引号| F
    end

    style A fill:#ff6b6b,stroke:#333,color:#fff
    style K fill:#ff6b6b,stroke:#333,color:#fff
    style L fill:#ff6b6b,stroke:#333,color:#fff
    style J fill:#ffa94d,stroke:#333

Propagação do dado contaminado: Entrada do usuário → REST API → Processamento back-end → Construção SQL → Execução no banco de dados Falha crítica: Sem autenticação + Sem parametrização = Injeção SQL completamente controlável

2.5 Análise do Princípio da Injeção SQL

Suponha que o usuário insira bundleIds = ["x' OR '1'='1"]

SQL normal:

SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('normal-id')

SQL após injeção:

SELECT * FROM publishing_queue_audit WHERE bundle_id IN ('x' OR '1'='1')

Como '1'='1' é sempre verdadeiro, esta consulta retorna todos os registros da tabela.

graph TD
    subgraph 输入对比
        A[正常输入<br/>bundle-123] -->|构造| B[正常SQL<br/>WHERE bundle_id IN<br/>'bundle-123']
        C[恶意输入<br/>x OR 1=1] -->|注入| D[注入SQL<br/>WHERE bundle_id IN<br/>x OR 1=1]
    end

    subgraph 数据库执行
        B -->|执行| E[数据库]
        D -->|执行| E
    end

    subgraph 结果对比
        E -->|返回| F[正常结果<br/>1条记录]
        E -->|返回 数据泄露| G[泄露结果<br/>所有记录]
    end

    style C fill:#ff6b6b,stroke:#333,color:#fff
    style G fill:#ff6b6b,stroke:#333,color:#fff
    style D fill:#ff6b6b,stroke:#333,color:#fff

    note1[注入点: 单引号闭合原有字符串<br/>OR 1=1 使条件永远为真<br/>结果: 返回所有记录]

3. Análise de Impacto e Dano

Um atacante que explore com sucesso esta vulnerabilidade pode executar comandos SQL arbitrários no contexto do usuário do sistema de banco de dados, resultando nas seguintes consequências graves:

graph TD
    subgraph 攻击影响分析
        subgraph 数据机密性
            A[管理员密码哈希]
            B[用户凭证]
            C[重置Token]
            D[系统配置]
        end

        subgraph 数据完整性
            E[网站内容]
            F[用户角色权限]
            G[审计日志]
        end

        subgraph 系统可用性
            H[DROP TABLE]
            I[DELETE数据]
            J[UPDATE数据]
        end

        subgraph 权限提升
            K[管理员接管]
            L[文件系统读写]
            M[远程代码执行]
        end
    end

    N[SQL注入漏洞] -->|泄露| A
    N -->|泄露| B
    N -->|泄露| C
    N -->|篡改| E
    N -->|篡改| F
    N -->|执行| H
    N -->|实现| K
    N -->|实现| L

    O[CVSS 10.0 Critical] -.->|评估| N

    style N fill:#ff6b6b,stroke:#333,color:#fff
    style O fill:#ff6b6b,stroke:#333,color:#fff

3.1 Vazamento de Dados Sensíveis

Através da injeção SQL, o atacante pode extrair tabelas principais do banco de dados, obtendo:

  • Hashes de senhas de administradores
  • Informações de credenciais de usuários
  • Tokens de redefinição
  • Informações de configuração do sistema
  • Dados de conteúdo do site
Baixar ferramenta