/

CVE-2026-54453

Severity:

HIGH RISK

(7.2)

Code Injection (CWE-94) in OpenCATS License Config File

CVE-2026-54453

Deferred

Vulnerability type

Category:

Code Injection

CWE:

CWE-74, CWE-94

Impact:

Persistent Server-Side 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

OpenCATS versions before 0.10.0 can construct a PHP define() statement from administrator-controlled Professional License input without safely escaping the value. If an authenticated administrator can update this setting and config.php is writable, crafted input may result in persistent PHP code execution with the web server's privileges.

OpenCATS versions before 0.10.0 can construct a PHP define() statement from administrator-controlled Professional License input without safely escaping the value. If an authenticated administrator can update this setting and config.php is writable, crafted input may result in persistent PHP code execution with the web server's privileges.

Affected context

The issue occurs in the SettingsUI Professional License configuration flow, specifically the manageProfessional functionality, when license input is written into config.php and that file is later included by the application. Exploitation depends on the deployment allowing an authenticated administrator to access the Settings module, update Professional License configuration, and write to the PHP configuration file.

The issue occurs in the SettingsUI Professional License configuration flow, specifically the manageProfessional functionality, when license input is written into config.php and that file is later included by the application. Exploitation depends on the deployment allowing an authenticated administrator to access the Settings module, update Professional License configuration, and write to the PHP configuration file.

Exploit preconditions

  • Attack surface: Authenticated administrative web interface
  • Required access: An account with Settings module access and permission to update Professional License configuration
  • Trigger point: Processing and subsequent inclusion of the generated config.php file
  • Required file condition: config.php must be writable by the application or web-server process
  • Why exploitation is possible: Administrator-controlled input is inserted into PHP source without safe escaping, allowing the generated file's syntax and behavior to be altered
  • Attack surface: Authenticated administrative web interface
  • Required access: An account with Settings module access and permission to update Professional License configuration
  • Trigger point: Processing and subsequent inclusion of the generated config.php file
  • Required file condition: config.php must be writable by the application or web-server process
  • Why exploitation is possible: Administrator-controlled input is inserted into PHP source without safe escaping, allowing the generated file's syntax and behavior to be altered

Why this happens

The underlying flaw is improper neutralization of special elements in administrator-controlled input before the value is embedded in executable PHP source. Reconstructing a define() statement through string concatenation without context-appropriate escaping allows input to break out of its intended data representation and introduce PHP syntax. This maps to CWE-74, Improper Neutralization of Special Elements in Output Used by a Downstream Component, and CWE-94, Improper Control of Generation of Code.

The underlying flaw is improper neutralization of special elements in administrator-controlled input before the value is embedded in executable PHP source. Reconstructing a define() statement through string concatenation without context-appropriate escaping allows input to break out of its intended data representation and introduce PHP syntax. This maps to CWE-74, Improper Neutralization of Special Elements in Output Used by a Downstream Component, and CWE-94, Improper Control of Generation of Code.

Potential impact

  • An attacker may execute arbitrary PHP code with the web server process privileges.
  • The attacker could read, modify, or delete application data.
  • Candidate, contact, company, job order, and user account information may be exposed.
  • Application installation and configuration settings could be altered.
  • The compromised instance could provide a foothold for further attacks.
  • An attacker may execute arbitrary PHP code with the web server process privileges.
  • The attacker could read, modify, or delete application data.
  • Candidate, contact, company, job order, and user account information may be exposed.
  • Application installation and configuration settings could be altered.
  • The compromised instance could provide a foothold for further attacks.

General mitigation guidance

Mitigation generally focuses on keeping administrator-controlled values as data

rather than embedding them in executable source files.

Common defensive patterns include:

  • Use structured configuration storage or typed serialization instead of generating PHP source code.
  • Apply context-appropriate escaping and strict allowlist validation when configuration values must be persisted.
  • Prevent configuration values from being interpreted as executable syntax.
  • Restrict write permissions on PHP configuration files and separate configuration management from the web process where practical.
  • Run the application with the least privileges needed to access its files and data.
  • Limit Professional License configuration access to tightly controlled administrative roles.
  • Prefer secure-by-default deployment settings that make application code and configuration immutable at runtime.

Mitigation generally focuses on keeping administrator-controlled values as data

rather than embedding them in executable source files.

Common defensive patterns include:

  • Use structured configuration storage or typed serialization instead of generating PHP source code.
  • Apply context-appropriate escaping and strict allowlist validation when configuration values must be persisted.
  • Prevent configuration values from being interpreted as executable syntax.
  • Restrict write permissions on PHP configuration files and separate configuration management from the web process where practical.
  • Run the application with the least privileges needed to access its files and data.
  • Limit Professional License configuration access to tightly controlled administrative roles.
  • Prefer secure-by-default deployment settings that make application code and configuration immutable at runtime.

How teams detect issues like this

Detection approaches may include:

  • Static analysis rules for concatenating user-controlled values into PHP source, define() statements, eval-like constructs, or included files.
  • Code review checks for configuration generators that write executable files without context-aware escaping.
  • Monitoring administrative changes to Professional License settings and unexpected modifications to config.php.
  • File-integrity monitoring for PHP configuration files and alerts on web-process write activity.
  • Policy enforcement that blocks writable application code and configuration paths in production deployments.
  • Automated code review or security scanning tools can help identify code-generation and unsafe output-handling patterns.

Detection approaches may include:

  • Static analysis rules for concatenating user-controlled values into PHP source, define() statements, eval-like constructs, or included files.
  • Code review checks for configuration generators that write executable files without context-aware escaping.
  • Monitoring administrative changes to Professional License settings and unexpected modifications to config.php.
  • File-integrity monitoring for PHP configuration files and alerts on web-process write activity.
  • Policy enforcement that blocks writable application code and configuration paths in production deployments.
  • Automated code review or security scanning tools can help identify code-generation and unsafe output-handling patterns.

Sources

SourceLink
github.comgithub.com/opencats/OpenCATS/commit/e422abf3b75d467bdee65277f56e41dfba928fc8
github.comgithub.com/opencats/OpenCATS/pull/802
github.comgithub.com/opencats/OpenCATS/security/advisories/GHSA-627w-743r-4cg2
github.comgithub.com/opencats/OpenCATS/tree/v0.10.0

Frequently asked

questions

It can be exploited through the web application by an authenticated administrator

who has the required Settings permissions, provided that config.php is writable.

Unauthenticated exploitation is not established.

The attacker needs an account with Settings module access and permission to update

the Professional License configuration. File-system writability is also required

for the write-based attack path.

Avoid generating executable PHP source from configuration input. Store the value

as data, enforce strict validation, and use safe encoding or structured

configuration mechanisms when persistence is required.

Apply least privilege, restrict who can change sensitive settings, make application

code and configuration immutable where practical, monitor configuration-file

changes, and use static analysis to detect user input entering generated code.

It can be exploited through the web application by an authenticated administrator

who has the required Settings permissions, provided that config.php is writable.

Unauthenticated exploitation is not established.

The attacker needs an account with Settings module access and permission to update

the Professional License configuration. File-system writability is also required

for the write-based attack path.

Avoid generating executable PHP source from configuration input. Store the value

as data, enforce strict validation, and use safe encoding or structured

configuration mechanisms when persistence is required.

Apply least privilege, restrict who can change sensitive settings, make application

code and configuration immutable where practical, monitor configuration-file

changes, and use static analysis to detect user input entering generated code.

Find out what's already
exploitable in your codebase.