Skip to content

Commit 3353eae

Browse files
fix(agents): guard alias output path against directory traversal
Validate that alias_file resolves within commands_dir before writing. Uses the same resolve().relative_to() pattern already established in extensions.py for ZIP path containment checks.
1 parent d912b2d commit 3353eae

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

src/specify_cli/agents.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,12 @@ def register_commands(
562562
alias_file = (
563563
commands_dir / f"{alias_output_name}{agent_config['extension']}"
564564
)
565+
try:
566+
alias_file.resolve().relative_to(commands_dir.resolve())
567+
except ValueError:
568+
raise ValueError(
569+
f"Alias output path escapes commands directory: {alias_file!r}"
570+
)
565571
alias_file.parent.mkdir(parents=True, exist_ok=True)
566572
alias_file.write_text(alias_output, encoding="utf-8")
567573
if agent_name == "copilot":

0 commit comments

Comments
 (0)