From c575dee90245cc07ce0df6d349dc50c9f397e439 Mon Sep 17 00:00:00 2001 From: hblankenship Date: Fri, 1 Nov 2024 13:55:14 -0500 Subject: [PATCH 1/5] initial files but likely to change --- dojo/importers/base_importer.py | 16 ++++++++++++++++ .../scans/generic/test_with_image_no_ext.json | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 unittests/scans/generic/test_with_image_no_ext.json diff --git a/dojo/importers/base_importer.py b/dojo/importers/base_importer.py index ebd97fc37f..67bbda7b1b 100644 --- a/dojo/importers/base_importer.py +++ b/dojo/importers/base_importer.py @@ -1,5 +1,6 @@ import base64 import logging +from pathlib import Path from typing import List, Tuple from django.conf import settings @@ -686,6 +687,21 @@ def process_files( for unsaved_file in finding.unsaved_files: data = base64.b64decode(unsaved_file.get("data")) title = unsaved_file.get("title", "") + valid_extensions = settings.FILE_UPLOAD_TYPES + + if Path(title).suffix not in valid_extensions: + if accepted_extensions := f"{', '.join(valid_extensions)}": + msg = ( + "Unsupported extension. Supported extensions are as " + f"follows: {accepted_extensions}" + ) + else: + msg = ( + "File uploads are prohibited due to the list of acceptable " + "file extensions being empty" + ) + raise ValidationError(msg) + file_upload, _ = FileUpload.objects.get_or_create(title=title) file_upload.file.save(title, ContentFile(data)) file_upload.save() diff --git a/unittests/scans/generic/test_with_image_no_ext.json b/unittests/scans/generic/test_with_image_no_ext.json new file mode 100644 index 0000000000..cf973faccc --- /dev/null +++ b/unittests/scans/generic/test_with_image_no_ext.json @@ -0,0 +1,16 @@ +{ + "title": "My wonderfull report", + "findings": [ + { + "title": "Vuln with image and no extension", + "description": "Some very long description", + "severity": "Medium", + "files": [ + { + "title": "testcat", + "data": "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" + } + ] + } + ] +} \ No newline at end of file From c39aeed3e76d5924aaed8e06b3b31967238a4f9f Mon Sep 17 00:00:00 2001 From: hblankenship Date: Tue, 5 Nov 2024 11:40:38 -0600 Subject: [PATCH 2/5] improved file extension checks --- dojo/api_v2/serializers.py | 16 ++-------------- dojo/importers/base_importer.py | 16 ---------------- dojo/models.py | 19 +++++++++++++++++++ dojo/tools/generic/json_parser.py | 11 ++++++++++- .../scans/generic/test_with_image_no_ext.json | 2 +- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 56a1826506..11e475ee50 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -804,20 +804,8 @@ class Meta: def validate(self, data): if file := data.get("file"): - ext = os.path.splitext(file.name)[1] # [0] returns path+filename - valid_extensions = settings.FILE_UPLOAD_TYPES - if ext.lower() not in valid_extensions: - if accepted_extensions := f"{', '.join(valid_extensions)}": - msg = ( - "Unsupported extension. Supported extensions are as " - f"follows: {accepted_extensions}" - ) - else: - msg = ( - "File uploads are prohibited due to the list of acceptable " - "file extensions being empty" - ) - raise ValidationError(msg) + # the clean will validate the file extensions and raise a Validation error if the extensions are not accepted + FileUpload(title=file.name, file=file).clean() return data return None diff --git a/dojo/importers/base_importer.py b/dojo/importers/base_importer.py index 67bbda7b1b..ebd97fc37f 100644 --- a/dojo/importers/base_importer.py +++ b/dojo/importers/base_importer.py @@ -1,6 +1,5 @@ import base64 import logging -from pathlib import Path from typing import List, Tuple from django.conf import settings @@ -687,21 +686,6 @@ def process_files( for unsaved_file in finding.unsaved_files: data = base64.b64decode(unsaved_file.get("data")) title = unsaved_file.get("title", "") - valid_extensions = settings.FILE_UPLOAD_TYPES - - if Path(title).suffix not in valid_extensions: - if accepted_extensions := f"{', '.join(valid_extensions)}": - msg = ( - "Unsupported extension. Supported extensions are as " - f"follows: {accepted_extensions}" - ) - else: - msg = ( - "File uploads are prohibited due to the list of acceptable " - "file extensions being empty" - ) - raise ValidationError(msg) - file_upload, _ = FileUpload.objects.get_or_create(title=title) file_upload.file.save(title, ContentFile(data)) file_upload.save() diff --git a/dojo/models.py b/dojo/models.py index a5bbe7c01f..488065c736 100644 --- a/dojo/models.py +++ b/dojo/models.py @@ -6,6 +6,7 @@ import re import warnings from datetime import datetime +from pathlib import Path from typing import Dict, Optional, Set from uuid import uuid4 @@ -733,6 +734,24 @@ def get_accessible_url(self, obj, obj_id): return f"access_file/{self.id}/{obj_id}/{obj_type}" + def clean(self): + if not self.title: + self.title = "" + + title = self.title + valid_extensions = settings.FILE_UPLOAD_TYPES + + if Path(title).suffix.lower() not in valid_extensions: + if accepted_extensions := f"{', '.join(valid_extensions)}": + msg = ( + _("Unsupported extension. Supported extensions are as follows: %s") % accepted_extensions + ) + else: + msg = ( + _("File uploads are prohibited due to the list of acceptable file extensions being empty") + ) + raise ValidationError(msg) + class Product_Type(models.Model): diff --git a/dojo/tools/generic/json_parser.py b/dojo/tools/generic/json_parser.py index 296209f3d2..0a09a9deda 100644 --- a/dojo/tools/generic/json_parser.py +++ b/dojo/tools/generic/json_parser.py @@ -1,4 +1,8 @@ -from dojo.models import Endpoint, Finding +import base64 + +from django.core.files.base import ContentFile + +from dojo.models import Endpoint, FileUpload, Finding from dojo.tools.parser_test import ParserTest @@ -103,6 +107,11 @@ def _get_test_json(self, data): endpoint = Endpoint(**endpoint_item) finding.unsaved_endpoints.append(endpoint) if unsaved_files: + for unsaved_file in unsaved_files: + data = base64.b64decode(unsaved_file.get("data")) + title = unsaved_file.get("title", "") + FileUpload(title=title, file=ContentFile(data)).clean() + finding.unsaved_files = unsaved_files if finding.cve: finding.unsaved_vulnerability_ids = [finding.cve] diff --git a/unittests/scans/generic/test_with_image_no_ext.json b/unittests/scans/generic/test_with_image_no_ext.json index cf973faccc..50051651e7 100644 --- a/unittests/scans/generic/test_with_image_no_ext.json +++ b/unittests/scans/generic/test_with_image_no_ext.json @@ -1,5 +1,5 @@ { - "title": "My wonderfull report", + "title": "My wonderful report", "findings": [ { "title": "Vuln with image and no extension", From a5ef03da977dd9a2212c0adb35f16369d381f739 Mon Sep 17 00:00:00 2001 From: hblankenship Date: Wed, 6 Nov 2024 07:24:37 -0600 Subject: [PATCH 3/5] remove os import --- dojo/api_v2/serializers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/dojo/api_v2/serializers.py b/dojo/api_v2/serializers.py index 11e475ee50..960d61f106 100644 --- a/dojo/api_v2/serializers.py +++ b/dojo/api_v2/serializers.py @@ -1,6 +1,5 @@ import json import logging -import os import re from datetime import datetime from typing import List From f09ba55d47be0ef6598a01e3a63153acfa04d526 Mon Sep 17 00:00:00 2001 From: Harold Blankenship <36673698+hblankenship@users.noreply.github.com> Date: Wed, 6 Nov 2024 08:29:54 -0600 Subject: [PATCH 4/5] Use file url --- dojo/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dojo/models.py b/dojo/models.py index 9d7290c4d9..c1aae95835 100644 --- a/dojo/models.py +++ b/dojo/models.py @@ -747,10 +747,9 @@ def clean(self): if not self.title: self.title = "" - title = self.title valid_extensions = settings.FILE_UPLOAD_TYPES - if Path(title).suffix.lower() not in valid_extensions: + if Path(self.file.url).suffix.lower() not in valid_extensions: if accepted_extensions := f"{', '.join(valid_extensions)}": msg = ( _("Unsupported extension. Supported extensions are as follows: %s") % accepted_extensions From be5b56ba410e4b48875b1eb241bd5a6a49921dfe Mon Sep 17 00:00:00 2001 From: hblankenship Date: Wed, 6 Nov 2024 09:36:49 -0600 Subject: [PATCH 5/5] not used imports, file url or title --- dojo/models.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/dojo/models.py b/dojo/models.py index c1aae95835..117b8d0ebe 100644 --- a/dojo/models.py +++ b/dojo/models.py @@ -7,7 +7,6 @@ import warnings from datetime import datetime from pathlib import Path -from typing import Dict, Optional, Set from uuid import uuid4 import hyperlink @@ -749,7 +748,12 @@ def clean(self): valid_extensions = settings.FILE_UPLOAD_TYPES - if Path(self.file.url).suffix.lower() not in valid_extensions: + # why does this not work with self.file.... + if self.file: + file_name = self.file.url + else: + file_name = self.title + if Path(file_name).suffix.lower() not in valid_extensions: if accepted_extensions := f"{', '.join(valid_extensions)}": msg = ( _("Unsupported extension. Supported extensions are as follows: %s") % accepted_extensions