CVE-2026-106706 in XXL-JOBinfo

Summary

by MITRE • 10/15/2026

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.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 10/15/2026

The vulnerability identified in XXL-JOB versions up to 3.5.0-SNAPSHOT represents a critical security flaw within its Glue code editor component, specifically classified as Stored Cross-Site Scripting (XSS). This type of attack allows an adversary to inject malicious client-side scripts into web pages viewed by other users. In the context of XXL-JOB, which is widely used for distributed task scheduling and management in enterprise environments, this vulnerability poses a significant risk because it targets administrative interfaces where sensitive operational data and control over job execution reside. The flaw stems from improper input validation and output encoding practices within the application's backend logic and frontend rendering mechanisms.

The technical root cause lies in the interaction between the JobCodeController.save() method and the FreeMarker template engine used for rendering the user interface. When a user submits code to be saved as part of a Glue job configuration, the save function accepts the glueSource parameter directly from the HTTP request without applying any sanitization or encoding filters. This raw input is then persisted into the database. Subsequently, when this stored data is retrieved and displayed back to users via the FreeMarker template file named job.code.ftl, it is rendered as plain text rather than being escaped for HTML context. Because modern web browsers interpret script tags embedded in unescaped content as executable JavaScript, any malicious payload saved through this interface will execute automatically whenever an administrator or authorized user views that specific job's configuration page.

From a classification perspective, this vulnerability aligns with CWE-79, which describes Improper Neutralization of Input During Web Page Generation known as Cross-site Scripting. More specifically, it falls under the subcategory of Stored XSS because the malicious script is permanently stored on the target server within the application's data store rather than being reflected immediately in a response. This persistence distinguishes it from Reflected XSS and increases its severity, as every user who accesses the affected page becomes a potential victim without needing to click a specially crafted link. The attack vector leverages the trust that users place in the web application interface, exploiting the fact that content originating from the server is typically assumed to be safe by the browser's same-origin policy.

The operational impact of this vulnerability extends beyond simple script execution. An attacker with access to create or edit Glue jobs can achieve Remote Code Execution (RCE) implications depending on how the executed scripts interact with other parts of the system. For instance, malicious JavaScript could perform Cross-Site Request Forgery (CSRF) attacks against the XXL-JOB API, allowing the attacker to trigger job executions, modify configurations, or delete tasks without authorization. Furthermore, session hijacking is a primary concern; attackers can steal administrative cookies or tokens stored in local storage if not properly secured with HttpOnly flags, thereby gaining full control over the scheduling platform. This could lead to widespread disruption of business-critical batch processes, data exfiltration from connected systems accessed via authenticated sessions, and potential lateral movement within the internal network if the scheduled jobs have access to sensitive resources.

Mitigation strategies must address both immediate remediation and long-term architectural improvements. The most effective short-term fix involves modifying the JobCodeController.save() method to sanitize or encode the glueSource parameter before it is persisted to the database, ensuring that any HTML special characters are converted into their corresponding entity equivalents such as converting ampersands to & and less-than signs to <. Simultaneously, developers must update the FreeMarker template job.code.ftl to explicitly escape variables when rendering them in an HTML context. Utilizing built-in escaping mechanisms provided by FreeMarker, such as the html or uri escapes, will prevent the browser from interpreting stored content as executable code.

In addition to these specific code changes, organizations should implement a Content Security Policy (CSP) header that restricts the sources from which scripts can be loaded and executed. This acts as an additional layer of defense-in-depth by blocking inline script execution even if XSS vulnerabilities persist in the application logic. Access controls must also be reviewed to ensure that only highly privileged administrators have access to the Glue code editor, reducing the attack surface for potential exploitation. Regular security audits and static analysis tools configured to detect missing output encoding should be integrated into the development lifecycle to prevent similar issues from being introduced in future updates of XXL-JOB or related components.

Responsible

MITRE

Reservation

10/07/2026

Disclosure

10/15/2026

Moderation

accepted

EPSS

0.00168

KEV

no

Activities

very low

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!