Executive Summary
CVE-2026-117607 is a remote code execution vulnerability in Xerte Online Toolkits through version 3.15.5. An authenticated user holding system-level permission can execute arbitrary PHP on the server by importing a crafted language pack. It was published to the NVD on 2026-10-28 (assigned by VulnCheck).
| Attribute | Value |
|---|---|
| CVE ID | CVE-2026-117607 |
| CVSS 3.1 | 7.2 (High) |
| CVSS 4.0 | 8.6 |
| Weakness | CWE-434 (Unrestricted Upload of File with Dangerous Type); VulDB classifies it as CWE-94 |
| Authentication | Required (high privileges, system permission) |
| Affected Versions | Xerte Online Toolkits ≤ 3.15.5 |
| Exploitation | No known exploitation; not listed in CISA KEV |
Technical Details
According to the public report in the upstream GitHub issue (#1557):
- The language-pack validation blocks path traversal and extensions such as
.php, but explicitly allows.incmembers, which PHP will execute in this application. import_language.phpwrites the accepted ZIP contents into the language and wizard directories without treating them as data-only resources.functions.phplater loads the selected language file withrequire_once(), so a request that selects the planted language through thelanguageparameter runs the attacker's code.
The reporter notes this is not a ZIP Slip issue: the archive path checks keep files inside the intended directories. The problem is that the files placed there are executable.
Impact
Successful exploitation gives code execution in the context of the web server user. That typically exposes the application database credentials, uploaded learning content, and any other data readable by the web process, and can serve as a foothold for further movement. The high-privilege requirement limits exposure, but Xerte deployments in education often have several administrators, and a compromised or malicious admin account is enough.
Remediation
- Check the Xerte project's GitHub issue and the VulnCheck advisory for a fixed release, and upgrade beyond 3.15.5 once available. Sources did not name a patched version at the time of writing.
- Restrict system-level permission to the minimum number of trusted accounts and review who currently holds it.
- Audit the language and wizard directories for unexpected
.incor other executable files. - If the language import feature is not needed, block access to
import_language.phpat the web server. - Review web server logs for requests to
import_language.phpfollowed by requests using unusuallanguageparameter values.