GHSA-66m2-v9v9-95c3 — ci4-cms-erp/ci4ms
CRITICALGHSA-66m2-v9v9-95c3 is a critical-severity (CVSS 9.1) vulnerability in ci4-cms-erp/ci4ms. A fix is available for ci4-cms-erp/ci4ms — see the affected versions and patch details below.
ci4-cms-erp/ci4ms: System Settings (Mail Settings) Full Platform Compromise & Full Account Takeover for All-Roles & Privilege-Escalation via Stored DOM XSS
Exploitation Status
Proof-of-concept exploit code exists
- CISA’s SSVC triage found public proof-of-concept exploit code for this CVE, though no confirmed active exploitation.
Exploitation and automatability from CISA’s SSVC triage for GHSA-66m2-v9v9-95c3.
EPSS Exploitation Probability
EPSS (Exploit Prediction Scoring System) is a daily probability model maintained by FIRST.org. It estimates the likelihood a CVE will be exploited in production environments within the next 30 days, derived from real-world threat intelligence signals.
How urgent is this, really
GHSA-66m2-v9v9-95c3 plotted by exploitation likelihood (EPSS) against impact (CVSS). The shaded corner — EPSS 50%+ and CVSS 7.0+ — is where this CVE doesn't sit, though severity or exploitability alone can still warrant action.
Where this sits among everything scored
Of 379,145 CVEs with a current EPSS score, this one falls in the < 10% band (highlighted). Real counts from FIRST.org, not a sample — log-scaled since the landscape is heavily right-skewed.
Real-World Exposure
ci4-cms-erp/ci4msReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Packagist packages — download data is not available via public APIs for these ecosystems.
Description
Summary
Vulnerability: Stored DOM XSS via System Settings – Mail Settings (Same-Page Attribute Breakout & Persistent Payload Injection)
- Stored Cross-Site Scripting via Unsanitized Mail Settings Configuration Fields
Description
The application fails to properly sanitize user-controlled input within System Settings – Mail Settings. Several configuration fields, including Mail Server, Mail Port, Email Address, Email Password, Mail Protocol, and TLS settings, accept attacker-controlled input that is stored server-side and later rendered without proper output encoding.
Unlike public-facing XSS that executes on landing pages, this vulnerability executes immediately on the same settings page. The injected payload breaks out of the HTML attribute context and is interpreted by the browser when rendered, resulting in same-page DOM-based XSS.
This represents different functionality and a separate vulnerability from landing-page injection.
Example Affected Fields
- Mail Server:
test - Mail Port:
465 - Email Address:
[email protected] - Email Password: (any input)
- Mail Protocol:
SMTP - Domain:
[email protected]
Affected Functionality
- System Settings – Mail Settings configuration
- Same-page rendering of user-controlled input fields
- DOM attribute injection within form inputs
- Storage and retrieval of mail configuration values
Attack Scenario
- An attacker injects a malicious JavaScript payload into one or more Mail Settings fields.
- The payload breaks out of the HTML attribute context.
- The application stores and re-renders the payload without sanitization or encoding.
- The payload executes immediately on the same settings page.
- The script executes in the browser context of the authenticated user managing Mail Settings.
Impact
- Persistent Stored XSS
- Immediate Same-Page DOM XSS execution
- Execution of arbitrary JavaScript in victims’ browsers
- Administrative privilege escalation
- Full administrator account takeover
- Full account takeover across all roles
- Full compromise of the entire platform
Endpoints:
/backend/settings/(Mail Settings)
Steps To Reproduce (POC)
- Navigate to System Settings -> Mail Settings
- Insert the following XSS payload into any Mail Settings field:
test"><img src=1 onerror=alert()>" class="form-control" placeholder="Name" required> - Save the settings
- Observe that the payload breaks out of the input attribute context
- The XSS executes immediately on the same page
Remediation
- Never use .html() or any innerHTML-style sinks for user-controlled input in PHP or JavaScript.
- Apply proper HTML encoding and input sanitization for all configuration fields.
- Enforce CSP, HttpOnly, SameSite, and Secure flags for cookies to reduce the severity of XSS and potential CSRF escalation.
- Audit all other system settings fields for similar attribute injection vulnerabilities.
Ready Video POC:
https://mega.nz/file/KRNhUI6Q#NGC3Bow3RlnmdU1H2bGu1BGbpfIc-awi6IlvTp08V1s
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| 🐘Packagist | ci4-cms-erp/ci4ms | all versions | 0.31.0.0composer require ci4-cms-erp/ci4ms:^0.31.0.0 |
Detection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for ci4-cms-erp/ci4ms, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update ci4-cms-erp/ci4ms to 0.31.0.0 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms GHSA-66m2-v9v9-95c3 is resolved across your whole dependency graph.
Workarounds
If you can't upgrade right away: gate or disable the affected feature, validate untrusted input at the boundary, and avoid passing attacker-controlled data into the vulnerable path. O3's runtime protection blocks exploitation in production as an interim safeguard until the upgrade lands.
How O3 protects you
O3 Security's impact-aware SCA analyses which vulnerable code paths your application actually calls, so a match like GHSA-66m2-v9v9-95c3 can be triaged on real exposure rather than presence alone.
Tailored to GHSA-66m2-v9v9-95c3. Runtime protection reduces exposure until a permanent patch is applied and verified — it complements patching, it doesn't replace it.
Frequently Asked Questions
Is GHSA-66m2-v9v9-95c3 in your dependencies?
O3 Security finds GHSA-66m2-v9v9-95c3 across Packagist dependencies, including transitive ones, and its impact-aware SCA ranks findings by whether your code actually calls the vulnerable path.