diff --git a/app/api/v2/managers/config_api_manager.py b/app/api/v2/managers/config_api_manager.py index ddcde7aa2..db188a47b 100644 --- a/app/api/v2/managers/config_api_manager.py +++ b/app/api/v2/managers/config_api_manager.py @@ -85,7 +85,8 @@ def update_main_config(self, prop, value): ) async def update_global_agent_config(self, sleep_min: int = None, sleep_max: int = None, watchdog: int = None, - untrusted_timer: int = None, implant_name: str = None, bootstrap_abilities: List[str] = None, deadman_abilities=None): + untrusted_timer: int = None, implant_name: str = None, architecture: str = None, + bootstrap_abilities: List[str] = None, deadman_abilities=None): set_config = self._config_interface.set_config if sleep_min is not None: @@ -103,6 +104,9 @@ async def update_global_agent_config(self, sleep_min: int = None, sleep_max: int if implant_name is not None: validation.check_not_empty_string(implant_name, name='implant_name') set_config(name='agents', prop='implant_name', value=implant_name) + if architecture is not None: + validation.check_not_empty_string(architecture, name='architecture') + set_config(name='agents', prop='architecture', value=architecture) if bootstrap_abilities is not None: await self._update_agent_ability_list_property(bootstrap_abilities, 'bootstrap_abilities') if deadman_abilities is not None: diff --git a/app/api/v2/schemas/config_schemas.py b/app/api/v2/schemas/config_schemas.py index 75f8a5172..906887385 100644 --- a/app/api/v2/schemas/config_schemas.py +++ b/app/api/v2/schemas/config_schemas.py @@ -13,6 +13,7 @@ class AgentConfigUpdateSchema(ma.Schema): watchdog = fields.Integer() untrusted_timer = fields.Integer() implant_name = fields.String() + architecture = fields.String() bootstrap_abilities = fields.List(fields.String) deadman_abilities = fields.List(fields.String) deployments = fields.List(fields.String, dump_only=True) diff --git a/conf/agents.yml b/conf/agents.yml index dd4bd4629..4070afda5 100644 --- a/conf/agents.yml +++ b/conf/agents.yml @@ -1,6 +1,7 @@ bootstrap_abilities: - 43b3754c-def4-4699-a673-1d85648fda6a implant_name: splunkd +architecture: amd64 sleep_max: 60 sleep_min: 30 untrusted_timer: 90 @@ -8,4 +9,4 @@ watchdog: 0 deployments: - 2f34977d-9558-4c12-abad-349716777c6b #54ndc47 - 356d1722-7784-40c4-822b-0cf864b0b36d #Manx - - 0ab383be-b819-41bf-91b9-1bd4404d83bf #Ragdoll \ No newline at end of file + - 0ab383be-b819-41bf-91b9-1bd4404d83bf #Ragdoll diff --git a/tests/api/v2/managers/test_config_api_manager.py b/tests/api/v2/managers/test_config_api_manager.py index 788cfbda1..4ba0affe4 100644 --- a/tests/api/v2/managers/test_config_api_manager.py +++ b/tests/api/v2/managers/test_config_api_manager.py @@ -163,6 +163,19 @@ async def test_update_global_agent_config_throws_validation_error_bad_implant_na await manager.update_global_agent_config(implant_name='') +async def test_update_global_agent_config_throws_validation_error_bad_architecture(base_world, data_svc): + manager = ConfigApiManager(data_svc, None) + + with pytest.raises(errors.DataValidationError): + await manager.update_global_agent_config(architecture='') + + +async def test_update_global_agent_config_sets_architecture(base_world, data_svc): + manager = ConfigApiManager(data_svc, None) + await manager.update_global_agent_config(architecture='arm64') + assert BaseWorld.get_config(prop='architecture', name='agents') == 'arm64' + + async def test_update_main_config_throws_validation_error_empty_prop(base_world, data_svc): manager = ConfigApiManager(data_svc, None)