CVE-2024-37899 is a critical-severity (CVSS 9) Code Injection vulnerability in org.xwiki.platform:xwiki-platform-oldcore. A fix is available for org.xwiki.platform:xwiki-platform-oldcore — see the affected versions and patch details below.
Disabling a user account changes its author, allowing RCE from user account in XWiki
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.
- A successful exploit gives an attacker total control of the affected component, not partial access.
Exploitation and automatability from CISA’s SSVC triage for CVE-2024-37899.
EPSS Exploitation Probability
Probability of exploitation in the next 30 days, from FIRST.org EPSS.
How urgent is this, really
Where this sits among everything scored
Real-World Exposure
org.xwiki.platform:xwiki-platform-oldcore☕org.xwiki.platform:xwiki-platform-oldcore☕org.xwiki.platform:xwiki-platform-oldcore☕org.xwiki.platform:xwiki-platform-oldcore☕org.xwiki.platform:xwiki-platform-oldcoreReal-time download stats are indexed for npm and PyPI packages. This vulnerability affects Maven packages — download data is not available via public APIs for these ecosystems.
Description
XWiki Platform is a generic wiki platform offering runtime services for applications built on top of it. When an admin disables a user account, the user's profile is executed with the admin's rights. This allows a user to place malicious code in the user profile before getting an admin to disable the user account. To reproduce, as a user without script nor programming rights, edit the about section of your user profile and add {{groovy}}services.logging.getLogger("attacker").error("Hello from Groovy!"){{/groovy}}.
As an admin, go to the user profile and click the "Disable this account" button. Then, reload the page. If the logs show attacker - Hello from Groovy! then the instance is vulnerable. This has been patched in XWiki 14.10.21, 15.5.5, 15.10.6 and 16.0.0. Users are advised to upgrade. There are no known workarounds for this vulnerability.
Workarounds
We're not aware of any workaround except upgrading.
References
Affected Packages
| Ecosystem | Package | Vulnerable range | Fix |
|---|---|---|---|
| ☕Maven | org.xwiki.platform:xwiki-platform-oldcore | ≥ 13.4.7&&< 14.10.21 | 14.10.21org.xwiki.platform:xwiki-platform-oldcore:14.10.21 |
| ☕Maven | org.xwiki.platform:xwiki-platform-oldcore | ≥ 13.10.3&&< 14.10.21 | 14.10.21org.xwiki.platform:xwiki-platform-oldcore:14.10.21 |
| ☕Maven | org.xwiki.platform:xwiki-platform-oldcore | ≥ 15.0-rc-1&&< 15.5.5 | 15.5.5org.xwiki.platform:xwiki-platform-oldcore:15.5.5 |
| ☕Maven | org.xwiki.platform:xwiki-platform-oldcore | ≥ 15.6-rc-1&&< 15.10.6 | 15.10.6org.xwiki.platform:xwiki-platform-oldcore:15.10.6 |
| ☕Maven | org.xwiki.platform:xwiki-platform-oldcore | ≥ 16.0.0-rc-1&&< 16.0.0 | 16.0.0org.xwiki.platform:xwiki-platform-oldcore:16.0.0 |
Affected Products
xwikixwikiDetection & mitigation playbook
Open-source dependencyDetect
Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for org.xwiki.platform:xwiki-platform-oldcore, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.
Fix
Update org.xwiki.platform:xwiki-platform-oldcore to 14.10.21 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2024-37899 is resolved across your whole dependency graph.
Workarounds
Stop passing untrusted input into the interpreter or shell: call the affected binary with an argument array rather than a composed command string, reject anything outside a strict allowlist of expected values, and run the component under an account that cannot reach beyond the work it legitimately does.
Frequently Asked Questions
Is CVE-2024-37899 in your dependencies?
Find it across Maven, including transitive dependencies.