Skip to main content

OpenCATS EUVDEUVD-2026-108259

| CVE-2026-115513 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-22 VulnCheck GHSA-7q62-4fwp-9cr6
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged user
  2. Delivery
    Set malicious payload in record name field
  3. Exploit
    Payload stored unsanitized, rendered in MRU panel
  4. Execution
    Admin views record, JavaScript executes in their session
  5. Impact
    Steal session cookie, escalate to full admin control

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a valid low-privileged authenticated OpenCATS account (before v0.12.0) that can create or rename a Candidate, Company, Contact, Job Order, or List; the attacker places an HTML/JavaScript payload in that name/title field, which lib/MRU.php's getFormatted() stores unsanitized and renders unescaped in the 'Recent' (MRU) navigation panel shown on nearly every page. Exploitation is LIMITED by three factors: (1) an authenticated account is required (PR:L), so this is not remote-unauthenticated; (2) a second user must actually view the poisoned record for the script to fire (UI:P), making it a stored/second-order trigger; (3) meaningful escalation depends on the viewing user being privileged (e.g. a Site Administrator) for session theft to yield full administrative control. The payload must also fit within the MRU item length limit (MRU_ITEM_LENGTH), as shown by the vendor's test harness.

Impact

This is a genuine but moderate-priority issue, not a drop-everything emergency, and the signals are internally consistent. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P) describes a network-reachable, low-complexity stored XSS that requires a low-privileged authenticated account (PR:L) and passive victim interaction (UI:P) - someone must view the poisoned 'Recent' panel. The vendor-supplied score of 6.3 (Medium) is driven by the subsequent-system impact (SC:H/SI:H) rather than direct impact (VC:N/VI:N/VA:N), reflecting that the real damage is session/cookie theft and privilege escalation in the victim's browser context rather than a direct compromise of the vulnerable component itself. The vuln.today decision label is 'this_month', consistent with a patchable authenticated flaw that is not under active exploitation. No EPSS score was provided and there is no KEV listing, so there is no evidence of in-the-wild exploitation. No standalone exploit/PoC reference is present - only the fix commit, the release, and a VulnCheck advisory - so the realistic risk is targeted abuse by an insider or a compromised low-privilege account rather than widespread opportunistic attacks. The escalation path is real and well-evidenced by source code (the fix wraps dataItemText in Template::escapeHtml), so defenders with multi-user OpenCATS instances should patch within a normal maintenance window.

Exploit ScenarioDerived

A low-privileged authenticated OpenCATS user creates or renames a Candidate, Company, Contact, Job Order, or List so its name contains a JavaScript payload (e.g. an svg/onload handler). Because the name is stored unsanitized and later rendered unescaped in the 'Recent' (MRU) navigation panel shown on nearly every page, the script executes in the browser of any other user - including a Site Administrator - who views that record, enabling session/cookie theft and takeover of the admin account. No public exploit identified at time of analysis, though the fix commit and VulnCheck advisory describe the mechanism precisely.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 22, 2026

Stored cross-site scripting in OpenCATS before 0.12.0 lets a low-privileged authenticated user plant HTML/JavaScript in the name or title field of a Candidate, Company, Contact, Job Order, or List, which lib/MRU.php's getFormatted() stores unsanitized and renders unescaped in the 'Recent' (MRU) navigation panel present on nearly every page. The script fires only when another user opens or views the poisoned record, so exploitation is a second-order trigger limited by the need for a valid account (PR:L) and by victim interaction (UI:P); meaningful privilege escalation depends on the viewer holding elevated rights such as Site Administrator, in which case session/cookie theft could yield administrative control. Impact is assessed as moderate (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, scope changed) and no public exploit code or active exploitation was identified at time of analysis; the vendor has released 0.12.0 with the escaping fix.

RemediationAI

