GitHub Security Advisory: GHSA-85m8-g393-jcxf
Package: ci4-cms-erp/ci4ms (COMPOSER)
Severity: CRITICAL (CVSS 9.9)
CWE: CWE-79: Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
Vulnerable versions: <= 0.28.6.0
Patched in: 0.31.0.0

Summary: CI4MS: Backup Management Full Account Takeover for All-Roles & Privilege-Escalation via Stored DOM Blind XSS

Details:
## Summary
### **Vulnerability: Stored DOM Blind XSS via Backup Management Filename (Persistent Payload Injection)**
- Stored Cross-Site Scripting (Blind XSS) via Unsanitized Backup Filename in Backup Management

### Description
The application fails to properly sanitize user-controlled input when handling backup uploads and processing backup metadata. An attacker can inject a malicious JavaScript payload into the backup filename via the uploaded `xss.sql`, which uses SQL functionality to insert the XSS payload server-side.

This stored payload is later rendered unsafely in multiple backup management views without proper output encoding, leading to stored blind cross-site scripting (Blind XSS).

### Affected Functionality
- Backup upload functionality
- Backup processing functionality
- Backup storage and retrieval logic

### Attack Scenario
- An attacker uploads `xss.sql` which uses SQL functionality to insert a malicious XSS payload into the backup filename field server-side.
- The application stores this filename without sanitization or encoding.
- The payload persists and executes whenever the backup filename is rendered in affected views.
- The attacker does not see immediate execution, making this a Blind XSS scenario that triggers only when an administrator or privileged user views the backup management panel.

### Impact
- Persistent Stored Blind 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/backup/upload`
- `/backend/backup/`
- `/backup/{id}`

## Steps To Reproduce (POC)
1. Upload `xss.sql` via the Backup Upload functionality
2. Ensure the SQL executes and inserts an XSS payload into the backup filename field such as:
`<img src=x onerror=alert(document.domain)>`
3. Navigate to the Backup Management panel as an administrator
4. View the backup entry via the administrative panel
5. Notice the XSS payload executing automatically (Blind XSS)

## 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