VYPR
Moderate severityNVD Advisory· Published Feb 14, 2025· Updated Feb 14, 2025

Label Studio allows Cross-Site Scripting (XSS) via GET request to `/projects/upload-example` endpoint

CVE-2025-25296

Description

Label Studio is an open source data labeling tool. Prior to version 1.16.0, 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. Version 1.16.0 contains a patch for the issue.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
label-studioPyPI
< 1.16.01.16.0

Affected products

1

Patches

1
8cf6958e1e27

fix: LEAP-1806: deprecate unused upload-example behavior (#7018)

1 file changed · +2 4
  • label_studio/projects/views.py+2 4 modified
    @@ -36,12 +36,10 @@ def playground_replacements(request, task_data):
         return task_data
     
     
    -@require_http_methods(['GET', 'POST'])
    +@require_http_methods(['POST'])
     def upload_example_using_config(request):
         """Generate upload data example by config only"""
    -    config = request.GET.get('label_config', '')
    -    if not config:
    -        config = request.POST.get('label_config', '')
    +    config = request.POST.get('label_config', '')
     
         org_pk = get_organization_from_request(request)
         secure_mode = False
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

4

News mentions

0

No linked articles in our index yet.