/

CVE-2026-117607

Severity:

HIGH RISK

(7.2)

Unrestricted File Upload (CWE-434) in Xerte Toolkits

CVE-2026-117607

Deferred

Vulnerability type

Category:

Unrestricted File Upload

CWE:

CWE-434

Impact:

Remote Code Execution

Severity:

HIGH RISK

(7.2)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Xerte Online Toolkits contains an unrestricted file upload vulnerability in its language-pack import functionality. An authenticated user with system permission may upload a crafted archive and request an included PHP file, potentially resulting in remote code execution on the server.

Xerte Online Toolkits contains an unrestricted file upload vulnerability in its language-pack import functionality. An authenticated user with system permission may upload a crafted archive and request an included PHP file, potentially resulting in remote code execution on the server.

Affected context

The vulnerability occurs in Xerte Online Toolkits deployments that allow authorized users to import language packs through the language-pack management functionality. Risk increases when uploaded ZIP archives are insufficiently restricted and extracted files can later be reached through the application's language-loading mechanism.

The vulnerability occurs in Xerte Online Toolkits deployments that allow authorized users to import language packs through the language-pack management functionality. Risk increases when uploaded ZIP archives are insufficiently restricted and extracted files can later be reached through the application's language-loading mechanism.

Exploit preconditions

  • Attack surface: Language-pack import functionality, including the upload endpoint and language-file retrieval path
  • Required access: Authentication and system permission sufficient to import language packs
  • Trigger point: Importing a crafted ZIP archive and requesting a language resource through the language parameter
  • Why exploitation is possible: The application may accept an archive containing a PHP-capable .inc file and make that file accessible for server-side execution
  • Attack surface: Language-pack import functionality, including the upload endpoint and language-file retrieval path
  • Required access: Authentication and system permission sufficient to import language packs
  • Trigger point: Importing a crafted ZIP archive and requesting a language resource through the language parameter
  • Why exploitation is possible: The application may accept an archive containing a PHP-capable .inc file and make that file accessible for server-side execution

Why this happens

The underlying issue is inadequate restriction and validation of uploaded archive contents. Files with executable server-side extensions can be introduced through a feature intended for language resources and subsequently reached through an application-controlled path. This behavior maps to CWE-434: Unrestricted Upload of File with Dangerous Type, because the upload workflow does not sufficiently constrain file types, archive contents, storage location, or execution behavior.

The underlying issue is inadequate restriction and validation of uploaded archive contents. Files with executable server-side extensions can be introduced through a feature intended for language resources and subsequently reached through an application-controlled path. This behavior maps to CWE-434: Unrestricted Upload of File with Dangerous Type, because the upload workflow does not sufficiently constrain file types, archive contents, storage location, or execution behavior.

Potential impact

  • An attacker may execute arbitrary PHP code on the application server
  • The compromise could expose or alter application data
  • The attacker may modify hosted content or application configuration
  • Server credentials and connected services could be at risk
  • The vulnerability could support persistence or lateral movement, depending on deployment permissions
  • An attacker may execute arbitrary PHP code on the application server
  • The compromise could expose or alter application data
  • The attacker may modify hosted content or application configuration
  • Server credentials and connected services could be at risk
  • The vulnerability could support persistence or lateral movement, depending on deployment permissions

General mitigation guidance

Mitigation generally focuses on treating language-pack archives as untrusted content and ensuring uploaded files cannot become executable.

Common defensive patterns include:

  • Allowing only explicitly approved language-file formats and archive members
  • Rejecting executable extensions and unexpected nested paths during archive processing
  • Extracting uploads outside web-accessible and server-executable directories
  • Serving imported resources through a non-executing content path
  • Applying strict archive validation, size limits, and path-traversal protections
  • Running the application with least privilege and isolating its filesystem and service permissions
  • Reducing trust in user-supplied language parameters through allowlists and controlled resource mapping

Mitigation generally focuses on treating language-pack archives as untrusted content and ensuring uploaded files cannot become executable.

Common defensive patterns include:

  • Allowing only explicitly approved language-file formats and archive members
  • Rejecting executable extensions and unexpected nested paths during archive processing
  • Extracting uploads outside web-accessible and server-executable directories
  • Serving imported resources through a non-executing content path
  • Applying strict archive validation, size limits, and path-traversal protections
  • Running the application with least privilege and isolating its filesystem and service permissions
  • Reducing trust in user-supplied language parameters through allowlists and controlled resource mapping

How teams detect issues like this

Detection can combine application, filesystem, and code-level review:

  • Use static analysis to identify upload handlers that accept archives without member-type validation
  • Review whether extracted files are placed beneath executable or web-accessible directories
  • Inspect code for language parameters that resolve directly to user-controlled filenames
  • Monitor upload and extraction events for unexpected .php, .inc, or other executable files
  • Alert on web requests for newly created language-pack paths and anomalous server-side process activity
  • Enforce CI and security policies requiring archive validation, safe extraction, and non-executable upload storage

Automated code-review and software composition tools may help identify related upload and path-handling patterns.

Detection can combine application, filesystem, and code-level review:

  • Use static analysis to identify upload handlers that accept archives without member-type validation
  • Review whether extracted files are placed beneath executable or web-accessible directories
  • Inspect code for language parameters that resolve directly to user-controlled filenames
  • Monitor upload and extraction events for unexpected .php, .inc, or other executable files
  • Alert on web requests for newly created language-pack paths and anomalous server-side process activity
  • Enforce CI and security policies requiring archive validation, safe extraction, and non-executable upload storage

Automated code-review and software composition tools may help identify related upload and path-handling patterns.

Sources

SourceLink
github.comgithub.com/thexerteproject/xerteonlinetoolkits
github.comgithub.com/thexerteproject/xerteonlinetoolkits/blob/c381d8cbdff6b59bb52bf158cd30cf2c425cb24b/functions.php#L419
github.comgithub.com/thexerteproject/xerteonlinetoolkits/blob/c381d8cbdff6b59bb52bf158cd30cf2c425cb24b/website_code/php/language/import_language.php#L211
github.comgithub.com/thexerteproject/xerteonlinetoolkits/issues/1557
vulncheck.comvulncheck.com/advisories/xerte-online-toolkits-through-3.15.5-rce-via-language-pack-import

Frequently asked

questions

It can be exploited through the application's language-pack functionality when the attacker can authenticate and has the required system permission. The attack does not necessarily require local operating-system access.

The attacker needs an authenticated account authorized to import language packs. Exploitability therefore depends on the application's role and permission configuration.

Treat imported archives as untrusted, allow only expected language resources, prevent executable files from being stored in executable locations, and resolve language resources through controlled mappings rather than direct user input.

Apply strict upload and archive-member allowlists, validate extraction paths, isolate uploaded content from execution contexts, and monitor file-import workflows for unexpected executable content.

It can be exploited through the application's language-pack functionality when the attacker can authenticate and has the required system permission. The attack does not necessarily require local operating-system access.

The attacker needs an authenticated account authorized to import language packs. Exploitability therefore depends on the application's role and permission configuration.

Treat imported archives as untrusted, allow only expected language resources, prevent executable files from being stored in executable locations, and resolve language resources through controlled mappings rather than direct user input.

Apply strict upload and archive-member allowlists, validate extraction paths, isolate uploaded content from execution contexts, and monitor file-import workflows for unexpected executable content.

Find out what's already
exploitable in your codebase.