Skip to main content

OCO-Server CVE-2026-61791

| EUVDEUVD-2026-108209 HIGH
Improper Neutralization of Script in Attributes in a Web Page (CWE-83)
2026-10-22 GitHub_M
7.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain shared agent-registration-key
  2. Delivery
    Self-register ghost host with crafted hostname
  3. Exploit
    Escape onclick JS string via browser HTML-decoding
  4. Execution
    Admin opens details and clicks default command button
  5. Impact
    Run 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

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 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

OCO-Server < 1.2.1

Affected Packages

euvd oco_server fix: 1.2.1

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

Vendor (GitHub_M) PRIMARY 7.4 HIGH
AV:N/AC:L/PR:N/UI:R/S:C/C:N/I:H/A:N
vuln.today AI 8.2 HIGH

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).

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Changed
Confidentiality
None
Integrity
High
Availability
None

Lifecycle Timeline

2
Patch available
Oct 22, 2026 - 16:02 EUVD
CVE Published
Oct 22, 2026 - 14:55 cve.org
HIGH 7.4

DescriptionCVE.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

Why It Matters

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.

Business Impact: Medium
Compensating Controls

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

Prevalence
Low
niche self-hosted endpoint-management tool from a single open-source developer
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 HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Medium

Priority Score

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

Attack Technique

Code Injection CRITICAL

Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.

More in PHP

View all
CVE-2019-11043 CRITICAL POC
9.8 Oct 28

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

CVE-2012-1823 CRITICAL POC
9.8 May 11

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

CVE-2016-1555 CRITICAL POC
9.8 Apr 21

(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear

CVE-2018-11138 CRITICAL POC
9.8 May 31

The '/common/download_agent_installer.php' script in the Quest KACE System Management Appliance 8.0.318 is accessible by

CVE-2024-11680 CRITICAL POC
9.8 Nov 26

ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C

CVE-2025-49113 CRITICAL POC
9.9 Jun 02

Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au

CVE-2017-9841 CRITICAL POC
9.8 Jun 27

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

CVE-2025-0108 HIGH POC
8.8 Feb 12

Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers

CVE-2021-25298 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2021-25296 HIGH POC
8.8 Feb 15

Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re

CVE-2013-4983 CRITICAL POC
10.0 Sep 10

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

CVE-2023-6553 CRITICAL POC
9.8 Dec 15

The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1

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