Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to XXL-JOB admin console
-
DeliveryInject script via glueSource in GLUE editor
-
ExploitStored unescaped by JobCodeController.save()
-
ExecutionAdministrator opens job.code.ftl view
-
PersistMalicious JavaScript executes in victim browser
-
ImpactHijack admin session / act as victim
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 | Exploitation requires an authenticated XXL-JOB admin console account with privileges to create or edit GLUE-mode jobs (PR:L), since the payload is injected through the glueSource parameter handled by JobCodeController.save(). The stored script fires only when another authenticated user - typically an administrator - subsequently opens the job's GLUE code view rendered by the job.code.ftl template (UI:R). Limiting factors: no anonymous/unauthenticated path exists, the attack is inert until a victim views the specific job code page, and impact is confined to the browser session of that viewer (no direct server compromise from the XSS itself). Default deployments are affected because the vulnerable code lacks output encoding regardless of configuration. |
| Impact | This is a genuine but moderate-priority issue, not a top-tier emergency. The CVSS 3.1 base score of 5.4 (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N) is internally consistent with a stored XSS flaw: network-reachable but gated behind both authentication (PR:L - an attacker must already hold an account able to save GLUE job code) and victim interaction (UI:R - another user must open the affected page). The scope change (S:C) correctly reflects script executing in a victim's browser authority rather than the server's. No EPSS score, CISA KEV listing, or published proof-of-concept exploit is present in the supplied data, so exploitation status is 'no public exploit identified at time of analysis.' There is no signal conflict to reconcile - all indicators point the same direction (medium severity, no known exploitation). The one escalation concern NOT captured by the base score: XXL-JOB's admin console can schedule and execute arbitrary GLUE tasks on worker nodes, so a hijacked administrator session could be leveraged toward code execution - the C:L/I:L rating understates this chained potential. Treat as a patch-in-normal-cycle item, elevated if the admin console is exposed to multiple or lower-trust users. |
| Exploit ScenarioDerived | An attacker holding a low-privileged XXL-JOB admin console account that can create or edit GLUE jobs saves a job whose glueSource field contains a JavaScript payload. Because JobCodeController.save() stores the value without encoding and the job.code.ftl FreeMarker template renders it unescaped, the script executes when an administrator later opens that job's code view, potentially stealing the admin session. No public exploit code was identified in the provided data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Stored cross-site scripting in the XXL-JOB GLUE code editor (versions through 3.5.0-SNAPSHOT) lets an authenticated user with permission to create or edit GLUE-mode jobs persist arbitrary JavaScript through the glueSource parameter, which JobCodeController.save() stores without output encoding and the FreeMarker template job.code.ftl renders unescaped. The script is inert until another authenticated user - typically an administrator - opens the affected job's GLUE code view, so exploitation requires an authenticated attacker (PR:L per the assessed vector) plus victim interaction (UI:R), and the resulting impact is confined to the victim's browser session with low confidentiality and integrity effects (C:L/I:L, S:C); no server-side compromise follows from the XSS itself. No public exploit code has been identified at time of analysis and there is no confirmed active exploitation (not in CISA KEV). At CVSS 5.4 this is a genuine but moderate-priority issue rather than a top-tier emergency, and default deployments remain affected because the vulnerable rendering path lacks output encoding regardless of configuration.
RemediationAI
No vendor-released patch was identified at time of analysis, so the primary action is to track the upstream project at https://github.com/xuxueli/xxl-job for a fixed release and, once one is published, upgrade XXL-JOB to that version or later (the advisory at https://github.com/tao0845/CVE-Request/blob/main/CVE-2026-106706.md should be consulted for any version-specific guidance before upgrading a snapshot build in production). Where patching cannot wait, apply targeted compensating controls rather than generic hardening: enable FreeMarker HTML auto-escaping for the code-view template (set output_format="HTML" or apply the ?html built-in to the job code interpolation in job.code.ftl), accepting the trade-off that auto-escaping may alter rendering of other templates and could double-escape content if the same template is reused for raw code display, so test against existing GLUE jobs before rollout; additionally HTML-encode or sanitize glueSource on the server side in JobCodeController.save(), understanding that strict sanitization can break legitimate GLUE scripts containing angle brackets or ampersands. Restrict and monitor who can create or edit GLUE-mode jobs, treat admin-console accounts as privileged, and require re-authentication or an approval step for job code changes. Reduce the blast radius of a successful payload by network-isolating or IP-allowlisting the XXL-JOB admin console so it is not reachable from general user networks, by deploying a Content-Security-Policy that forbids inline script on the console responses (which may require nonce/hash rework of console JavaScript), and by setting session cookies HttpOnly so injected script cannot trivially read them. Finally, audit existing job definitions for injected script or unexpected markup in the glueSource field, since stored payloads persist until the affected job is edited or deleted, and attackers with edit rights can silently maintain the injection across upgrades.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
XXL-JOB is a distributed task-scheduling platform whose admin console supports "GLUE" mode, in which job handler logic (Java, Shell, Python, and similar GLUE variants) is edited directly in a browser-based code editor and persisted in the backend datastore. The defect sits at the boundary between persistence and presentation: JobCodeController.save() accepts the user-supplied glueSource parameter and writes it to storage verbatim, and the FreeMarker view template job.code.ftl later interpolates that stored value into the HTML response without escaping (no ?html built-in and no output_format="HTML" auto-escaping). The root cause therefore maps to the classic CWE-79 improper-neutralization-during-web-page-generation class - a second-order (stored) XSS where the malicious content is never reflected immediately but is replayed to every subsequent viewer of the job code page. The assessed vector CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N describes the practical shape of the bug: remotely reachable, low attack complexity, but gated behind an authenticated account with job-editing privileges, dependent on a victim opening the crafted job view, and scoped to the victim's browser context (S:C) rather than the XXL-JOB server process. Because the injection point is the same field used for legitimate script content, naive output filtering is risky and the correct fix is contextual escaping at render time plus server-side canonicalization on save. The single CPE entry supplied is a generic placeholder (cpe:2.3:a:n/a:n/a:*:*:*:*:*:*:*:*) and provides no version pinning, so affected-scope determination must come from the vendor repository and the version range stated in the advisory.
Know when Xxl Job 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:L/I:L/A:N
Attacker needs a job-editing account (PR:L) and a victim must view the page (UI:R); stored script runs in the victim's browser authority (S:C) with limited C/I and no availability impact.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
DescriptionCVE.org
XXL-JOB through 3.5.0-SNAPSHOT is vulnerable to stored cross-site scripting (XSS) in the GLUE code editor. JobCodeController.save() stores the user-supplied glueSource parameter without output encoding, and the FreeMarker template job.code.ftl renders the stored value unescaped.
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.
A vulnerability classified as problematic was found in Xuxueli xxl-job up to 2.4.1. Rated critical severity (CVSS 9.8),
XXL-JOB 2.2.0 has a Command execution vulnerability in background tasks. Rated critical severity (CVSS 9.8), this vulner
A lateral privilege escalation vulnerability in XXL-Job v2.4.1 allows users to execute arbitrary commands on another use
Insecure Permissions vulnerability in xxl-job v.2.4.1 allows a remote attacker to execute arbitrary code via the Sub-Tas
xxl-job =< 2.4.1 has a Server-Side Request Forgery (SSRF) vulnerability, which causes low-privileged users to control ex
xxl-job-admin 2.4.0 is vulnerable to Remote Code Execution (RCE) via /xxl-job-admin/jobcode/save. Rated high severity (C
XXL-Job before v2.3.1 contains a Server-Side Request Forgery (SSRF) via the component /admin/controller/JobLogController
A Cross-Site Request Forgery (CSRF) in XXL-Job v2.3.0 allows attackers to arbitrarily create administrator accounts via
Permissions vulnerabiltiy found in Xuxueli xxl-job v2.2.0, v 2.3.0 and v.2.3.1 allows attacker to obtain sensitive infor
A vulnerability, which was classified as problematic, has been found in XXL-JOB 2.3.1. Rated medium severity (CVSS 6.5),
This affects all versions of the package com.xuxueli:xxl-job. Rated medium severity (CVSS 6.1), this vulnerability is re
XXL-JOB 2.2.0 allows Stored XSS (in Add User) to bypass the 20-character limit via xxl-job-admin/src/main/java/com/xxl/j
EUVD-2026-102258
GHSA-vh8g-cp9j-gj4r
NVD
CVE.org
EPSS
Exploit-DB