Skip to main content

Cronicle EUVDEUVD-2026-98908

| CVE-2026-55562 CRITICAL
Cross-site Scripting (XSS) (CWE-79)
2026-10-13 GitHub_M
9.0
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Register or update own account via /api/user/update
  2. Delivery
    Store full_name with newline-bypass XSS payload
  3. Exploit
    Admin opens Activity Log, script executes in session
  4. Execution
    Hijack admin session and invoke privileged job/plugin features
  5. Impact
    Execute arbitrary commands on Cronicle servers

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 multi-user Cronicle deployment where (a) the attacker can control their own account's full_name - either as an authenticated non-administrator via /api/user/update with a valid session and current password, or, only when the non-default 'free_accounts' option is enabled, as an anonymous user via self-registration - and (b) an administrator subsequently opens the admin Activity Log (htdocs/js/pages/admin/Activity.js), which is the UI:R trigger that executes the stored payload. The payload must contain a line break to bypass the bundled pixl-server-user input filter whose regular expression does not match newlines. Limiting factors: exploitation is impossible on single-admin installs with no other users and free_accounts disabled, and the payload only fires when/if an admin views the Activity Log; affected versions are all releases prior to 0.9.119.

Impact

This is a genuinely high-priority stored XSS (CWE-79) in a cross-site-scripting-to-privilege-escalation chain, and the signals are internally consistent rather than inflated. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H, base 9.0) is well-grounded: network-reachable, low complexity, and a scope change (S:C) that is fully justified because a low-privileged user's stored name executes JavaScript inside a higher-privileged administrator's authenticated session, crossing a security boundary into full admin takeover and command execution via Cronicle's privileged job/plugin features. The one tension worth flagging is PR and UI: the base vector uses PR:L (authenticated non-admin) and UI:R (an admin must open the Activity Log), but the description notes that when the non-default 'free_accounts' option is enabled, an unauthenticated attacker can plant the payload during self-registration - effectively PR:N in that configuration, which would raise real-world risk further. EPSS is NOT provided in the input and the vulnerability is NOT listed in CISA KEV, so there is no evidence of active or widespread exploitation. No weaponized public exploit is referenced - only a vendor advisory, fixing commit, and release - so this is a credible, clearly-described, patchable flaw rather than a confirmed in-the-wild threat. Net: treat as a high priority to patch for anyone running Cronicle with multiple users (especially with free_accounts enabled), but recognize exploitation requires a specific multi-user deployment and an admin viewing the log, which limits opportunistic mass exploitation.

Exploit ScenarioDerived

A low-privileged Cronicle user (or, if free_accounts is enabled, an anonymous self-registrant) sets their account's full name to a payload containing a line break that bypasses the pixl-server-user input filter, submitting it via /api/user/update with a valid session and current password. The malicious name is stored and later rendered unencoded in the administrator's Activity Log; when an admin opens that page, the script runs in their session, allowing account takeover and arbitrary command execution through Cronicle's privileged scheduling/plugin features. No standalone public exploit is referenced, but the fixing commit diff publicly reveals the exact unencoded sink (item.user.full_name) and the filter-bypass technique.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.4% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 13, 2026

Stored cross-site scripting in Cronicle (all releases prior to 0.9.119) lets a user-controlled account field - the full_name value - be written into the administrator Activity Log as raw HTML, so JavaScript planted by one user executes inside an administrator's authenticated browser session and can lead to full administrator takeover and command execution through Cronicle's privileged scheduling features. According to the CVSS vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H, 9.0), the attacker needs a valid low-privileged session to set the name via /api/user/update with the current password, or alternatively can plant it anonymously only when the non-default free_accounts self-registration option is enabled, and an administrator must then open the Activity Log for the payload to fire. There is no public exploit identified at time of analysis and no confirmed active exploitation (CISA KEV); the flaw is fixed in 0.9.119, and exploitation is not possible on single-admin installations with free_accounts disabled.

RemediationAI

