devsecops-engine-tools 1.60.0__py3-none-any.whl → 1.60.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of devsecops-engine-tools might be problematic. Click here for more details.
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/context_iac.py +2 -1
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/model/gateways/tool_gateway.py +4 -5
- devsecops_engine_tools/engine_sast/engine_iac/src/domain/usecases/iac_scan.py +14 -12
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_deserealizator.py +11 -8
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/checkov/checkov_tool.py +230 -206
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kics/kics_tool.py +123 -85
- devsecops_engine_tools/engine_sast/engine_iac/src/infrastructure/driven_adapters/kubescape/kubescape_tool.py +80 -65
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/context_container.py +2 -1
- devsecops_engine_tools/engine_sca/engine_container/src/domain/model/gateways/deserealizator_gateway.py +7 -2
- devsecops_engine_tools/engine_sca/engine_container/src/domain/usecases/container_sca_scan.py +53 -52
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/prisma_cloud/prisma_deserialize_output.py +3 -3
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/driven_adapters/trivy_tool/trivy_deserialize_output.py +50 -31
- devsecops_engine_tools/engine_sca/engine_container/src/infrastructure/entry_points/entry_point_tool.py +9 -5
- devsecops_engine_tools/version.py +1 -1
- {devsecops_engine_tools-1.60.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/METADATA +1 -1
- {devsecops_engine_tools-1.60.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/RECORD +19 -19
- {devsecops_engine_tools-1.60.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/WHEEL +0 -0
- {devsecops_engine_tools-1.60.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/entry_points.txt +0 -0
- {devsecops_engine_tools-1.60.0.dist-info → devsecops_engine_tools-1.60.1.dist-info}/top_level.txt +0 -0
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
from abc import ABCMeta, abstractmethod
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
class ToolGateway(metaclass=ABCMeta):
|
|
4
5
|
@abstractmethod
|
|
5
6
|
def run_tool(self, config_tool, folders_to_scan, **kwargs):
|
|
6
7
|
"run_tool"
|
|
7
8
|
|
|
8
|
-
@
|
|
9
|
-
def get_iac_context_from_results(
|
|
10
|
-
|
|
11
|
-
) -> None:
|
|
12
|
-
"get_iac_context_from_results"
|
|
9
|
+
@abstractmethod
|
|
10
|
+
def get_iac_context_from_results(self, path_file_results) -> None:
|
|
11
|
+
"get_iac_context_from_results"
|
|
@@ -28,14 +28,18 @@ class IacScan:
|
|
|
28
28
|
|
|
29
29
|
def process(self, dict_args, secret_tool, tool, env):
|
|
30
30
|
config_tool_iac = self.remote_config_source_gateway.get_remote_config(
|
|
31
|
-
dict_args["remote_config_repo"],
|
|
31
|
+
dict_args["remote_config_repo"],
|
|
32
|
+
"engine_sast/engine_iac/ConfigTool.json",
|
|
33
|
+
dict_args["remote_config_branch"],
|
|
32
34
|
)
|
|
33
35
|
|
|
34
36
|
exclusions = self.remote_config_source_gateway.get_remote_config(
|
|
35
|
-
dict_args["remote_config_repo"],
|
|
37
|
+
dict_args["remote_config_repo"],
|
|
38
|
+
"engine_sast/engine_iac/Exclusions.json",
|
|
39
|
+
dict_args["remote_config_branch"],
|
|
36
40
|
)
|
|
37
41
|
|
|
38
|
-
config_tool_core, folders_to_scan, skip_tool = self.
|
|
42
|
+
config_tool_core, folders_to_scan, skip_tool = self._complete_config_tool(
|
|
39
43
|
config_tool_iac, exclusions, tool, dict_args
|
|
40
44
|
)
|
|
41
45
|
|
|
@@ -55,12 +59,10 @@ class IacScan:
|
|
|
55
59
|
print("Tool skipped by DevSecOps policy")
|
|
56
60
|
dict_args["send_metrics"] = "false"
|
|
57
61
|
dict_args["use_vulnerability_management"] = "false"
|
|
58
|
-
|
|
62
|
+
|
|
59
63
|
if dict_args.get("context") == "true":
|
|
60
|
-
self.tool_gateway.get_iac_context_from_results(
|
|
61
|
-
|
|
62
|
-
)
|
|
63
|
-
|
|
64
|
+
self.tool_gateway.get_iac_context_from_results(path_file_results)
|
|
65
|
+
|
|
64
66
|
totalized_exclusions = []
|
|
65
67
|
(
|
|
66
68
|
totalized_exclusions.extend(
|
|
@@ -96,7 +98,7 @@ class IacScan:
|
|
|
96
98
|
|
|
97
99
|
return findings_list, input_core
|
|
98
100
|
|
|
99
|
-
def
|
|
101
|
+
def _complete_config_tool(self, data_file_tool, exclusions, tool, dict_args):
|
|
100
102
|
config_tool = ConfigTool(json_data=data_file_tool)
|
|
101
103
|
|
|
102
104
|
config_tool.exclusions = exclusions
|
|
@@ -138,7 +140,7 @@ class IacScan:
|
|
|
138
140
|
|
|
139
141
|
folders_to_scan = [dict_args["folder_path"]]
|
|
140
142
|
else:
|
|
141
|
-
folders_to_scan = self.
|
|
143
|
+
folders_to_scan = self._search_folders(config_tool.search_pattern)
|
|
142
144
|
|
|
143
145
|
if len(folders_to_scan) == 0:
|
|
144
146
|
logger.warning(
|
|
@@ -148,7 +150,7 @@ class IacScan:
|
|
|
148
150
|
|
|
149
151
|
return config_tool, folders_to_scan, skip_tool
|
|
150
152
|
|
|
151
|
-
def
|
|
153
|
+
def _search_folders(self, search_pattern):
|
|
152
154
|
current_directory = os.getcwd()
|
|
153
155
|
patron = "(?i).*?(" + "|".join(search_pattern) + ").*$"
|
|
154
156
|
folders = [
|
|
@@ -161,4 +163,4 @@ class IacScan:
|
|
|
161
163
|
for folder in folders
|
|
162
164
|
if re.match(patron, folder)
|
|
163
165
|
]
|
|
164
|
-
return matching_folders
|
|
166
|
+
return matching_folders
|
|
@@ -5,6 +5,7 @@ from devsecops_engine_tools.engine_core.src.domain.model.finding import (
|
|
|
5
5
|
from datetime import datetime
|
|
6
6
|
from dataclasses import dataclass
|
|
7
7
|
|
|
8
|
+
|
|
8
9
|
@dataclass
|
|
9
10
|
class CheckovDeserealizator:
|
|
10
11
|
@classmethod
|
|
@@ -16,20 +17,24 @@ class CheckovDeserealizator:
|
|
|
16
17
|
for result in results_scan_list:
|
|
17
18
|
if "failed_checks" in str(result):
|
|
18
19
|
for scan in result["results"]["failed_checks"]:
|
|
19
|
-
check_id = scan.get("check_id")
|
|
20
|
+
check_id = scan.get("check_id")
|
|
20
21
|
if not rules.get(check_id):
|
|
21
22
|
description = scan.get("check_name")
|
|
22
23
|
severity = default_severity.lower()
|
|
23
24
|
category = default_category.lower()
|
|
24
25
|
else:
|
|
25
|
-
description = rules[check_id].get(
|
|
26
|
+
description = rules[check_id].get(
|
|
27
|
+
"checkID", scan.get("check_name")
|
|
28
|
+
)
|
|
26
29
|
severity = rules[check_id].get("severity").lower()
|
|
27
30
|
category = rules[check_id].get("category").lower()
|
|
28
31
|
|
|
29
32
|
finding_open = Finding(
|
|
30
33
|
id=check_id,
|
|
31
34
|
cvss=None,
|
|
32
|
-
where=scan.get("repo_file_path")
|
|
35
|
+
where=scan.get("repo_file_path")
|
|
36
|
+
+ ": "
|
|
37
|
+
+ str(scan.get("resource")),
|
|
33
38
|
description=description,
|
|
34
39
|
severity=severity,
|
|
35
40
|
identification_date=datetime.now().strftime("%d%m%Y"),
|
|
@@ -37,10 +42,8 @@ class CheckovDeserealizator:
|
|
|
37
42
|
module="engine_iac",
|
|
38
43
|
category=Category(category),
|
|
39
44
|
requirements=scan.get("guideline"),
|
|
40
|
-
tool="Checkov"
|
|
45
|
+
tool="Checkov",
|
|
41
46
|
)
|
|
42
|
-
list_open_findings.append(finding_open)
|
|
43
|
-
|
|
47
|
+
list_open_findings.append(finding_open)
|
|
48
|
+
|
|
44
49
|
return list_open_findings
|
|
45
|
-
|
|
46
|
-
|