Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain shared agent-registration-key
-
DeliverySelf-register ghost host with crafted hostname
-
ExploitEscape onclick JS string via browser HTML-decoding
-
ExecutionAdmin opens details and clicks default command button
-
ImpactRun script in admin session, deploy fleet-wide software jobs
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Attribute value escaping
|
| Exploitation Conditions | Three concrete prerequisites must all hold: (1) the 'agent-self-registration-enabled' setting must be turned on - it defaults to 0 (disabled), so default installs are not exposed via this path; (2) the attacker must possess the shared 'agent-registration-key' used by all agents (it can leak from any one enrolled machine and be reused to register arbitrary ghost computers via the oco.agent.hello handler in frontend/api-agent.php); and (3) an administrator must subsequently open the malicious computer's details page and activate (click) one of the default VNC/RDP/SSH/Ping command buttons, which all use new_tab=false and the vulnerable window.location onclick branch. No custom command configuration is required - the vulnerable buttons ship enabled on every install. Limiting factors that narrow real-world risk: the non-default self-registration setting, the shared-secret requirement, and the need for authenticated-admin interaction (UI:R). |
| Impact | This is a High-severity (CVSS 7.4) stored XSS in a niche product, and the signals point to a real-but-gated issue rather than a mass-exploitation emergency. Positive signals: the vendor GHSA advisory confirms the flaw, the fix (1.2.1), and includes a three-stage reproduction (real PHP Html::commandButton() → Python html.parser → Node/V8) proving the injected JavaScript actually executes; the vuln.today Decision label is 'this_week'; technical impact is high (full admin-session compromise with fleet-wide software-deployment ability). Mitigating signals: it is NOT listed in CISA KEV (no confirmed active exploitation), no EPSS score is provided in the input (exploitation probability unknown - state explicitly), and the attack is not automatable/wormable - it requires a non-default setting (agent-self-registration-enabled, which defaults to 0), possession of the shared agent-registration-key, and an administrator both opening the malicious computer-details page and clicking a default command button (UI:R). The CVSS vector (AV:N/PR:N) marks it network-reachable and 'unauthenticated,' but note the tension: PR:N does not reflect that an attacker must hold the shared registration key and that self-registration must be enabled - these are real preconditions the base vector does not capture. Net: a legitimate 'patch this cycle' item (consistent with the 'this_week' label) for anyone running OCO-Server with self-registration on, but low risk of indiscriminate widespread exploitation. |
| Exploit ScenarioDerived | An attacker who has obtained the shared agent-registration-key (for example by reading it from one already-enrolled workstation) targets an OCO-Server where agent-self-registration-enabled is turned on, and uses the oco.agent.hello handler to register a ghost computer whose hostname carries a crafted payload that breaks out of the onclick JS string. When an administrator later opens that computer's details page and clicks one of the default VNC/RDP/SSH/Ping buttons, the payload runs in the admin's authenticated session and can deploy software jobs fleet-wide. The GHSA advisory documents a confirmed reproduction of the JavaScript executing, though no standalone weaponized exploit tool is published. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 22, 2026
Stored cross-site scripting in OCO-Server 1.2.0 and earlier lets a crafted agent hostname execute JavaScript inside an administrator's authenticated session when the admin clicks one of the default VNC, RDP, SSH or Ping buttons on the computer details page. Reaching the sink requires three conditions to line up: the non-default 'agent-self-registration-enabled' setting must be turned on, the attacker must hold the shared 'agent-registration-key' used by all enrolled agents, and an administrator must then open the malicious 'ghost' computer's details page and activate a command button (PR:N with UI:R per the assessed vector, so no account is needed but admin interaction is). No CISA KEV entry, no confirmed public exploit code and no EPSS signal are associated with this issue at time of analysis - the GitHub advisory does include a step-by-step reproduction of the escaping bypass, making the flaw straightforward to verify, and the decision label places it in 'this_week' rather than an emergency tier.
RemediationAI
Vendor-released patch: upgrade OCO-Server to version 1.2.1 (https://github.com/schorschii/OCO-Server/releases/tag/v1.2.1), which reworks Html::commandButton() to HTML-escape the URL into a dedicated actionurl attribute and have the inline handler read it via this.getAttribute rather than interpolate it into a JavaScript string (commit ef02f9768e5e1792c3ee53c72e8d7e4ea58ddaa8). If an immediate upgrade is not possible, the single most effective compensating control is to keep agent-self-registration-enabled at its default of 0, which removes the untrusted hostname injection path into the database; note the trade-off that this disables automated fleet onboarding and new agents must then be created manually. Where self-registration must remain enabled, treat the shared agent-registration-key as a secret of equivalent sensitivity to admin credentials: rotate it after any suspected leak from an enrolled machine, restrict distribution to agents that genuinely need it, and audit the computer inventory for unexpected self-registered entries, accepting that these measures reduce rather than eliminate exposure because hostnames accepted by oco.agent.hello remain unvalidated until 1.2.1 is applied. Because the payload only fires when an administrator clicks a default command button on a malicious computer's details page, advising administrators to be cautious with unfamiliar inventory entries is at best a partial stopgap, and the upstream fix remains the only complete resolution.
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-83 (Improper Neutralization of Script in Attributes), a child of CWE-79, and it is fundamentally a context-confusion bug. Html::commandButton() in lib/Html.class.php built an inline onclick handler by concatenating htmlspecialchars($actionUrl, ENT_QUOTES) inside a JavaScript string literal that itself sits inside a single-quoted HTML attribute. htmlspecialchars() neutralizes the HTML parsing layer only; the browser HTML-decodes attribute values before handing the handler source to the JavaScript engine, so any quote character restored by that decode reopens the JS string literal and lets additional statements be injected. The correct primitive for embedding data in a JS string is JavaScript-aware encoding such as json_encode(), not HTML entity encoding. The sink is exercised on every installation without configuration because frontend/views/computer-details.php passes $computer->hostname to the helper using Computer::DEFAULT_COMPUTER_COMMANDS, whose VNC, RDP, SSH and Ping entries all set new_tab=false and therefore always take the vulnerable window.location branch. The tainted hostname originates in the oco.agent.hello handler in frontend/api-agent.php, which inserts a self-registering agent's hostname into the database without character or format validation; that path is gated by agent-self-registration-enabled (default 0) and by the single shared agent-registration-key distributed to every agent. The upstream fix (commit ef02f9768e5e1792c3ee53c72e8d7e4ea58ddaa8) removes the interpolation entirely: the URL is HTML-escaped into a separate actionurl attribute and the handler reads it back via this.getAttribute("actionurl"), so the value is never re-parsed as JavaScript source.
Know when PHP 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:N/UI:R/S:C/C:N/I:H/A:N
Network-reachable stored XSS (AV:N); no app account needed (PR:N, though a shared key gates it); admin must click a button (UI:R); runs in admin browser (S:C) enabling fleet-wide job deployment (I:H) and session-data read (C:L).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
OCO-Server is a self-hosted endpoint management application for computer inventory, software deployment, and mobile device management. Prior to 1.2.1, Html::commandButton() in lib/Html.class.php embeds an action URL containing a stored computer hostname into a JavaScript string in an inline onclick handler, using htmlspecialchars(ENT_QUOTES) only for HTML escaping. Browsers decode the HTML entities before interpreting the handler as JavaScript, allowing a crafted hostname to escape the string and execute script in an administrator's authenticated session when an affected command button is activated. frontend/views/computer-details.php passes $computer->hostname to this helper using Computer::DEFAULT_COMPUTER_COMMANDS in lib/Models/Computer.class.php, whose VNC, RDP, SSH, and Ping entries use new_tab=false and the vulnerable window.location branch. A remote attacker who possesses the shared agent-registration-key can use the oco.agent.hello handler in frontend/api-agent.php to store an unchecked hostname when agent-self-registration-enabled is enabled; self-registration is disabled by default. The vulnerable default command buttons require no custom command configuration. The injected script can abuse the administrator's privileges, including permission to deploy software jobs to managed computers. This issue is fixed in version 1.2.1.
Technical POC Analysis
CWE-83 (Improper Neutralization of Script in Attributes in a Web Page, child of CWE-79): an output-encoding context mismatch.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A high-severity stored cross-site scripting vulnerability in OCO-Server (versions 1.2.0 and earlier) could allow an attacker with the shared agent-registration key to execute JavaScript in an administrator's session, but only if self-registration is enabled and an admin interacts with a malicious hostname. Leadership should care because successful exploitation could lead to unauthorized actions within the administrative interface, potentially compromising sensitive system management functions.
No vendor-released patch identified at time of analysis. Interim mitigations include disabling the 'agent-self-registration-enabled' setting, rotating the shared 'agent-registration-key', restricting access to the agent registration endpoint, sanitizing agent hostnames, and deploying a web application firewall to block malicious script injection.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
In PHP versions 7.1.x below 7.1.33, 7.2.x below 7.2.24 and 7.3.x below 7.3.11 in certain configurations of FPM setup it
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
EUVD-2026-108209
NVD
CVE.org
GitHub
Exploit-DB