fix(security): treat quoted false as false in browser SSRF guards

This commit is contained in:
Yukipukii1
2026-04-26 05:23:55 +03:00
committed by Teknium
parent 2a0fc97c76
commit 7317d69f19
4 changed files with 46 additions and 3 deletions

View File

@@ -235,3 +235,21 @@ class TestPostRedirectSsrf:
assert result["success"] is True
assert result["url"] == final
class TestAllowPrivateUrlsConfig:
@pytest.fixture(autouse=True)
def _reset_cache(self):
browser_tool._allow_private_urls_resolved = False
browser_tool._cached_allow_private_urls = None
yield
browser_tool._allow_private_urls_resolved = False
browser_tool._cached_allow_private_urls = None
def test_browser_config_string_false_stays_disabled(self, monkeypatch):
monkeypatch.setattr(
"hermes_cli.config.read_raw_config",
lambda: {"browser": {"allow_private_urls": "false"}},
)
assert browser_tool._allow_private_urls() is False

View File

@@ -259,6 +259,20 @@ class TestGlobalAllowPrivateUrls:
with patch("hermes_cli.config.read_raw_config", return_value=cfg):
assert _global_allow_private_urls() is True
def test_config_security_string_false_stays_disabled(self, monkeypatch):
"""Quoted false must not opt out of SSRF protection."""
monkeypatch.delenv("HERMES_ALLOW_PRIVATE_URLS", raising=False)
cfg = {"security": {"allow_private_urls": "false"}}
with patch("hermes_cli.config.read_raw_config", return_value=cfg):
assert _global_allow_private_urls() is False
def test_config_browser_string_false_stays_disabled(self, monkeypatch):
"""Legacy browser.allow_private_urls also normalises quoted false."""
monkeypatch.delenv("HERMES_ALLOW_PRIVATE_URLS", raising=False)
cfg = {"browser": {"allow_private_urls": "false"}}
with patch("hermes_cli.config.read_raw_config", return_value=cfg):
assert _global_allow_private_urls() is False
def test_config_security_takes_precedence_over_browser(self, monkeypatch):
"""security section is checked before browser section."""
monkeypatch.delenv("HERMES_ALLOW_PRIVATE_URLS", raising=False)