Upgrade to Cronicle 0.9.119, the vendor-released fix (tag v0.9.119), which applies encode_entities() to user-controlled Activity Log fields through safe_text() and encodeURIComponent() through safe_url() as shown in commit 8b60eb5b041614ab661df50e58e612f5e42a7d30; the advisory is at https://github.com/jhuckaby/Cronicle/security/advisories/GHSA-vh39-3pcm-2j63. If immediate upgrade is not possible, disable the free_accounts option so anonymous self-registration can no longer plant a name, which removes the unauthenticated path but does nothing against existing authenticated low-privileged users; disable or do not provision non-administrator accounts, since on single-admin installs with free_accounts off there is no attacker who can supply the payload; and restrict Activity Log viewing - either by keeping admin logins rare and off shared networks or by fronting the UI with a reverse proxy that enforces an IP allowlist on the /#Admin Activity Log route, accepting the operational cost that legitimate admins lose remote access. Because the payload only fires when an administrator opens the Activity Log, scanning the user store for full_name values containing '<', '>' or embedded newlines and clearing them removes already-planted payloads without affecting the patched code. Do not rely on CSP as the sole control unless script-src is strict and nonce-based, since the injected markup is in-page. Finally, rotate administrator credentials and API keys if an administrator ever loaded the Activity Log on a version prior to 0.9.119, because the injected script could have already used privileged Cronicle features for command execution.

Affected VersionsENISA

Cronicle < 0.9.119

Affected Packages

euvd cronicle fix: 0.9.119

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

Cronicle is a Node.js multi-server task scheduler with a web UI, and its admin Activity Log page (htdocs/js/pages/admin/Activity.js) builds event descriptions by string-concatenating fields such as item.user.full_name, item.user.username, item.cat.title and item.hostname directly into HTML that is inserted with this.div.html - a classic CWE-79 improper neutralization of user-supplied input in generated markup. The missing control is the project's own encode_entities() helper, which the upstream fix (commit 8b60eb5b041614ab661df50e58e612f5e42a7d30) now applies through wrapper functions safe_text() for displayed text and safe_url() for identifiers placed into href attributes, covering users, categories, server groups, plugins, API keys, events, hostnames and job references. The bypass that makes the injection practical is in the bundled pixl-server-user input filter: its regular expression does not match newlines, so a payload containing a line break slips past the sanitizer and is stored. Storage occurs through the normal user profile path - an authenticated non-administrator updating their own full_name via /api/user/update with a valid session and current password, or, when the non-default free_accounts option is enabled, an anonymous party supplying the name during self-registration. The affected product is identified by CPE cpe:2.3:a:jhuckaby:cronicle:*:*:*:*:*:*:*:* (wildcard, i.e. all versions before the fix).

Know when Cronicle 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 9.0 CRITICAL
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
vuln.today AI 9.0 CRITICAL

Authenticated low-priv user stores the payload (PR:L); an admin must open the Activity Log (UI:R); script runs across a privilege boundary into the admin session (S:C) enabling takeover and command execution (C/I/A:H).

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 13, 2026 - 18:19 EUVD
CVE Published
Oct 13, 2026 - 16:18 cve.org
CRITICAL 9.0

DescriptionCVE.org

Cronicle is a multi-server task scheduler and runner, with a web based front-end UI. Prior to 0.9.119, the administrator Activity Log in htdocs/js/pages/admin/Activity.js concatenates the attacker-controlled item.user.full_name value into HTML without applying encode_entities and inserts the result through this.div.html. The bundled pixl-server-user input filter can be bypassed by a tag containing a line break because its regular expression does not match newlines. An authenticated non-administrator can update the attacker's own name through /api/user/update using a valid session and current password; when free_accounts is enabled, an anonymous attacker can instead plant the name during self-registration. The stored name executes script in an administrator's session when the Activity Log is opened, enabling administrator takeover and subsequent command execution through privileged Cronicle features. This issue is fixed in version 0.9.119.

Technical POC Analysis

CWE-79: Improper Neutralization of Input During Web Page Generation.

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

Cronicle versions prior to 0.9.119 contain a stored cross-site scripting flaw that lets a low-privileged user plant code which executes inside an administrator's browser session, enabling full administrative takeover of the scheduling platform and potential command execution through its privileged job-scheduling features. Because Cronicle typically holds credentials and orchestrates work across production systems, an administrator compromise can translate quickly into broad unauthorized access and disruption. No public exploit code or confirmed active exploitation (CISA KEV) is identified at time of analysis, but the low barrier for an attacker holding any valid account makes remediation a near-term priority for any organization running the affected releases.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 71% exploitable
Prevalence
Low
niche open-source multi-server task scheduler, limited enterprise footprint
Data Quality
5 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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
High

Priority Score

45
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +45
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.

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