CVE-2025-25296: Label Studio: reflected XSS via label_config param
GHSA-wpq5-3366-mqw4 MEDIUM PoC AVAILABLE CISA: TRACK*Upgrade Label Studio to 1.16.0 immediately on any instance accessible to annotation teams. This reflected XSS requires zero privileges—an attacker sends a crafted URL to an annotator, steals their session, and gains full access to annotation projects and training datasets. Organizations handling sensitive or proprietary ML training data via Label Studio should treat this as high operational priority despite the medium CVSS score.
Risk Assessment
CVSS 6.1 understates operational risk in ML pipeline contexts. Label Studio routinely handles proprietary training datasets, PII, and sensitive labeling work. The CSP is configured in report-only mode—effectively disabled—removing a critical defense layer. No authentication is required; the only barrier is user interaction with a malicious link. Organizations with internet-exposed or multi-user Label Studio deployments face meaningful risk of session hijacking and training data exfiltration.
Affected Systems
| Package | Ecosystem | Vulnerable Range | Patched |
|---|---|---|---|
| label-studio | pip | < 1.16.0 | 1.16.0 |
Do you use label-studio? You're affected.
Severity & Risk
Attack Surface
Recommended Action
6 steps-
Patch: Upgrade to Label Studio >= 1.16.0 immediately.
-
Workaround if patching is delayed: block external access to /projects/upload-example via WAF or reverse proxy rule rejecting GET requests with label_config parameters.
-
Enable CSP enforcement mode—remove the report-only flag from the Content-Security-Policy header.
-
Rotate all active session tokens on exposed instances.
-
Audit web server logs for anomalous GET requests to /projects/upload-example containing URL-encoded XML payloads.
-
Restrict Label Studio to VPN-only access if internet-exposed.
CISA SSVC Assessment
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
Classification
Compliance Impact
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2025-25296?
Upgrade Label Studio to 1.16.0 immediately on any instance accessible to annotation teams. This reflected XSS requires zero privileges—an attacker sends a crafted URL to an annotator, steals their session, and gains full access to annotation projects and training datasets. Organizations handling sensitive or proprietary ML training data via Label Studio should treat this as high operational priority despite the medium CVSS score.
Is CVE-2025-25296 actively exploited?
Proof-of-concept exploit code is publicly available for CVE-2025-25296, increasing the risk of exploitation.
How to fix CVE-2025-25296?
1. Patch: Upgrade to Label Studio >= 1.16.0 immediately. 2. Workaround if patching is delayed: block external access to /projects/upload-example via WAF or reverse proxy rule rejecting GET requests with label_config parameters. 3. Enable CSP enforcement mode—remove the report-only flag from the Content-Security-Policy header. 4. Rotate all active session tokens on exposed instances. 5. Audit web server logs for anomalous GET requests to /projects/upload-example containing URL-encoded XML payloads. 6. Restrict Label Studio to VPN-only access if internet-exposed.
What systems are affected by CVE-2025-25296?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, data annotation workflows, ml data management.
What is the CVSS score for CVE-2025-25296?
CVE-2025-25296 has a CVSS v3.1 base score of 6.1 (MEDIUM). The EPSS exploitation probability is 20.05%.
Technical Details
NVD Description
## Description Label Studio's `/projects/upload-example` endpoint allows injection of arbitrary HTML through a `GET` request with an appropriately crafted `label_config` query parameter. By crafting a specially formatted XML label config with inline task data containing malicious HTML/JavaScript, an attacker can achieve Cross-Site Scripting (XSS). While the application has a Content Security Policy (CSP), it is only set in report-only mode, making it ineffective at preventing script execution. The vulnerability exists because the upload-example endpoint renders user-provided HTML content without proper sanitization on a GET request. This allows attackers to inject and execute arbitrary JavaScript in victims' browsers by getting them to visit a maliciously crafted URL. This is considered vulnerable because it enables attackers to execute JavaScript in victims' contexts, potentially allowing theft of sensitive data, session hijacking, or other malicious actions. ## Steps to reproduce 1. Create a malicious label config that includes an XSS payload in embedded task data: ```xml <View><!-- {"data": {"text": "<div><img src=x onerror=eval(atob(`YWxlcnQoIlhTUyIp`))></div>"}} --><HyperText name="text" value="$text"/></View> ``` 2. URL encode the payload and access the following URL: - http://app/projects/upload-example/?label_config=%3CView%3E%3C!--%20{%22data%22:%20{%22text%22:%20%22%3Cdiv%3E%3Cimg%20src=x%20onerror=eval(atob(`YWxlcnQoIlhTUyIp`))%3E%3C/div%3E%22}}%20--%3E%3CHyperText%20name=%22text%22%20value=%22$text%22/%3E%3C/View%3E When executed, the payload causes the application to render an HTML page containing an img tag that fails to load, triggering the onerror event handler which executes base64-decoded JavaScript, demonstrating successful XSS execution in the victim's browser. ## Mitigations - Enable the Content Security Policy in enforcement mode instead of report-only mode to actively block unauthorized script execution - Deprecate the `GET` behavior at the `example-config` endpoint since it's not used ## Impact The vulnerability requires no special privileges and can be exploited by getting a victim to visit a crafted URL. The impact is high as it allows arbitrary JavaScript execution in victims' browsers, potentially exposing sensitive data or enabling account takeover through session theft.
Exploitation Scenario
An adversary targeting an organization's ML training pipeline uses Shodan or Censys to identify exposed Label Studio instances. They craft a GET URL to /projects/upload-example with a label_config parameter containing a base64-encoded JavaScript payload embedded in an XML HyperText config. The URL is delivered via spearphishing email to a data annotator or ML engineer. When the target clicks the link, their browser renders the malicious HTML, executes the JavaScript payload, and exfiltrates the session cookie to an attacker-controlled server. The attacker uses the stolen session to access annotation projects, download training datasets, or inject poisoned labels—silently corrupting the ML model being trained without triggering any authentication alerts.
Weaknesses (CWE)
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N References
- github.com/HumanSignal/label-studio/commit/8cf6958e1e27ef6a03ed287e674470975d340885
- github.com/HumanSignal/label-studio/security/advisories/GHSA-wpq5-3366-mqw4
- github.com/advisories/GHSA-wpq5-3366-mqw4
- nvd.nist.gov/vuln/detail/CVE-2025-25296
- github.com/a1batr0ssG/VulhubExpand Exploit
- github.com/math-x-io/CVE-2025-25296-POC Exploit
- github.com/nomi-sec/PoC-in-GitHub Exploit
- github.com/plzheheplztrying/cve_monitor Exploit
Timeline
Related Vulnerabilities
CVE-2025-25297 8.6 Label Studio: SSRF via S3 endpoint exposes internal services
Same package: label-studio CVE-2025-5173 7.8 label-studio-ml: PyTorch .pt deserialization RCE in YOLO loader
Same package: label-studio CVE-2022-36551 6.5 Label Studio: SSRF + file read, self-reg bypass
Same package: label-studio CVE-2026-22033 label-studio: XSS enables session hijacking
Same package: label-studio CVE-2025-47783 Label Studio: XSS enables unauthorized actions via CSRF
Same package: label-studio
AI Threat Alert