diff --git a/monkey/common/agent_configuration/agent_sub_configuration_schemas.py b/monkey/common/agent_configuration/agent_sub_configuration_schemas.py index 15fdd6ba9..81dc6f53b 100644 --- a/monkey/common/agent_configuration/agent_sub_configuration_schemas.py +++ b/monkey/common/agent_configuration/agent_sub_configuration_schemas.py @@ -115,7 +115,7 @@ class NetworkScanConfigurationSchema(Schema): class ExploitationOptionsConfigurationSchema(Schema): - http_ports = fields.List(fields.Int()) + http_ports = fields.List(fields.Int(validate=validate.Range(min=0, max=65535))) @post_load @freeze_lists diff --git a/monkey/common/agent_configuration/agent_sub_configurations.py b/monkey/common/agent_configuration/agent_sub_configurations.py index ab05a55cc..16d3d23cf 100644 --- a/monkey/common/agent_configuration/agent_sub_configurations.py +++ b/monkey/common/agent_configuration/agent_sub_configurations.py @@ -106,6 +106,13 @@ class NetworkScanConfiguration: @dataclass(frozen=True) class ExploitationOptionsConfiguration: + """ + A configuration for exploitation options + + Attributes: + :param http_ports: HTTP ports to exploit + """ + http_ports: Tuple[int, ...] diff --git a/monkey/tests/unit_tests/common/configuration/test_agent_configuration.py b/monkey/tests/unit_tests/common/configuration/test_agent_configuration.py index 95539b9c7..ec1f884e1 100644 --- a/monkey/tests/unit_tests/common/configuration/test_agent_configuration.py +++ b/monkey/tests/unit_tests/common/configuration/test_agent_configuration.py @@ -48,6 +48,8 @@ from common.agent_configuration.agent_sub_configurations import ( PropagationConfiguration, ) +INVALID_PORTS = [[-1, 1, 2], [1, 2, 99999]] + def test_build_plugin_configuration(): schema = PluginConfigurationSchema() @@ -145,7 +147,7 @@ def test_tcp_scan_configuration_schema(): assert config.ports == tuple(PORTS) -@pytest.mark.parametrize("ports", [[-1, 1, 2], [1, 2, 99999]]) +@pytest.mark.parametrize("ports", INVALID_PORTS) def test_tcp_scan_configuration_schema__ports_out_of_range(ports): schema = TCPScanConfigurationSchema() @@ -191,6 +193,16 @@ def test_exploitation_options_configuration_schema(): assert config.http_ports == tuple(ports) +@pytest.mark.parametrize("ports", INVALID_PORTS) +def test_exploitation_options_configuration_schema__ports_out_of_range(ports): + schema = ExploitationOptionsConfigurationSchema() + + invalid_ports_configuration = {"http_ports": ports} + + with pytest.raises(ValidationError): + schema.load(invalid_ports_configuration) + + def test_exploiter_configuration_schema(): name = "bond" options = {"gun": "Walther PPK", "car": "Aston Martin DB5"}