Skip to main content

XXL-JOB CVE-2026-106706

| EUVDEUVD-2026-102258 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-15 mitre GHSA-vh8g-cp9j-gj4r
5.4
CVSS 3.1 · Vendor: mitre
View

Attack ChainAIDerived

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

  1. Access
    Authenticate to XXL-JOB admin console
  2. Delivery
    Inject script via glueSource in GLUE editor
  3. Exploit
    Stored unescaped by JobCodeController.save()
  4. Execution
    Administrator opens job.code.ftl view
  5. Persist
    Malicious JavaScript executes in victim browser
  6. Impact
    Hijack 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

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

Alert me

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

n/a n/a

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

Vendor (mitre) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

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.

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

Primary rating from Vendor (mitre).

CVSS VectorVendor: mitre

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

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

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Medium
popular open-source Java distributed task scheduler, common but not universal
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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Medium

Priority Score

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

CVE-2024-3366 CRITICAL POC
9.8 Apr 06

A vulnerability classified as problematic was found in Xuxueli xxl-job up to 2.4.1. Rated critical severity (CVSS 9.8),

CVE-2022-40929 CRITICAL POC
9.8 Sep 28

XXL-JOB 2.2.0 has a Command execution vulnerability in background tasks. Rated critical severity (CVSS 9.8), this vulner

CVE-2023-33779 HIGH POC
8.8 May 26

A lateral privilege escalation vulnerability in XXL-Job v2.4.1 allows users to execute arbitrary commands on another use

CVE-2024-42681 HIGH POC
8.8 Aug 15

Insecure Permissions vulnerability in xxl-job v.2.4.1 allows a remote attacker to execute arbitrary code via the Sub-Tas

CVE-2024-24113 HIGH POC
8.8 Feb 08

xxl-job =< 2.4.1 has a Server-Side Request Forgery (SSRF) vulnerability, which causes low-privileged users to control ex

CVE-2023-48089 HIGH POC
8.8 Nov 15

xxl-job-admin 2.4.0 is vulnerable to Remote Code Execution (RCE) via /xxl-job-admin/jobcode/save. Rated high severity (C

CVE-2022-43183 HIGH POC
8.8 Nov 17

XXL-Job before v2.3.1 contains a Server-Side Request Forgery (SSRF) via the component /admin/controller/JobLogController

CVE-2022-29002 HIGH POC
8.8 May 23

A Cross-Site Request Forgery (CSRF) in XXL-Job v2.3.0 allows attackers to arbitrarily create administrator accounts via

CVE-2023-27087 HIGH POC
7.5 Mar 21

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

CVE-2023-0674 MEDIUM POC
6.5 Feb 04

A vulnerability, which was classified as problematic, has been found in XXL-JOB 2.3.1. Rated medium severity (CVSS 6.5),

CVE-2023-26120 MEDIUM POC
6.1 Apr 10

This affects all versions of the package com.xuxueli:xxl-job. Rated medium severity (CVSS 6.1), this vulnerability is re

CVE-2020-29204 MEDIUM POC
6.1 Dec 27

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

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