From de0ab88c3a76e1a5b8405ce5f2cc266c46cee467 Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Tue, 28 Jun 2022 11:03:53 +0200 Subject: [PATCH 1/3] Island: Remove ConfigurationImport endpoint --- monkey/monkey_island/cc/app.py | 2 - .../cc/resources/configuration_import.py | 83 ------------------- .../ImportConfigModal.tsx | 1 + 3 files changed, 1 insertion(+), 85 deletions(-) delete mode 100644 monkey/monkey_island/cc/resources/configuration_import.py diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py index e2253b36c..509abaa88 100644 --- a/monkey/monkey_island/cc/app.py +++ b/monkey/monkey_island/cc/app.py @@ -24,7 +24,6 @@ from monkey_island.cc.resources.blackbox.telemetry_blackbox_endpoint import ( TelemetryBlackboxEndpoint, ) from monkey_island.cc.resources.configuration_export import ConfigurationExport -from monkey_island.cc.resources.configuration_import import ConfigurationImport from monkey_island.cc.resources.edge import Edge from monkey_island.cc.resources.exploitations.manual_exploitation import ManualExploitation from monkey_island.cc.resources.exploitations.monkey_exploitation import MonkeyExploitation @@ -155,7 +154,6 @@ def init_api_resources(api: FlaskDIWrapper): api.add_resource(IslandMode) api.add_resource(IslandConfiguration) api.add_resource(ConfigurationExport) - api.add_resource(ConfigurationImport) api.add_resource(AgentConfiguration) api.add_resource(AgentBinaries) api.add_resource(NetMap) diff --git a/monkey/monkey_island/cc/resources/configuration_import.py b/monkey/monkey_island/cc/resources/configuration_import.py deleted file mode 100644 index 8f5d73afa..000000000 --- a/monkey/monkey_island/cc/resources/configuration_import.py +++ /dev/null @@ -1,83 +0,0 @@ -import json -import logging -from dataclasses import dataclass -from json.decoder import JSONDecodeError - -from flask import request - -from common.utils.exceptions import InvalidConfigurationError -from monkey_island.cc.resources.AbstractResource import AbstractResource -from monkey_island.cc.resources.request_authentication import jwt_required -from monkey_island.cc.server_utils.encryption import InvalidCiphertextError, InvalidCredentialsError -from monkey_island.cc.services.config import ConfigService - -logger = logging.getLogger(__name__) - - -class ImportStatuses: - UNSAFE_OPTION_VERIFICATION_REQUIRED = "unsafe_options_verification_required" - INVALID_CONFIGURATION = "invalid_configuration" - INVALID_CREDENTIALS = "invalid_credentials" - IMPORTED = "imported" - - -@dataclass -class ResponseContents: - import_status: str = ImportStatuses.IMPORTED - message: str = "" - status_code: int = 200 - config: str = "" - config_schema: str = "" - - def form_response(self): - return self.__dict__ - - -class ConfigurationImport(AbstractResource): - # API Spec: Should probably be merged with IslandConfiguration - urls = ["/api/configuration/import"] - SUCCESS = False - - @jwt_required - def post(self): - request_contents = json.loads(request.data) - try: - config = ConfigurationImport._get_plaintext_config_from_request(request_contents) - if request_contents["unsafeOptionsVerified"]: - ConfigurationImport.import_config(config) - return ResponseContents().form_response() - else: - return ResponseContents( - config=json.dumps(config), - config_schema=ConfigService.get_config_schema(), - import_status=ImportStatuses.UNSAFE_OPTION_VERIFICATION_REQUIRED, - ).form_response() - # API Spec: HTTP status code should be 401 here - except InvalidCredentialsError: - return ResponseContents( - import_status=ImportStatuses.INVALID_CREDENTIALS, - message="Invalid credentials provided", - ).form_response() - # API Spec: HTTP status code should be 400 (or something else) here - except InvalidConfigurationError: - return ResponseContents( - import_status=ImportStatuses.INVALID_CONFIGURATION, - message="Invalid configuration supplied. " - "Maybe the format is outdated or the file has been corrupted.", - ).form_response() - - @staticmethod - def _get_plaintext_config_from_request(request_contents: dict) -> dict: - try: - config = request_contents["config"] - return json.loads(config) - except (JSONDecodeError, InvalidCiphertextError): - logger.exception( - "Exception encountered when trying to extract plaintext configuration." - ) - raise InvalidConfigurationError - - @staticmethod - def import_config(config_json): - if not ConfigService.update_config(config_json, should_encrypt=True): - raise InvalidConfigurationError diff --git a/monkey/monkey_island/cc/ui/src/components/configuration-components/ImportConfigModal.tsx b/monkey/monkey_island/cc/ui/src/components/configuration-components/ImportConfigModal.tsx index 8a600ab28..70e366d20 100644 --- a/monkey/monkey_island/cc/ui/src/components/configuration-components/ImportConfigModal.tsx +++ b/monkey/monkey_island/cc/ui/src/components/configuration-components/ImportConfigModal.tsx @@ -18,6 +18,7 @@ type Props = { const ConfigImportModal = (props: Props) => { + // TODO: change this endpoint to the new configuration import endpoint const configImportEndpoint = '/api/configuration/import'; const [uploadStatus, setUploadStatus] = useState(UploadStatuses.clean); From 50351c9e880e7f9a6fa1ad8d18af132375e4610f Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Tue, 28 Jun 2022 11:47:02 +0200 Subject: [PATCH 2/3] Island: Remove ConfigurationExport endpoint --- monkey/monkey_island/cc/app.py | 2 -- .../cc/resources/configuration_export.py | 15 --------------- .../ExportConfigModal.tsx | 1 + 3 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 monkey/monkey_island/cc/resources/configuration_export.py diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py index 509abaa88..282f93346 100644 --- a/monkey/monkey_island/cc/app.py +++ b/monkey/monkey_island/cc/app.py @@ -23,7 +23,6 @@ from monkey_island.cc.resources.blackbox.monkey_blackbox_endpoint import MonkeyB from monkey_island.cc.resources.blackbox.telemetry_blackbox_endpoint import ( TelemetryBlackboxEndpoint, ) -from monkey_island.cc.resources.configuration_export import ConfigurationExport from monkey_island.cc.resources.edge import Edge from monkey_island.cc.resources.exploitations.manual_exploitation import ManualExploitation from monkey_island.cc.resources.exploitations.monkey_exploitation import MonkeyExploitation @@ -153,7 +152,6 @@ def init_api_resources(api: FlaskDIWrapper): api.add_resource(IslandMode) api.add_resource(IslandConfiguration) - api.add_resource(ConfigurationExport) api.add_resource(AgentConfiguration) api.add_resource(AgentBinaries) api.add_resource(NetMap) diff --git a/monkey/monkey_island/cc/resources/configuration_export.py b/monkey/monkey_island/cc/resources/configuration_export.py deleted file mode 100644 index 0865a2558..000000000 --- a/monkey/monkey_island/cc/resources/configuration_export.py +++ /dev/null @@ -1,15 +0,0 @@ -from monkey_island.cc.resources.AbstractResource import AbstractResource -from monkey_island.cc.resources.request_authentication import jwt_required -from monkey_island.cc.services.config import ConfigService - - -class ConfigurationExport(AbstractResource): - urls = ["/api/configuration/export"] - - @jwt_required - def post(self): - plaintext_config = ConfigService.get_config() - - config_export = plaintext_config - - return {"config_export": config_export, "encrypted": False} diff --git a/monkey/monkey_island/cc/ui/src/components/configuration-components/ExportConfigModal.tsx b/monkey/monkey_island/cc/ui/src/components/configuration-components/ExportConfigModal.tsx index d30438cbd..9dc785f73 100644 --- a/monkey/monkey_island/cc/ui/src/components/configuration-components/ExportConfigModal.tsx +++ b/monkey/monkey_island/cc/ui/src/components/configuration-components/ExportConfigModal.tsx @@ -12,6 +12,7 @@ type Props = { } const ConfigExportModal = (props: Props) => { + // TODO: Change this endpoint to new agent-configuration endpoint const configExportEndpoint = '/api/configuration/export'; const [pass, setPass] = useState(''); From 9774bd6f3b43deb1927c02743e1f14f7a084f05a Mon Sep 17 00:00:00 2001 From: Ilija Lazoroski Date: Tue, 28 Jun 2022 16:35:09 +0200 Subject: [PATCH 3/3] Changelog: Add entry for removing configuration export/import endpoints --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce0dd381f..b85ed376f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -83,6 +83,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/). - "+dev" from version numbers. #1553 - agent's "--config" argument. #906 - Option to export monkey telemetries. #1998 +- "/api/configuration/import" endpoint. #2002 +- "/api/configuration/export" endpoint. #2002 ### Fixed - A bug in network map page that caused delay of telemetry log loading. #1545