mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-25 00:51:20 +00:00
fix(approval): guard env and config overwrites
This commit is contained in:
parent
1cc0bdd5f3
commit
1dfcda4e3c
4 changed files with 68 additions and 1 deletions
|
|
@ -434,6 +434,58 @@ class TestSensitiveRedirectPattern:
|
|||
assert dangerous is False
|
||||
assert key is None
|
||||
|
||||
def test_redirect_to_local_dotenv_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("echo TOKEN=x > .env")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
def test_redirect_to_nested_config_yaml_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("echo mode: prod > deploy/config.yaml")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
def test_redirect_from_local_dotenv_source_is_safe(self):
|
||||
dangerous, key, desc = detect_dangerous_command("cat .env > backup.txt")
|
||||
assert dangerous is False
|
||||
assert key is None
|
||||
assert desc is None
|
||||
|
||||
|
||||
class TestProjectSensitiveCopyPattern:
|
||||
def test_cp_to_local_dotenv_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("cp .env.local .env")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
def test_mv_to_nested_config_yaml_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("mv tmp/generated.yaml config/config.yaml")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
def test_install_to_dotenv_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("install -m 600 template.env .env.production")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
def test_cp_from_config_yaml_source_is_safe(self):
|
||||
dangerous, key, desc = detect_dangerous_command("cp config.yaml backup.yaml")
|
||||
assert dangerous is False
|
||||
assert key is None
|
||||
assert desc is None
|
||||
|
||||
|
||||
class TestProjectSensitiveTeePattern:
|
||||
def test_tee_to_local_dotenv_requires_approval(self):
|
||||
dangerous, key, desc = detect_dangerous_command("printenv | tee .env.local")
|
||||
assert dangerous is True
|
||||
assert key is not None
|
||||
assert "project env/config" in desc.lower()
|
||||
|
||||
|
||||
class TestPatternKeyUniqueness:
|
||||
"""Bug: pattern_key is derived by splitting on \\b and taking [1], so
|
||||
|
|
@ -836,4 +888,3 @@ class TestChmodExecuteCombo:
|
|||
cmd = "chmod +x script.sh"
|
||||
dangerous, _, _ = detect_dangerous_command(cmd)
|
||||
assert dangerous is False
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue