CVE-2026-34569
CRITICAL9.9EPSS 0.05%CI4MS: Blogs Categories Full Account Takeover for All-Roles & Privilege-Escalation via Stored DOM XSS
Description
## Summary ### **Vulnerability: Stored DOM XSS via Blog Category Title (Persistent Payload Injection)** - Stored Cross-Site Scripting via Unsanitized Blog Category Title in Blog Management ### Description The application fails to properly sanitize user-controlled input when creating or editing blog categories. An attacker can inject a malicious JavaScript payload into the category title field, which is then stored server-side. This stored payload is later rendered unsafely across public-facing blog category pages, administrative interfaces, and blog post views without proper output encoding, leading to stored cross-site scripting (XSS). ### Affected Functionality - Blog category creation functionality - Blog category editing functionality - Blog category storage and retrieval logic ### Attack Scenario - An attacker creates or edits a blog category title to include a malicious XSS payload. - The application stores this value without sanitization or encoding. - The payload persists and executes whenever the category title is rendered in affected views. ### Impact - Persistent Stored XSS - Execution of arbitrary JavaScript in victims’ browsers - Privilege escalation when viewed by administrators or privileged users - Full administrator account takeover - Full account takeover across all roles - Full compromise of the entire application Endpoints: - `/backend/blogs/categories/` - `/blog/{id}` ## Steps To Reproduce (POC) 1. Go to the Blog Categories management page 2. Create or edit a category and insert an XSS payload into the category title such as: `<img src=x onerror=alert(document.domain)>` 3. Save the category 4. View a public blog category page, blog post page, or the administrative interface 5. Notice the XSS payload executing automatically ## Remediation - **Avoid unsafe DOM manipulation methods:** Do not use `.html()`, `innerHTML`, or similar sink functions in client-side JavaScript or server-side templating (e.g., PHP). Even when user input flowing into these sinks is not immediately apparent, they can introduce Cross-Site Scripting (XSS) vulnerabilities that an attacker may exploit. - **Apply output encoding:** Implement HTML entity encoding on all user-controlled data before rendering it in the browser. This helps neutralize potentially malicious input. - **Implement input sanitization:** Ensure that all user-supplied input is properly sanitized before processing or output. Currently, no sanitization mechanisms are in place, which should be addressed as a priority. - **Enforce security headers and cookie attributes:** - **Content Security Policy (CSP):** Define and enforce a strict CSP to limit the execution of unauthorized scripts. - **HttpOnly flag:** Set the `HttpOnly` attribute on session cookies to prevent client-side script access. - **SameSite attribute:** Configure the `SameSite` cookie attribute to mitigate Cross-Site Request Forgery (CSRF) risks. - **Secure flag:** Ensure all cookies are transmitted only over HTTPS by enabling the `Secure` attribute. These measures collectively reduce the impact of XSS and help prevent escalation paths such as CSRF via XSS. # Ready Video POC: https://mega.nz/file/GAFC3AJY#3LHyuyl7I7921UEeA-JlUYdckh6zGLCTy-6w9BNzSmQ
Affected packages (1)
- Packagist/ci4-cms-erp/ci4msfrom 0, < 0.31.0.0
CVSS scores
| Source | Version | Severity | Vector |
|---|---|---|---|
| osv | CVSS 3.1 | CRITICAL9.9 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |