`potato-annotation` has a Project-Boundary Bypass
Summary
validate_path_security uses string-prefix containment (startswith) for boundary checks. This allows paths that are outside the intended project directory but share its prefix string (e.g., /tmp/potato_proj_demo_evil/... vs /tmp/potato_proj_demo) to be accepted.
Details
Affected source location (root cause)
File: potato/server_utils/config_module.py
Snippet (lines 370–373):
real_path = os.path.realpath(normalized_path)
real_base = os.path.realpath(base_dir)
if not real_path.startswith(real_base):
raise ConfigSecurityError(...)
Snippet (lines 384–389):
real_path = os.path.realpath(normalized_path)
check_dir = project_dir if project_dir else base_dir
real_check_dir = os.path.realpath(check_dir)
if not real_path.startswith(real_check_dir):
raise ConfigSecurityError(...)
startswith() is string-based, so /tmp/potato_proj_demo_evil/... passes when checked against /tmp/potato_proj_demo.
Confirmed affected call sites
File: potato/server_utils/config_module.py
validate_file_pathstask_dir branch (line 2113)
validated_task_dir = validate_path_security(task_dir, project_dir)
validate_file_pathsdata_files branch (line 2151)
validated_path = validate_path_security(file_path, base_dir, project_dir)
validate_training_configtraining.data_file branch (line 2286)
validated_path = validate_path_security(data_file, base_dir, project_dir)
PoC
from potato.server_utils.config_module import validate_path_security
base = '/tmp/potato_proj_demo'
vuln = '/tmp/potato_proj_demo_evil/file.txt'
try:
print('inside=', validate_path_security('/tmp/potato_proj_demo/file.txt', base, base))
except Exception as e:
print('inside_error=', type(e).__name__, e)
try:
validate_path_security('/tmp/other_demo/file.txt', base, base)
except Exception as e:
print('baseline=', type(e).__name__, e)
print('trigger=', validate_path_security(vuln, base, base))
Impact
- Can allow unauthorized sibling-prefix file access outside intended project boundary.
- Can affect read paths (
data_files,training.data_file,base_css,header_logo) and output/path placement depending on configuration.
Czego dotyczy
Kliknij technologię, aby zobaczyć wszystkie dotyczące jej podatności.
| Platforma | Paczka | Podatne wersje | Poprawka w wersji |
|---|---|---|---|
| Python (PyPI) | potato-annotation | >= 2.0.0, < 2.4.5 | 2.4.5 |
Odnośniki
- Wektor CVSS
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N- Słabość (CWE)
CWE-22- Platforma
- Python (PyPI)
- Paczka
potato-annotation- Ujawniono
- 08.05.2026
- Aktualizacja
- 11.10.2026 12:19
Źródła i licencje
OSV / GitHub Advisory Database - GHSA-q9m2-fhv9-3jcf - CC BY 4.0
Historia podatności: potato-annotation
Wszystkie opisane podatności tej paczki (Python (PyPI)), od najnowszej. Widać, czy to jednorazowa wpadka, czy paczka, której trzeba pilnować.
To jedyna znana podatność tej paczki.
Dowiedz się, które podatności dotyczą Twojej aplikacji
Po podłączeniu integracji DockRay i włączeniu raportowania oprogramowania DockRay porównuje zgłoszone wersje komponentów ze znanymi podatnościami i powiadamia o potwierdzonych dopasowaniach. Zakres zależy od obsługiwanej technologii i dostępnych biuletynów.