Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with Import privileges
-
DeliveryUpload PHP file via affected import type
-
ExploitOriginal filename preserved in web temp dir
-
ExecutionImport error leaves file on disk
-
PersistRequest staged file to execute PHP
-
ImpactRCE as web server, compromise recruiting data and host
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V5 - File Handling File type validation, storage isolation
MITRE ATT&CK
2 techniques across 2 tactics: Command and Control, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Three conditions must all hold: (1) the attacker has an authenticated OpenCATS account with Import privileges (PR:H); (2) they use the specific single import data type whose code path preserved the uploaded file's original (attacker-controlled) filename rather than randomizing it - in the vulnerable modules/import/ImportUI.php the non-'Resume' path randomized names while one path kept the original, and an import error leaves the staged file on disk; and (3) critically, the CATS_TEMP_DIR temporary directory must be served by the web server WITH PHP execution enabled. Limiting factors: this executable-temp-dir setting is not a default hardened configuration, authentication plus Import privilege is required, and affected versions are strictly before 0.10.0. Where the temp directory does not execute PHP, the uploaded file cannot run and impact is substantially reduced. |
| Impact | Signals are mixed, pointing to a moderate-priority issue rather than an emergency. The CVSS 3.1 vector (9.1 Critical, AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H) rates this Critical largely because of the scope change and triple-H impact of PHP RCE, but PR:H confirms the attacker must already be an authenticated user holding Import privileges - a meaningful barrier not reflected in the headline score. The AC:L assigned by the vendor understates a key gatekeeper: exploitation only works 'if the temporary directory is served with PHP execution enabled,' which is a non-default and often-absent deployment condition, so real-world exploitability is narrower than 9.1 suggests. No EPSS score, CISA KEV entry, or SSVC decision data was provided, and no public exploit was identified; the GitHub artifacts are the vendor patch (PR #808 / commit 7f15174) and advisory, not weaponized exploit code. Net: a genuine privileged-attacker RCE worth patching promptly, but the combination of required Import privileges plus a non-default executable-temp-dir configuration makes widespread opportunistic exploitation unlikely absent further intelligence. |
| Exploit ScenarioDerived | An authenticated recruiter-level user with Import privileges selects the one affected import data type and uploads a PHP webshell whose original attacker-chosen filename is preserved and staged in the web-accessible temporary directory; a deliberately triggered import error leaves the file on disk. If that directory is configured to execute PHP, the attacker then requests the staged filename directly to run arbitrary code as the web server user. No public exploit code was identified, though the vendor patch diff reveals the vulnerable logic in detail. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 13, 2026
Arbitrary PHP code execution can be achieved against OpenCATS deployments prior to 0.10.0 through an unrestricted file upload in the Import module: an authenticated user holding Import privileges can stage a PHP file whose original, attacker-controlled name is preserved on disk in the web-accessible CATS_TEMP_DIR. Exploitation only works where that temporary directory is served by the web server with PHP execution enabled, so the practical risk is conditional rather than universal; there is no public exploit identified at time of analysis, and the issue is fixed in version 0.10.0. The vulnerability carries a CVSS score of 9.1 (assessed as CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:H/I:H/A:H), reflecting high impact but requiring authenticated access and a non-default server configuration.
RemediationAI
Upgrade to OpenCATS 0.10.0 or later (https://github.com/opencats/OpenCATS/releases/tag/v0.10.0); this is the vendor-released patch and incorporates both the filename-randomization fix and the session-whitelist validation added in PR #808 / commit 7f151741598c36c8233ada4b6b64f12b721d4907. If immediate upgrade is not possible, apply the upstream commit to modules/import/ImportUI.php, or as a compensating control disable PHP execution inside CATS_TEMP_DIR - for Apache remove or override any 'php'/'php-fpm' handler for that directory (e.g. 'php_admin_flag engine off' inside a <Directory> block) and for nginx ensure the location does not pass .php files to the FastCGI PHP backend, instead serving or denying them as static content; the trade-off is that legitimate PHP endpoints placed in the temp directory by customizations will stop working, but none are required by stock OpenCATS. Additionally, move CATS_TEMP_DIR outside the document root where the deployment permits it, and periodically purge staged import files, since the patch's error-path @unlink() only protects the fixed flow. Finally, restrict Import privileges to the minimum set of trusted staff, because PR:H authentication with that role is a prerequisite for every exploitation path, and review web server configuration and any existing staged files for signs of prior abuse.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-434 (Unrestricted Upload of File with Dangerous Type). In vulnerable versions of modules/import/ImportUI.php, the upload handling logic conditionally preserved the uploaded file's original name depending on the selected import data type - the upstream diff shows that a non-'Resume' path randomized the filename via FileUtility::makeRandomFilename() while another path kept $originalFilename verbatim. That preserved name, combined with a staging location inside the web-served CATS_TEMP_DIR, means a crafted '.php' upload can remain on disk under an attacker-chosen executable filename, particularly when an import error aborts processing without cleanup. The upstream fix (PR #808, commit 7f151741598c36c8233ada4b6b64f12b721d4907) removes the branch that preserved the original name - always randomizing with a '.tmp' suffix - and adds an isValidImportFileID() guard that validates POSTed 'fileName' values against a session-maintained whitelist of valid staged import file IDs (rejecting path traversal via basename() comparison), plus @unlink() cleanup of staged files on error. The CPE entry cpe:2.3:a:opencats:opencats:*:*:*:*:*:*:*:* confirms the entire pre-0.10.0 release line is affected. Impact is scoped as S:C because successful PHP execution escapes the application context and yields code execution under the web server process identity.
Know when Opencats gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
PR:H for required Import privileges and AC:H because success depends on the non-default temp directory being configured to execute PHP; S:C and C/I/A:H reflect host-level RCE.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
OpenCATS is an open-source applicant tracking system and recruitment CRM for staffing agencies and hiring teams. Prior to 0.10.0, the OpenCATS Import module in modules/import/ImportUI.php can preserve an uploaded file's original name for one import data type and place the file in the web-accessible temporary directory. An authenticated user with Import privileges can select the affected import path and upload a PHP file that remains under an attacker-controlled executable filename, and an import error can leave the file on disk. If the temporary directory is served with PHP execution enabled, requesting the staged file can execute arbitrary PHP code with the web server process privileges, exposing or modifying recruiting data and the host system. This issue is fixed in version 0.10.0.
Articles & Coverage 1
Technical POC Analysis
CWE-434: Unrestricted Upload of File with Dangerous Type.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
OpenCATS, an open-source applicant tracking system, contains a critical vulnerability (CVE-2026-54454) that could allow an authenticated user with Import privileges to execute arbitrary PHP code on the server, leading to full system compromise. This vulnerability affects all deployments prior to version 0.10.0 and, while exploitation requires a non-default server configuration, the potential for data theft or service disruption is significant. Leadership should prioritize upgrading to version 0.10.0 to protect sensitive recruitment data and maintain system integrity.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Malicious file upload attacks exploit insufficient validation when web applications accept user-provided files.
Remote code execution in OpenCATS installer allows unauthenticated attackers to inject and execute arbitrary PHP code by
OpenCATS v0.9.6 was discovered to contain a remote code execution (RCE) vulnerability via the getDataGridPager's ajax fu
OpenCATS through 0.9.6 allows remote attackers to execute arbitrary code by uploading an executable file via lib/FileUti
OpenCATS through 0.9.5-3 unsafely deserializes index.php?m=activity requests, leading to remote code execution. Rated cr
OpenCATS 0.9.4 contains a remote code execution vulnerability that allows unauthenticated attackers to execute arbitrary
SQL injection in OpenCATS through 0.9.7.4 allows authenticated users to extract arbitrary database contents by injecting
lib/DocumentToText.php in OpenCats before 0.9.4-3 has XXE that allows remote users to read files on the underlying opera
OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the importID parameter in the Import viewerr
OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the tag_id variable in the Tag deletion func
OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the entriesPerPage variable. Rated medium se
OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the tag_id variable in the Tag update functi
Improper neutralization of input during web page generation allows an unauthenticated attacker to submit malicious Javas
EUVD-2026-98922
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB