Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ GHSA-q9m2-fhv9-3jcf — potato-annotation

⚪ Unknown ✅ No Known Exploit CWE-22 OSV
N/A
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

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):

```python

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):

```python

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

1) validate_file_paths task_dir branch (line 2113)

```python

validated_task_dir = validate_path_security(task_dir, project_dir)

```

2) validate_file_paths data_files branch (line 2151)

```python

validated_path = validate_path_security(file_path, base_dir, project_dir)

```

3) validate_training_config training.data_file branch (line 2286)

```python

validated_path = validate_path_security(data_file, base_dir, project_dir)

```

PoC

```python

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.

How this vulnerability can be exploited

This issue can be reached with local access to the system, attack complexity is low, an attacker needs no privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality low, integrity low, availability none.

Weakness class

GHSA-q9m2-fhv9-3jcf is classified as CWE-22: Path Traversal. A file path built from user input is not confined to the intended directory, letting an attacker reach files elsewhere on the filesystem.

Affected software

GHSA-q9m2-fhv9-3jcf is recorded against 1 package.

  • potato-annotation (from 2.0.0 up to 2.4.5)

Timeline and source

Published on 8 May 2026. No public exploit is currently recorded for this entry. Record sourced from OSV.

References

github.com (Web)
github.com (Package)

Details

Severity Unknown
CVSS Score N/A
CVSS Vector CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
CWE CWE-22
Public Exploit ✅ No
Source OSV
Published 2026-05-08
Updated 2026-08-20
Modified 2026-05-08
Fix URL N/A

Affected Packages

Software From version Fixed in
potato-annotation 2.0.0 2.4.5

Free Vulnerability Check

Is your site affected by GHSA-q9m2-fhv9-3jcf?

BotEraser helps you identify potentially vulnerable plugins and themes by checking your installation against GHSA-q9m2-fhv9-3jcf and other known CVE records.

Scan My Site Free →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.