regscale-cli 6.20.4.1__py3-none-any.whl → 6.20.6.0__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 regscale-cli might be problematic. Click here for more details.
- regscale/__init__.py +1 -1
- regscale/_version.py +39 -0
- regscale/core/app/internal/__init__.py +13 -0
- regscale/core/app/internal/model_editor.py +3 -3
- regscale/core/app/internal/set_permissions.py +173 -0
- regscale/core/app/utils/file_utils.py +11 -1
- regscale/core/app/utils/regscale_utils.py +34 -129
- regscale/core/utils/date.py +86 -30
- regscale/integrations/commercial/defender.py +3 -0
- regscale/integrations/commercial/qualys/__init__.py +40 -14
- regscale/integrations/commercial/qualys/containers.py +324 -0
- regscale/integrations/commercial/qualys/scanner.py +203 -8
- regscale/integrations/commercial/synqly/edr.py +10 -0
- regscale/integrations/commercial/wizv2/click.py +11 -7
- regscale/integrations/commercial/wizv2/constants.py +28 -0
- regscale/integrations/commercial/wizv2/issue.py +3 -2
- regscale/integrations/commercial/wizv2/parsers.py +23 -0
- regscale/integrations/commercial/wizv2/scanner.py +89 -30
- regscale/integrations/commercial/wizv2/utils.py +208 -75
- regscale/integrations/commercial/wizv2/variables.py +2 -1
- regscale/integrations/commercial/wizv2/wiz_auth.py +3 -3
- regscale/integrations/public/fedramp/fedramp_cis_crm.py +98 -20
- regscale/integrations/public/fedramp/fedramp_docx.py +2 -3
- regscale/integrations/scanner_integration.py +7 -2
- regscale/models/integration_models/cisa_kev_data.json +187 -5
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/regscale_models/__init__.py +2 -0
- regscale/models/regscale_models/asset.py +1 -1
- regscale/models/regscale_models/catalog.py +16 -0
- regscale/models/regscale_models/file.py +2 -1
- regscale/models/regscale_models/form_field_value.py +59 -1
- regscale/models/regscale_models/issue.py +47 -0
- regscale/models/regscale_models/modules.py +88 -1
- regscale/models/regscale_models/organization.py +30 -0
- regscale/models/regscale_models/regscale_model.py +20 -6
- regscale/models/regscale_models/security_control.py +47 -0
- regscale/models/regscale_models/security_plan.py +32 -0
- regscale/models/regscale_models/vulnerability.py +3 -3
- regscale/models/regscale_models/vulnerability_mapping.py +2 -2
- regscale/regscale.py +2 -0
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/METADATA +1 -1
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/RECORD +49 -44
- tests/fixtures/test_fixture.py +33 -4
- tests/regscale/core/test_app.py +53 -32
- tests/regscale/test_init.py +94 -0
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.20.4.1.dist-info → regscale_cli-6.20.6.0.dist-info}/top_level.txt +0 -0
|
@@ -7,9 +7,13 @@ from __future__ import annotations
|
|
|
7
7
|
import json
|
|
8
8
|
import math
|
|
9
9
|
import re
|
|
10
|
+
import shutil
|
|
11
|
+
import tempfile
|
|
10
12
|
from collections import Counter
|
|
11
13
|
from concurrent.futures import as_completed
|
|
12
14
|
from concurrent.futures.thread import ThreadPoolExecutor
|
|
15
|
+
from datetime import datetime
|
|
16
|
+
from pathlib import Path
|
|
13
17
|
from threading import Thread
|
|
14
18
|
from types import ModuleType
|
|
15
19
|
from typing import TYPE_CHECKING, Any, Callable, Dict, List, Literal, Optional, Tuple, TypeVar
|
|
@@ -18,7 +22,7 @@ import click
|
|
|
18
22
|
|
|
19
23
|
from regscale.core.app.api import Api
|
|
20
24
|
from regscale.core.app.utils.api_handler import APIInsertionError, APIUpdateError
|
|
21
|
-
from regscale.core.app.utils.app_utils import create_progress_object, error_and_exit, get_current_datetime
|
|
25
|
+
from regscale.core.app.utils.app_utils import compute_hash, create_progress_object, error_and_exit, get_current_datetime
|
|
22
26
|
from regscale.core.utils.graphql import GraphQLQuery
|
|
23
27
|
from regscale.integrations.public.fedramp.parts_mapper import PartMapper
|
|
24
28
|
from regscale.integrations.public.fedramp.ssp_logger import SSPLogger
|
|
@@ -229,19 +233,17 @@ def map_implementation_status(control_id: str, cis_data: dict) -> str:
|
|
|
229
233
|
status = next(iter(status_counts))
|
|
230
234
|
return STATUS_MAPPING.get(status, ControlImplementationStatus.NotImplemented)
|
|
231
235
|
|
|
232
|
-
# Priority-based status determination
|
|
233
|
-
if any(status in ["N/A", ALTERNATIVE_IMPLEMENTATION] for status in status_counts):
|
|
234
|
-
status_ret = ControlImplementationStatus.NA
|
|
235
|
-
|
|
236
236
|
implemented_count = status_counts.get("Implemented", 0)
|
|
237
237
|
total_count = sum(status_counts.values())
|
|
238
238
|
|
|
239
239
|
if implemented_count == total_count:
|
|
240
|
-
|
|
240
|
+
return ControlImplementationStatus.FullyImplemented
|
|
241
241
|
elif implemented_count > 0 or any(status == "Partially Implemented" for status in status_counts):
|
|
242
242
|
status_ret = ControlImplementationStatus.PartiallyImplemented
|
|
243
243
|
elif any(status == "Planned" for status in status_counts):
|
|
244
244
|
status_ret = ControlImplementationStatus.Planned
|
|
245
|
+
elif any(status in ["N/A", ALTERNATIVE_IMPLEMENTATION] for status in status_counts):
|
|
246
|
+
status_ret = ControlImplementationStatus.NA
|
|
245
247
|
|
|
246
248
|
return status_ret
|
|
247
249
|
|
|
@@ -271,7 +273,9 @@ def map_origination(control_id: str, cis_data: dict) -> dict:
|
|
|
271
273
|
|
|
272
274
|
# Find matching CIS records
|
|
273
275
|
matching_records = [
|
|
274
|
-
record
|
|
276
|
+
record
|
|
277
|
+
for record in cis_data.values()
|
|
278
|
+
if record.get("regscale_control_id") and gen_key(record["regscale_control_id"]).lower() == control_id.lower()
|
|
275
279
|
]
|
|
276
280
|
|
|
277
281
|
# Process each matching record
|
|
@@ -421,6 +425,7 @@ def update_imp_objective(
|
|
|
421
425
|
ex_obj = next((obj for obj in existing_imp_obj if obj.objectiveId == objective.id), None)
|
|
422
426
|
if ex_obj:
|
|
423
427
|
ex_obj.status = get_multi_status(cis_record)
|
|
428
|
+
ex_obj.responsibility = responsibility
|
|
424
429
|
if cloud_responsibility.strip():
|
|
425
430
|
logger.debug(
|
|
426
431
|
f"Updating Implementation Objective #{ex_obj.id} with responsibility: {responsibility}"
|
|
@@ -796,6 +801,12 @@ def process_single_record(**kwargs) -> Tuple[List[str], Optional[ImplementationO
|
|
|
796
801
|
:rtype Tuple[List[str], Optional[ImplementationObjective]]
|
|
797
802
|
:returns A list of errors and the Implementation Objective if successful, otherwise None
|
|
798
803
|
"""
|
|
804
|
+
# for pytest
|
|
805
|
+
if not part_mapper_rev5.data:
|
|
806
|
+
part_mapper_rev5.load_fedramp_version_5_mapping()
|
|
807
|
+
if not part_mapper_rev4.data:
|
|
808
|
+
part_mapper_rev4.load_fedramp_version_4_mapping()
|
|
809
|
+
|
|
799
810
|
errors = []
|
|
800
811
|
version = kwargs.get("version")
|
|
801
812
|
leveraged_auth_id: int = kwargs.get("leveraged_auth_id")
|
|
@@ -879,6 +890,9 @@ def parse_crm_worksheet(file_path: click.Path, crm_sheet_name: str, version: Lit
|
|
|
879
890
|
warn_extra_headers=False,
|
|
880
891
|
)
|
|
881
892
|
|
|
893
|
+
if validator.data.empty:
|
|
894
|
+
return {}
|
|
895
|
+
|
|
882
896
|
# find index of row where the first column == Control ID
|
|
883
897
|
skip_rows = determine_skip_row(original_df=validator.data, text_to_find=CONTROL_ID, original_skip=skip_rows)
|
|
884
898
|
|
|
@@ -942,15 +956,18 @@ def parse_crm_worksheet(file_path: click.Path, crm_sheet_name: str, version: Lit
|
|
|
942
956
|
clean_control_id = re.sub(r"\W+", "", control_id)
|
|
943
957
|
clean_control_id = re.sub("([a-z0-9])([A-Z])", r"\1_\2", clean_control_id).lower()
|
|
944
958
|
|
|
959
|
+
# Handle NaN values for the specific inheritance field
|
|
960
|
+
inheritance_field = row["Specific Inheritance and Customer Agency/CSP Responsibilities"]
|
|
961
|
+
if get_pandas().isna(inheritance_field):
|
|
962
|
+
inheritance_field = ""
|
|
963
|
+
|
|
945
964
|
# Use clean_control_id as the key to avoid overwriting
|
|
946
965
|
formatted_crm[control_id] = {
|
|
947
966
|
"control_id": control_id,
|
|
948
967
|
"clean_control_id": clean_control_id,
|
|
949
968
|
"regscale_control_id": transform_control(control_id),
|
|
950
969
|
"can_be_inherited_from_csp": row[CAN_BE_INHERITED_CSP],
|
|
951
|
-
"specific_inheritance_and_customer_agency_csp_responsibilities":
|
|
952
|
-
"Specific Inheritance and Customer Agency/CSP Responsibilities"
|
|
953
|
-
],
|
|
970
|
+
"specific_inheritance_and_customer_agency_csp_responsibilities": inheritance_field,
|
|
954
971
|
}
|
|
955
972
|
|
|
956
973
|
return formatted_crm
|
|
@@ -979,6 +996,9 @@ def parse_cis_worksheet(file_path: click.Path, cis_sheet_name: str) -> dict:
|
|
|
979
996
|
worksheet_name=cis_sheet_name,
|
|
980
997
|
warn_extra_headers=False,
|
|
981
998
|
)
|
|
999
|
+
if validator.data.empty:
|
|
1000
|
+
return {}
|
|
1001
|
+
|
|
982
1002
|
skip_rows = determine_skip_row(original_df=validator.data, text_to_find=CONTROL_ID, original_skip=skip_rows)
|
|
983
1003
|
|
|
984
1004
|
# Parse the worksheet named 'CIS GovCloud U.S.+DoD (H)', skipping the initial rows
|
|
@@ -1128,14 +1148,14 @@ def _drop_rows_nan(instructions_df: "pd.DataFrame") -> "pd.DataFrame":
|
|
|
1128
1148
|
|
|
1129
1149
|
|
|
1130
1150
|
def parse_instructions_worksheet(
|
|
1131
|
-
df: "pd.DataFrame",
|
|
1151
|
+
df: Dict[str, "pd.DataFrame"],
|
|
1132
1152
|
version: Literal["rev4", "rev5"],
|
|
1133
1153
|
instructions_sheet_name: str = "Instructions",
|
|
1134
1154
|
) -> list[dict]:
|
|
1135
1155
|
"""
|
|
1136
1156
|
Function to parse the instructions sheet from the FedRAMP Rev5 CIS/CRM workbook
|
|
1137
1157
|
|
|
1138
|
-
:param pd.DataFrame df: The dataframe to parse
|
|
1158
|
+
:param Dict[str, "pd.DataFrame"] df: The dataframe to parse
|
|
1139
1159
|
:param Literal["rev4", "rev5"] version: The version of the FedRAMP CIS CRM workbook
|
|
1140
1160
|
:param str instructions_sheet_name: The name of the instructions sheet to parse, defaults to "Instructions"
|
|
1141
1161
|
:return: List of formatted instructions content as a dictionary
|
|
@@ -1143,6 +1163,8 @@ def parse_instructions_worksheet(
|
|
|
1143
1163
|
"""
|
|
1144
1164
|
pd = get_pandas()
|
|
1145
1165
|
df = df[instructions_sheet_name].iloc[2:]
|
|
1166
|
+
if len(df) == 0:
|
|
1167
|
+
return []
|
|
1146
1168
|
instructions_df = df.dropna(axis=1, how="all")
|
|
1147
1169
|
|
|
1148
1170
|
if version == "rev5":
|
|
@@ -1356,6 +1378,25 @@ def build_implementations_dict(security_plan_id) -> None:
|
|
|
1356
1378
|
logger.debug("Built %s implementations", len(imps))
|
|
1357
1379
|
|
|
1358
1380
|
|
|
1381
|
+
def create_backup_file(security_plan_id: int):
|
|
1382
|
+
"""
|
|
1383
|
+
Create a backup file for the given security plan ID.
|
|
1384
|
+
|
|
1385
|
+
:param int security_plan_id: The security plan ID
|
|
1386
|
+
"""
|
|
1387
|
+
logger.info("Creating a CIS/CRM Backup file of the current SSP state ..")
|
|
1388
|
+
# Export CIS/CRM to file system, and save to artifacts folder
|
|
1389
|
+
res = SecurityPlan.export_cis_crm(security_plan_id)
|
|
1390
|
+
status = res.get("status")
|
|
1391
|
+
if status and status == "complete":
|
|
1392
|
+
file_name = res.get("trustedDisplayName")
|
|
1393
|
+
logger.info(f"A CIS/CRM Backup file saved to SSP# {security_plan_id} file subsystem as {file_name}!")
|
|
1394
|
+
return
|
|
1395
|
+
continue_anyway = click.prompt("Unable to create a backup file. Would you like to continue?", type=bool)
|
|
1396
|
+
if not continue_anyway:
|
|
1397
|
+
error_and_exit("Backup file creation failed.")
|
|
1398
|
+
|
|
1399
|
+
|
|
1359
1400
|
def create_new_security_plan(profile_id: int, system_name: str):
|
|
1360
1401
|
"""
|
|
1361
1402
|
Create a new FedRamp security plan and map controls based on the profile id.
|
|
@@ -1425,6 +1466,7 @@ def create_new_security_plan(profile_id: int, system_name: str):
|
|
|
1425
1466
|
INITIAL_IMPORT = False
|
|
1426
1467
|
ret = next((plan for plan in existing_plan), None)
|
|
1427
1468
|
logger.info(f"Found existing SSP# {ret.id}")
|
|
1469
|
+
create_backup_file(ret.id)
|
|
1428
1470
|
existing_imps = ControlImplementation.get_list_by_plan(ret.id)
|
|
1429
1471
|
for imp in existing_imps:
|
|
1430
1472
|
EXISTING_IMPLEMENTATIONS[imp.controlID] = imp
|
|
@@ -1503,6 +1545,43 @@ def _check_sheet_names_exist(
|
|
|
1503
1545
|
return df
|
|
1504
1546
|
|
|
1505
1547
|
|
|
1548
|
+
def copy_and_rename_file(file_path: Path, new_name: str) -> Path:
|
|
1549
|
+
"""
|
|
1550
|
+
Copy and rename a file.
|
|
1551
|
+
"""
|
|
1552
|
+
temp_folder = Path(tempfile.gettempdir()) / "regscale"
|
|
1553
|
+
temp_folder.mkdir(exist_ok=True) # Ensure directory exists
|
|
1554
|
+
|
|
1555
|
+
new_file_path = temp_folder / new_name
|
|
1556
|
+
shutil.copy(file_path, new_file_path)
|
|
1557
|
+
return new_file_path
|
|
1558
|
+
|
|
1559
|
+
|
|
1560
|
+
def upload_file(file_path: Path, ssp_id: int, parent_module: str, api: Api) -> None:
|
|
1561
|
+
"""
|
|
1562
|
+
Upload a file to RegScale
|
|
1563
|
+
|
|
1564
|
+
:param Path file_path: The path to the file to upload
|
|
1565
|
+
:param int ssp_id: The ID of the SSP to upload the file to
|
|
1566
|
+
:param str parent_module: The module to upload the file to
|
|
1567
|
+
:param Api api: The API object to use to upload the file
|
|
1568
|
+
:rtype: None
|
|
1569
|
+
"""
|
|
1570
|
+
file_hash = None
|
|
1571
|
+
with open(file_path, "rb") as f:
|
|
1572
|
+
file_hash = compute_hash(f)
|
|
1573
|
+
existing_files = File.get_files_for_parent_from_regscale(ssp_id, parent_module)
|
|
1574
|
+
identical_file = next((file for file in existing_files if file.shaHash == file_hash), None)
|
|
1575
|
+
if file_hash and identical_file:
|
|
1576
|
+
logger.info(
|
|
1577
|
+
f"An identical file {identical_file.trustedDisplayName} already exists in RegScale, skipping upload."
|
|
1578
|
+
)
|
|
1579
|
+
return
|
|
1580
|
+
File.upload_file_to_regscale(
|
|
1581
|
+
file_name=file_path.absolute(), parent_id=ssp_id, parent_module=parent_module, api=api, tags="cis-crm"
|
|
1582
|
+
)
|
|
1583
|
+
|
|
1584
|
+
|
|
1506
1585
|
def parse_and_import_ciscrm(
|
|
1507
1586
|
file_path: click.Path,
|
|
1508
1587
|
version: Literal["rev4", "rev5", "4", "5"],
|
|
@@ -1595,11 +1674,10 @@ def parse_and_import_ciscrm(
|
|
|
1595
1674
|
crm_data=crm_data,
|
|
1596
1675
|
version=version, # type: ignore
|
|
1597
1676
|
)
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
file_name=
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
)
|
|
1677
|
+
file_path = Path(file_path)
|
|
1678
|
+
file_name = f"{file_path.stem}_update_{datetime.now().strftime('%Y%m%d')}{file_path.suffix}"
|
|
1679
|
+
if INITIAL_IMPORT:
|
|
1680
|
+
file_name = f"{file_path.stem}_initial_import{file_path.suffix}"
|
|
1681
|
+
# upload workbook to the SSP
|
|
1682
|
+
file_path = copy_and_rename_file(file_path, file_name)
|
|
1683
|
+
upload_file(file_path, ssp.id, "securityplans", api)
|
|
@@ -12,6 +12,7 @@ from ssp import SSP # type: ignore
|
|
|
12
12
|
|
|
13
13
|
from regscale.core.app.api import Api
|
|
14
14
|
from regscale.core.app.application import Application
|
|
15
|
+
from regscale.core.app.utils.app_utils import error_and_exit
|
|
15
16
|
from regscale.integrations.public.fedramp.fedramp_common import (
|
|
16
17
|
get_profile_info_by_id,
|
|
17
18
|
logger,
|
|
@@ -38,10 +39,8 @@ from regscale.integrations.public.fedramp.fedramp_common import (
|
|
|
38
39
|
post_ports,
|
|
39
40
|
post_links,
|
|
40
41
|
post_implementations,
|
|
41
|
-
debug_logger,
|
|
42
42
|
post_leveraged_authorizations,
|
|
43
43
|
)
|
|
44
|
-
from regscale.core.app.utils.app_utils import error_and_exit
|
|
45
44
|
from regscale.models import ProfileMapping
|
|
46
45
|
|
|
47
46
|
|
|
@@ -365,7 +364,7 @@ def process_fedramp_docx(
|
|
|
365
364
|
load_missing=load_missing,
|
|
366
365
|
)
|
|
367
366
|
except Exception as e:
|
|
368
|
-
|
|
367
|
+
logger.info(e)
|
|
369
368
|
logger.error(
|
|
370
369
|
f"Unable to gather implementations: {e}",
|
|
371
370
|
record_type="implementations",
|
|
@@ -247,6 +247,7 @@ class IntegrationAsset:
|
|
|
247
247
|
mac_address: Optional[str] = None
|
|
248
248
|
fqdn: Optional[str] = None
|
|
249
249
|
ip_address: Optional[str] = None
|
|
250
|
+
ipv6_address: Optional[str] = None
|
|
250
251
|
component_names: List[str] = dataclasses.field(default_factory=list)
|
|
251
252
|
is_virtual: bool = True
|
|
252
253
|
|
|
@@ -1112,6 +1113,7 @@ class ScannerIntegration(ABC):
|
|
|
1112
1113
|
azureIdentifier=asset.azure_identifier,
|
|
1113
1114
|
location=asset.location,
|
|
1114
1115
|
ipAddress=asset.ip_address,
|
|
1116
|
+
iPv6Address=asset.ipv6_address,
|
|
1115
1117
|
fqdn=asset.fqdn,
|
|
1116
1118
|
macAddress=asset.mac_address,
|
|
1117
1119
|
diskStorage=asset.disk_storage,
|
|
@@ -1651,6 +1653,7 @@ class ScannerIntegration(ABC):
|
|
|
1651
1653
|
issue.riskAdjustment = finding.risk_adjustment
|
|
1652
1654
|
issue.operationalRequirement = finding.operational_requirements
|
|
1653
1655
|
issue.deviationRationale = finding.deviation_rationale
|
|
1656
|
+
issue.dateLastUpdated = get_current_datetime()
|
|
1654
1657
|
|
|
1655
1658
|
if finding.cve:
|
|
1656
1659
|
issue = self.lookup_kev_and_upate_issue(cve=finding.cve, issue=issue, cisa_kevs=self._kev_data)
|
|
@@ -2323,7 +2326,7 @@ class ScannerIntegration(ABC):
|
|
|
2323
2326
|
or finding.observations, # or finding.evidence, whichever is more appropriate
|
|
2324
2327
|
port=finding.port if hasattr(finding, "port") else None,
|
|
2325
2328
|
protocol=finding.protocol if hasattr(finding, "protocol") else None,
|
|
2326
|
-
operatingSystem=asset.
|
|
2329
|
+
operatingSystem=asset.operatingSystem if hasattr(asset, "operatingSystem") else None,
|
|
2327
2330
|
fixedVersions=finding.fixed_versions,
|
|
2328
2331
|
buildVersion=finding.build_version,
|
|
2329
2332
|
fixStatus=finding.fix_status,
|
|
@@ -2339,7 +2342,7 @@ class ScannerIntegration(ABC):
|
|
|
2339
2342
|
vulnerabilityId=vulnerability.id,
|
|
2340
2343
|
assetId=asset.id,
|
|
2341
2344
|
scanId=scan_history.id,
|
|
2342
|
-
|
|
2345
|
+
securityPlanId=self.plan_id if not self.is_component else None,
|
|
2343
2346
|
createdById=self.assessor_id,
|
|
2344
2347
|
tenantsId=self.tenant_id,
|
|
2345
2348
|
isPublic=True,
|
|
@@ -2347,6 +2350,7 @@ class ScannerIntegration(ABC):
|
|
|
2347
2350
|
firstSeen=finding.first_seen,
|
|
2348
2351
|
lastSeen=finding.last_seen,
|
|
2349
2352
|
status=finding.status,
|
|
2353
|
+
dateLastUpdated=get_current_datetime(),
|
|
2350
2354
|
).create_unique()
|
|
2351
2355
|
return vulnerability
|
|
2352
2356
|
|
|
@@ -2534,6 +2538,7 @@ class ScannerIntegration(ABC):
|
|
|
2534
2538
|
f"{get_current_datetime('%b %d, %Y')} - Closed by {self.title} for having no current vulnerabilities."
|
|
2535
2539
|
)
|
|
2536
2540
|
issue.changes = f"{issue.changes}\n{changes_text}" if issue.changes else changes_text
|
|
2541
|
+
issue.dateLastUpdated = get_current_datetime()
|
|
2537
2542
|
issue.save()
|
|
2538
2543
|
|
|
2539
2544
|
with count_lock:
|
|
@@ -1,9 +1,191 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "CISA Catalog of Known Exploited Vulnerabilities",
|
|
3
|
-
"catalogVersion": "2025.
|
|
4
|
-
"dateReleased": "2025-
|
|
5
|
-
"count":
|
|
3
|
+
"catalogVersion": "2025.07.20",
|
|
4
|
+
"dateReleased": "2025-07-20T19:06:00.8332Z",
|
|
5
|
+
"count": 1382,
|
|
6
6
|
"vulnerabilities": [
|
|
7
|
+
{
|
|
8
|
+
"cveID": "CVE-2025-53770",
|
|
9
|
+
"vendorProject": "Microsoft",
|
|
10
|
+
"product": "SharePoint",
|
|
11
|
+
"vulnerabilityName": "Microsoft SharePoint Deserialization of Untrusted Data Vulnerability",
|
|
12
|
+
"dateAdded": "2025-07-20",
|
|
13
|
+
"shortDescription": "Microsoft SharePoint Server on-premises contains a deserialization of untrusted data vulnerability that could allow an unauthorized attacker to execute code over a network.",
|
|
14
|
+
"requiredAction": "CISA recommends configuring AMSI integration in SharePoint and deploying Defender AV on all SharePoint servers. If AMSI cannot be enabled, CISA recommends disconnecting affected products that are public-facing on the internet from service until official mitigations are available. Once mitigations are provided, apply them according to CISA and vendor instructions. Follow the applicable BOD 22-01 guidance for cloud services or discontinue use of the product if mitigations are not available. ",
|
|
15
|
+
"dueDate": "2025-07-21",
|
|
16
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
17
|
+
"notes": "CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/07\/20\/microsoft-releases-guidance-exploitation-sharepoint-vulnerability-cve-2025-53770 ; https:\/\/msrc.microsoft.com\/blog\/2025\/07\/customer-guidance-for-sharepoint-vulnerability-cve-2025-53770\/ ; https:\/\/msrc.microsoft.com\/update-guide\/vulnerability\/CVE-2025-53770 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-53770",
|
|
18
|
+
"cwes": [
|
|
19
|
+
"CWE-502"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"cveID": "CVE-2025-25257",
|
|
24
|
+
"vendorProject": "Fortinet",
|
|
25
|
+
"product": "FortiWeb",
|
|
26
|
+
"vulnerabilityName": "Fortinet FortiWeb SQL Injection Vulnerability",
|
|
27
|
+
"dateAdded": "2025-07-18",
|
|
28
|
+
"shortDescription": "Fortinet FortiWeb contains a SQL injection vulnerability that may allow an unauthenticated attacker to execute unauthorized SQL code or commands via crafted HTTP or HTTPs requests.",
|
|
29
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
30
|
+
"dueDate": "2025-08-08",
|
|
31
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
32
|
+
"notes": "https:\/\/fortiguard.fortinet.com\/psirt\/FG-IR-25-151 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-25257",
|
|
33
|
+
"cwes": [
|
|
34
|
+
"CWE-89"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"cveID": "CVE-2025-47812",
|
|
39
|
+
"vendorProject": "Wing FTP Server",
|
|
40
|
+
"product": "Wing FTP Server",
|
|
41
|
+
"vulnerabilityName": "Wing FTP Server Improper Neutralization of Null Byte or NUL Character Vulnerability",
|
|
42
|
+
"dateAdded": "2025-07-14",
|
|
43
|
+
"shortDescription": "Wing FTP Server contains an improper neutralization of null byte or NUL character vulnerability that can allow injection of arbitrary Lua code into user session files. This can be used to execute arbitrary system commands with the privileges of the FTP service (root or SYSTEM by default).",
|
|
44
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
45
|
+
"dueDate": "2025-08-04",
|
|
46
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
47
|
+
"notes": "https:\/\/www.wftpserver.com\/serverhistory.htm ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-47812",
|
|
48
|
+
"cwes": [
|
|
49
|
+
"CWE-158"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"cveID": "CVE-2025-5777",
|
|
54
|
+
"vendorProject": "Citrix",
|
|
55
|
+
"product": "NetScaler ADC and Gateway",
|
|
56
|
+
"vulnerabilityName": "Citrix NetScaler ADC and Gateway Out-of-Bounds Read Vulnerability",
|
|
57
|
+
"dateAdded": "2025-07-10",
|
|
58
|
+
"shortDescription": "Citrix NetScaler ADC and Gateway contain an out-of-bounds read vulnerability due to insufficient input validation. This vulnerability can lead to memory overread when the NetScaler is configured as a Gateway (VPN virtual server, ICA Proxy, CVPN, RDP Proxy) OR AAA virtual server.",
|
|
59
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
60
|
+
"dueDate": "2025-07-11",
|
|
61
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
62
|
+
"notes": "https:\/\/support.citrix.com\/support-home\/kbsearch\/article?articleNumber=CTX693420 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-5777",
|
|
63
|
+
"cwes": [
|
|
64
|
+
"CWE-125"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"cveID": "CVE-2019-9621",
|
|
69
|
+
"vendorProject": "Synacor",
|
|
70
|
+
"product": "Zimbra Collaboration Suite (ZCS)",
|
|
71
|
+
"vulnerabilityName": "Synacor Zimbra Collaboration Suite (ZCS) Server-Side Request Forgery (SSRF) Vulnerability",
|
|
72
|
+
"dateAdded": "2025-07-07",
|
|
73
|
+
"shortDescription": "Synacor Zimbra Collaboration Suite (ZCS) contains a server-side request forgery (SSRF) vulnerability via the ProxyServlet component.",
|
|
74
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
75
|
+
"dueDate": "2025-07-28",
|
|
76
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
77
|
+
"notes": "https:\/\/wiki.zimbra.com\/wiki\/Zimbra_Security_Advisories ; https:\/\/wiki.zimbra.com\/wiki\/Security_Center ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-9621",
|
|
78
|
+
"cwes": [
|
|
79
|
+
"CWE-918",
|
|
80
|
+
"CWE-807"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"cveID": "CVE-2019-5418",
|
|
85
|
+
"vendorProject": "Rails",
|
|
86
|
+
"product": "Ruby on Rails",
|
|
87
|
+
"vulnerabilityName": "Rails Ruby on Rails Path Traversal Vulnerability",
|
|
88
|
+
"dateAdded": "2025-07-07",
|
|
89
|
+
"shortDescription": "Rails Ruby on Rails contains a path traversal vulnerability in Action View. Specially crafted accept headers in combination with calls to `render file:` can cause arbitrary files on the target server to be rendered, disclosing the file contents.",
|
|
90
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
91
|
+
"dueDate": "2025-07-28",
|
|
92
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
93
|
+
"notes": "https:\/\/web.archive.org\/web\/20190313201629\/https:\/\/weblog.rubyonrails.org\/2019\/3\/13\/Rails-4-2-5-1-5-1-6-2-have-been-released\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-5418",
|
|
94
|
+
"cwes": [
|
|
95
|
+
"CWE-22"
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"cveID": "CVE-2016-10033",
|
|
100
|
+
"vendorProject": "PHP",
|
|
101
|
+
"product": "PHPMailer",
|
|
102
|
+
"vulnerabilityName": "PHPMailer Command Injection Vulnerability",
|
|
103
|
+
"dateAdded": "2025-07-07",
|
|
104
|
+
"shortDescription": "PHPMailer contains a command injection vulnerability because it fails to sanitize user-supplied input. Specifically, this issue affects the 'mail()' function of 'class.phpmailer.php' script. An attacker can exploit this issue to execute arbitrary code within the context of the application. Failed exploit attempts will result in a denial-of-service condition.",
|
|
105
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
106
|
+
"dueDate": "2025-07-28",
|
|
107
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
108
|
+
"notes": "This vulnerability could affect an open-source component, third-party library, protocol, or proprietary implementation that could be used by different products. For more information, please see: https:\/\/github.com\/PHPMailer\/PHPMailer\/releases\/tag\/v5.2.18 ; https:\/\/github.com\/advisories\/GHSA-5f37-gxvh-23v6 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2016-10033",
|
|
109
|
+
"cwes": [
|
|
110
|
+
"CWE-77",
|
|
111
|
+
"CWE-88"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"cveID": "CVE-2014-3931",
|
|
116
|
+
"vendorProject": "Looking Glass",
|
|
117
|
+
"product": "Multi-Router Looking Glass (MRLG)",
|
|
118
|
+
"vulnerabilityName": "Multi-Router Looking Glass (MRLG) Buffer Overflow Vulnerability",
|
|
119
|
+
"dateAdded": "2025-07-07",
|
|
120
|
+
"shortDescription": "Multi-Router Looking Glass (MRLG) contains a buffer overflow vulnerability that could allow remote attackers to cause an arbitrary memory write and memory corruption.",
|
|
121
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
122
|
+
"dueDate": "2025-07-28",
|
|
123
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
124
|
+
"notes": "https:\/\/mrlg.op-sec.us\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2014-3931",
|
|
125
|
+
"cwes": [
|
|
126
|
+
"CWE-119"
|
|
127
|
+
]
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"cveID": "CVE-2025-6554",
|
|
131
|
+
"vendorProject": "Google",
|
|
132
|
+
"product": "Chromium V8",
|
|
133
|
+
"vulnerabilityName": "Google Chromium V8 Type Confusion Vulnerability",
|
|
134
|
+
"dateAdded": "2025-07-02",
|
|
135
|
+
"shortDescription": "Google Chromium V8 contains a type confusion vulnerability that could allow a remote attacker to perform arbitrary read\/write via a crafted HTML page. This vulnerability could affect multiple web browsers that utilize Chromium, including, but not limited to, Google Chrome, Microsoft Edge, and Opera.",
|
|
136
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
137
|
+
"dueDate": "2025-07-23",
|
|
138
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
139
|
+
"notes": "https:\/\/chromereleases.googleblog.com\/2025\/06\/stable-channel-update-for-desktop_30.html?m=1 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-6554",
|
|
140
|
+
"cwes": [
|
|
141
|
+
"CWE-843"
|
|
142
|
+
]
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
"cveID": "CVE-2025-48928",
|
|
146
|
+
"vendorProject": "TeleMessage",
|
|
147
|
+
"product": "TM SGNL",
|
|
148
|
+
"vulnerabilityName": "TeleMessage TM SGNL Exposure of Core Dump File to an Unauthorized Control Sphere Vulnerability",
|
|
149
|
+
"dateAdded": "2025-07-01",
|
|
150
|
+
"shortDescription": "TeleMessage TM SGNL contains an exposure of core dump file to an unauthorized control sphere Vulnerability. This vulnerability is based on a JSP application in which the heap content is roughly equivalent to a \"core dump\" in which a password previously sent over HTTP would be included in this dump.",
|
|
151
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
152
|
+
"dueDate": "2025-07-22",
|
|
153
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
154
|
+
"notes": "It is recommended that mitigations be applied per vendor instructions if available. If these instructions cannot be located or if mitigations are unavailable, discontinue use of the product. ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-48928",
|
|
155
|
+
"cwes": [
|
|
156
|
+
"CWE-528"
|
|
157
|
+
]
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"cveID": "CVE-2025-48927",
|
|
161
|
+
"vendorProject": "TeleMessage",
|
|
162
|
+
"product": "TM SGNL",
|
|
163
|
+
"vulnerabilityName": "TeleMessage TM SGNL Initialization of a Resource with an Insecure Default Vulnerability",
|
|
164
|
+
"dateAdded": "2025-07-01",
|
|
165
|
+
"shortDescription": "TeleMessage TM SGNL contains an initialization of a resource with an insecure default vulnerability. This vulnerability relies on how the Spring Boot Actuator is configured with an exposed heap dump endpoint at a \/heapdump URI.",
|
|
166
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
167
|
+
"dueDate": "2025-07-22",
|
|
168
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
169
|
+
"notes": "It is recommended that mitigations be applied per vendor instructions if available. If these instructions cannot be located or if mitigations are unavailable, discontinue use of the product. ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-48927",
|
|
170
|
+
"cwes": [
|
|
171
|
+
"CWE-1188"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"cveID": "CVE-2025-6543",
|
|
176
|
+
"vendorProject": "Citrix",
|
|
177
|
+
"product": "NetScaler ADC and Gateway",
|
|
178
|
+
"vulnerabilityName": "Citrix NetScaler ADC and Gateway Buffer Overflow Vulnerability",
|
|
179
|
+
"dateAdded": "2025-06-30",
|
|
180
|
+
"shortDescription": "Citrix NetScaler ADC and Gateway contain a buffer overflow vulnerability leading to unintended control flow and Denial of Service. NetScaler must be configured as Gateway (VPN virtual server, ICA Proxy, CVPN, RDP Proxy) OR AAA virtual server.",
|
|
181
|
+
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
182
|
+
"dueDate": "2025-07-21",
|
|
183
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
184
|
+
"notes": "https:\/\/support.citrix.com\/support-home\/kbsearch\/article?articleNumber=CTX694788 ; https:\/\/www.netscaler.com\/blog\/news\/netscaler-critical-security-updates-for-cve-2025-6543-and-cve-2025-5777\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-6543",
|
|
185
|
+
"cwes": [
|
|
186
|
+
"CWE-119"
|
|
187
|
+
]
|
|
188
|
+
},
|
|
7
189
|
{
|
|
8
190
|
"cveID": "CVE-2019-6693",
|
|
9
191
|
"vendorProject": "Fortinet",
|
|
@@ -13,7 +195,7 @@
|
|
|
13
195
|
"shortDescription": "Fortinet FortiOS contains a use of hard-coded credentials vulnerability that could allow an attacker to cipher sensitive data in FortiOS configuration backup file via knowledge of the hard-coded key. ",
|
|
14
196
|
"requiredAction": "Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.",
|
|
15
197
|
"dueDate": "2025-07-16",
|
|
16
|
-
"knownRansomwareCampaignUse": "
|
|
198
|
+
"knownRansomwareCampaignUse": "Known",
|
|
17
199
|
"notes": "https:\/\/fortiguard.com\/advisory\/FG-IR-19-007 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-6693",
|
|
18
200
|
"cwes": [
|
|
19
201
|
"CWE-798"
|
|
@@ -18354,7 +18536,7 @@
|
|
|
18354
18536
|
"shortDescription": "Microsoft Remote Desktop Services, formerly known as Terminal Service, contains an unspecified vulnerability that allows an unauthenticated attacker to connect to the target system using RDP and send specially crafted requests. Successful exploitation allows for remote code execution. The vulnerability is also known under the moniker of BlueKeep.",
|
|
18355
18537
|
"requiredAction": "Apply updates per vendor instructions.",
|
|
18356
18538
|
"dueDate": "2022-05-03",
|
|
18357
|
-
"knownRansomwareCampaignUse": "
|
|
18539
|
+
"knownRansomwareCampaignUse": "Known",
|
|
18358
18540
|
"notes": "https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-0708",
|
|
18359
18541
|
"cwes": [
|
|
18360
18542
|
"CWE-416"
|