Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister or update own account via /api/user/update
-
DeliveryStore full_name with newline-bypass XSS payload
-
ExploitAdmin opens Activity Log, script executes in session
-
ExecutionHijack admin session and invoke privileged job/plugin features
-
ImpactExecute 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
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
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
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
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).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
Privilege escalation in Cronicle through 0.9.120 lets an authenticated non-administrator user, or a scoped API key, that
Stored cross-site scripting (XSS) in Cronicle prior to 0.9.111 allows authenticated users with create_events and run_eve
Cronicle prior to 0.9.111 allows low-privilege authenticated users to modify arbitrary event properties via an authoriza
EUVD-2026-98908
NVD
CVE.org
EPSS
GitHub
Exploit-DB