Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-8054 — dotCMS Inyección SQL Pre-auth | Kitploit
Herramientas/GitHubGitHub/mr-xn/cve-2026-8054
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubmr-xn/cve-2026-8054

CVE-2026-8054

dotCMS Inyección SQL Pre-auth

Ver Repositorio
25hace 4 mesesAún no revisado
Sitio web

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

1. Resumen de la vulnerabilidad

CVE-2026-8054 es una vulnerabilidad crítica de inyección SQL sin autenticación previa (Pre-auth SQL Injection) que existe en la API de Auditoría de Publicación (Publish Audit API) de dotCMS Core. Esta vulnerabilidad es rastreada oficialmente como incidente de seguridad SI-75 y fue oficialmente reportada y divulgada a finales de mayo de 2026. Debido a que un atacante puede activarla de forma remota sin necesidad de ningún permiso de cuenta, su daño potencial es muy grave.

PropiedadValor
CVECVE-2026-8054
Seguimiento oficialSI-75
Tipo de vulnerabilidadInyección SQL (CWE-89)
Componente afectadodotCMS Core - Publish Audit API
Puntuación CVSS10.0 (Critical)
Versiones afectadas25.11.04-1 a 26.04.28-02
Versión corregida26.04.28-03
Vector de ataqueInyección SQL remota sin autenticación (Pre-auth)
Privilegios requeridosNinguno
Interacción del usuarioNinguna
Impacto en versiones LTSNo afectadas (la rama de código de auditoría no se retroportó al árbol LTS)

2. Explicación detallada del principio de la vulnerabilidad

2.1 Naturaleza de la vulnerabilidad

La vulnerabilidad existe en los puntos finales REST /api/auditPublishing/get y /api/auditPublishing/getAll. Estos puntos finales, al recibir los parámetros de solicitud del cliente, no realizan ningún filtrado ni enlace de parámetros, sino que construyen dinámicamente sentencias SQL mediante concatenación directa de cadenas.

Aún más grave, dotCMS omitó por completo la verificación de autenticación y autorización en estos puntos finales sensibles relacionados con la auditoría. Esto significa que cualquier atacante remoto sin credenciales en la red externa, con solo poder acceder a la red del sistema, puede enviar directamente solicitudes HTTP con payloads maliciosos a estos puntos finales.

2.2 Punto de entrada de la vulnerabilidad

Ruta del archivo: dotCMS/src/main/java/com/dotcms/rest/AuditPublishingResource.java

La vulnerabilidad existe en dos puntos finales de la API REST:

  • GET /api/auditPublishing/get/{bundleId} - Obtiene el estado de auditoría de una publicación individual
  • POST /api/auditPublishing/getAll - Obtiene el estado de auditoría de múltiples publicaciones

Problema clave: Antes de la corrección, estos puntos finales no requerían ninguna autenticación, cualquier usuario anónimo podía acceder directamente.

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

    @POST
    @Path("/getAll")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAll(List<String> bundleIds) {
        // 【Punto vulnerable】¡Sin verificación de autenticación! Llama directamente a la API del backend
        try {
            final List<PublishAuditStatus> statuses = auditAPI.getPublishAuditStatuses(bundleIds);
            // ...
        }
    }
}

2.3 Código central de la vulnerabilidad

Ruta del archivo: dotCMS/src/main/java/com/dotcms/publisher/business/PublishAuditAPIImpl.java

Método: getPublishAuditStatuses(List<String> bundleIds) (líneas 224-245)

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

        DotConnect dc = new DotConnect();

        // 【Punto vulnerable 1】Concatena directamente la entrada del usuario a la sentencia SQL
        // Solo envuelve con comillas simples, sin ninguna parametrización o escape
        final List<String> parameter = bundleIds.stream()
            .map(id -> "'" + id + "'")  // Peligroso: concatenación de cadenas
            .collect(Collectors.toList());

        // 【Punto vulnerable 2】Usa String.format para construir SQL, la entrada del usuario se incrusta directamente
        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 Ruta de propagación del flujo sucio

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

Propagación del flujo sucio: Entrada del usuario → API REST → Procesamiento del backend → Construcción SQL → Ejecución en la base de datos Defectos clave: Sin autenticación + Sin parametrización = Inyección SQL completamente controlable

2.5 Análisis del principio de inyección SQL

Supongamos que la entrada del usuario es bundleIds = ["x' OR '1'='1"]

SQL normal:

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

SQL después de la inyección:

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

Dado que '1'='1' siempre es verdadero, esta consulta devolverá todos los registros de la tabla.

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álisis de impacto y daños

Un atacante que explote con éxito esta vulnerabilidad puede ejecutar comandos SQL arbitrarios en el contexto del usuario del sistema de base de datos, lo que lleva a las siguientes consecuencias 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 Fuga de datos sensibles

Descargar herramienta