Upgrade to OpenCATS 0.12.0 (https://github.com/opencats/OpenCATS/releases/tag/v0.12.0), which contains the vendor-released fix for this issue. If an immediate full upgrade is not possible, backport the output-encoding change from commit f82e0ee3045845b90b7e111c46f30998496e38a8, which wraps the MRU item text in Template::escapeHtml($rs[$rowIndex]['dataItemText']) inside lib/MRU.php's getFormatted(); keep the existing truncation-then-escape ordering, since escaping after truncation is what the vendor's MRUTest.php asserts and cutting an escaped entity mid-sequence would corrupt display. Applying the change is low-risk because the regression tests confirm benign text, UTF-8 names, and the length boundary render identically, and the only behavior change is that stored angle brackets appear as literal text in the Recent panel. Note that the MRU_ITEM_LENGTH cap is not a mitigation and should not be treated as one, and detection ahead of patching can focus on record names/titles containing HTML or script markup that surface in the Recent navigation list; the vendor reference is https://www.vulncheck.com/advisories/opencats-before-stored-xss-via-mru-navigation-panel.

Affected VersionsENISA

OpenCATS 0.10.0 <0.12.0

Affected Packages

euvd opencats fix: 0.12.0

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

OpenCATS is a PHP-based open-source applicant tracking system, and the flaw is a classic CWE-79 stored/second-order XSS rooted in output encoding rather than input validation. The MRU class in lib/MRU.php builds the 'Recent' items list shown across the application; getFormatted() concatenated the raw dataItemText value directly into an anchor element (<a href="..." style="text-decoration: none;">dataItemText</a>) without HTML-escaping it, so any markup stored in a record name/title was interpreted by the browser of every user viewing the panel. The upstream fix in commit f82e0ee3045845b90b7e111c46f30998496e38a8 wraps the value with Template::escapeHtml() at render time, and the accompanying MRUTest.php (built on an AuthorizationTestCase) asserts that '<svg/onload=alert()>' becomes '&lt;svg/onload=alert()&gt;', that benign UTF-8 text such as 'Jane Müller' survives unchanged, and that truncation to MRU_ITEM_LENGTH happens before escaping so the escaped output is not cut mid-entity. That length cap constrains payload size but, per the vendor tests, is not a defense; the CPE cpe:2.3:a:opencats:opencats:*:*:*:*:*:*:*:* covers all releases prior to 0.12.0. Scope is changed in the assessed vector because the injected script executes in the victim's session context rather than the attacker's.

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

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N
vuln.today AI 5.4 MEDIUM

Low-privileged account can inject (PR:L); a victim must render the MRU panel (UI:R); the script runs in the victim's browser context, changing scope (S:C) with limited confidentiality/integrity impact via session theft.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:H/SI:H/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
None

DescriptionCVE.org

OpenCATS before 0.12.0 contains a stored cross-site scripting vulnerability that allows a low-privileged authenticated user to inject HTML/JavaScript payloads by setting a Candidate, Company, Contact, Job Order, or List name/title field, which is stored unsanitized and later rendered unescaped in the 'Recent' (MRU) navigation panel displayed on nearly every page via lib/MRU.php's getFormatted() function. Attackers can exploit this by crafting a malicious record name that executes arbitrary JavaScript in the session of any other user, including Site Administrators, who views the record, enabling session/cookie theft and privilege escalation to full administrative control.

Threat Intelligence Overview

EPSS Score
0.2%
Top 86% exploitable
Prevalence
Low
niche open-source applicant tracking system, limited enterprise footprint
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.

CVE-2026-27760 CRITICAL POC
9.2 Apr 28

Remote code execution in OpenCATS installer allows unauthenticated attackers to inject and execute arbitrary PHP code by

CVE-2022-43019 CRITICAL POC
9.8 Oct 19

OpenCATS v0.9.6 was discovered to contain a remote code execution (RCE) vulnerability via the getDataGridPager's ajax fu

CVE-2021-41560 CRITICAL POC
9.8 Dec 15

OpenCATS through 0.9.6 allows remote attackers to execute arbitrary code by uploading an executable file via lib/FileUti

CVE-2021-25294 CRITICAL POC
9.8 Jan 18

OpenCATS through 0.9.5-3 unsafely deserializes index.php?m=activity requests, leading to remote code execution. Rated cr

CVE-2021-47936 CRITICAL POC
9.3 May 10

OpenCATS 0.9.4 contains a remote code execution vulnerability that allows unauthenticated attackers to execute arbitrary

CVE-2026-49489 HIGH POC
8.4 May 31

SQL injection in OpenCATS through 0.9.7.4 allows authenticated users to extract arbitrary database contents by injecting

CVE-2019-13358 HIGH POC
7.5 Jul 05

lib/DocumentToText.php in OpenCats before 0.9.4-3 has XXE that allows remote users to read files on the underlying opera

CVE-2022-43023 MEDIUM POC
6.5 Oct 19

OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the importID parameter in the Import viewerr

CVE-2022-43022 MEDIUM POC
6.5 Oct 19

OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the tag_id variable in the Tag deletion func

CVE-2022-43021 MEDIUM POC
6.5 Oct 19

OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the entriesPerPage variable. Rated medium se

CVE-2022-43020 MEDIUM POC
6.5 Oct 19

OpenCATS v0.9.6 was discovered to contain a SQL injection vulnerability via the tag_id variable in the Tag update functi

CVE-2023-27293 MEDIUM POC
6.1 Feb 28

Improper neutralization of input during web page generation allows an unauthenticated attacker to submit malicious Javas

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy