From 9fe2bd66e5145b436c8d1133704b46fe2ca1598e Mon Sep 17 00:00:00 2001 From: CleverThis Date: Wed, 13 May 2026 18:47:56 +0000 Subject: [PATCH] fix(security): replace startswith bypass in file_ops validate_sandbox_path --- src/cleveragents/skills/builtins/file_ops.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/cleveragents/skills/builtins/file_ops.py b/src/cleveragents/skills/builtins/file_ops.py index 035994e74..b70086262 100644 --- a/src/cleveragents/skills/builtins/file_ops.py +++ b/src/cleveragents/skills/builtins/file_ops.py @@ -77,8 +77,12 @@ def validate_sandbox_path(path_str: str, sandbox_root: str | None = None) -> Pat root = root.resolve() target = (root / path_str).resolve() - if not str(target).startswith(str(root)): - raise ValueError(f"Path traversal detected: '{path_str}' escapes sandbox root") + try: + target.relative_to(root) + except ValueError as exc: + raise ValueError( + f"Path traversal detected: '{path_str}' escapes sandbox root", + ) from exc return target -- 2.52.0