PraisonAIAgents: Path Traversal via Unvalidated Glob Pattern in list_files Bypasses Workspace Boundary
Date: 2026-04
Affected: pip/praisonaiagents
Attack vector: prompt-injection
Category: vulnerability-disclosure
Severity: Medium
CVE: CVE-2026-40152
CWE: CWE-22
CVSS: 5.3 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N)

## Summary The `list_files()` tool in `FileTools` validates the `directory` parameter against workspace boundaries via `_validate_path()`, but passes the `pattern` parameter directly to `Path.glob()` without any validation. Since Python's `Path.glob()` supports `..` path segments, an attacker can use relative path traversal in the glob pattern to enumerate arbitrary files outside the workspace, obtaining file metadata (existence, name, size, timestamps) for any path on the filesystem. ## Details The `_validate_path()` method at `file_tools.py:25` correctly prevents path traversal by checking for `..` segments and verifying the resolved path falls within the current workspace. All file operations (`read_file`, `write_file`, `copy_file`, etc.) route through this validation. However, `list_files()` at `file_tools.py:114` only validates the `directory` parameter (line 127), while the `pattern` parameter is passed directly to `Path.glob()` on line 130: ```python @staticmethod def list_files(directory: str, pattern: Optional[str] = None) -> List[Dict[str, Union[str, int]]]: try: safe_dir = FileTools._validate_path(directory) # directory validated path = Path(safe_dir) if pattern: files = path.glob(pattern) # pattern NOT validated — traversal possible else: files = path.iterdir() result = [] for file in files: if file.is_file(): stat = file.stat() result.ap


Mitigations:

Architectural layers (MAESTRO):