regscale-cli 6.20.4.0__py3-none-any.whl → 6.20.5.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.

Files changed (33) hide show
  1. regscale/__init__.py +1 -1
  2. regscale/core/app/internal/model_editor.py +3 -3
  3. regscale/core/app/utils/regscale_utils.py +37 -0
  4. regscale/core/utils/date.py +26 -3
  5. regscale/integrations/commercial/defender.py +3 -0
  6. regscale/integrations/commercial/qualys/__init__.py +40 -14
  7. regscale/integrations/commercial/qualys/containers.py +324 -0
  8. regscale/integrations/commercial/qualys/scanner.py +203 -8
  9. regscale/integrations/commercial/synqly/edr.py +10 -0
  10. regscale/integrations/commercial/wizv2/click.py +2 -2
  11. regscale/integrations/commercial/wizv2/constants.py +13 -0
  12. regscale/integrations/commercial/wizv2/issue.py +3 -2
  13. regscale/integrations/commercial/wizv2/scanner.py +5 -1
  14. regscale/integrations/commercial/wizv2/utils.py +118 -72
  15. regscale/integrations/public/fedramp/fedramp_cis_crm.py +107 -22
  16. regscale/models/integration_models/cisa_kev_data.json +140 -3
  17. regscale/models/integration_models/synqly_models/capabilities.json +1 -1
  18. regscale/models/regscale_models/catalog.py +16 -0
  19. regscale/models/regscale_models/file.py +2 -1
  20. regscale/models/regscale_models/form_field_value.py +59 -1
  21. regscale/models/regscale_models/issue.py +47 -0
  22. regscale/models/regscale_models/organization.py +30 -0
  23. regscale/models/regscale_models/regscale_model.py +13 -5
  24. regscale/models/regscale_models/security_control.py +47 -0
  25. regscale/models/regscale_models/security_plan.py +32 -0
  26. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.0.dist-info}/METADATA +1 -1
  27. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.0.dist-info}/RECORD +33 -31
  28. tests/fixtures/test_fixture.py +33 -4
  29. tests/regscale/core/test_app.py +53 -32
  30. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.0.dist-info}/LICENSE +0 -0
  31. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.0.dist-info}/WHEEL +0 -0
  32. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.0.dist-info}/entry_points.txt +0 -0
  33. {regscale_cli-6.20.4.0.dist-info → regscale_cli-6.20.5.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
- status_ret = ControlImplementationStatus.FullyImplemented
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 for record in cis_data.values() if gen_key(record["regscale_control_id"]).lower() == control_id.lower()
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}"
@@ -610,6 +615,13 @@ def get_all_control_objectives(imps: List[ControlImplementation]) -> List[Contro
610
615
  return res
611
616
 
612
617
 
618
+ def clean_key(key: str) -> str:
619
+ """
620
+ Clean the key by removing spaces
621
+ """
622
+ return key.replace(" ", "")
623
+
624
+
613
625
  def update_all_objectives(
614
626
  leveraged_auth_id: int,
615
627
  cis_data: Dict[str, Dict[str, str]],
@@ -634,7 +646,7 @@ def update_all_objectives(
634
646
  "[cyan]Processing control objectives...", total=len(EXISTING_IMPLEMENTATIONS.values())
635
647
  )
636
648
  # Create a combined dataset for easier access
637
- combined_data = {key: {"cis": cis_data[key], "crm": crm_data.get(key, {})} for key in cis_data}
649
+ combined_data = {key: {"cis": cis_data[key], "crm": crm_data.get(clean_key(key), {})} for key in cis_data}
638
650
 
639
651
  # Process implementations in parallel
640
652
  with ThreadPoolExecutor(max_workers=30) as executor:
@@ -789,6 +801,12 @@ def process_single_record(**kwargs) -> Tuple[List[str], Optional[ImplementationO
789
801
  :rtype Tuple[List[str], Optional[ImplementationObjective]]
790
802
  :returns A list of errors and the Implementation Objective if successful, otherwise None
791
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
+
792
810
  errors = []
793
811
  version = kwargs.get("version")
794
812
  leveraged_auth_id: int = kwargs.get("leveraged_auth_id")
@@ -872,6 +890,9 @@ def parse_crm_worksheet(file_path: click.Path, crm_sheet_name: str, version: Lit
872
890
  warn_extra_headers=False,
873
891
  )
874
892
 
893
+ if validator.data.empty:
894
+ return {}
895
+
875
896
  # find index of row where the first column == Control ID
876
897
  skip_rows = determine_skip_row(original_df=validator.data, text_to_find=CONTROL_ID, original_skip=skip_rows)
877
898
 
@@ -935,15 +956,18 @@ def parse_crm_worksheet(file_path: click.Path, crm_sheet_name: str, version: Lit
935
956
  clean_control_id = re.sub(r"\W+", "", control_id)
936
957
  clean_control_id = re.sub("([a-z0-9])([A-Z])", r"\1_\2", clean_control_id).lower()
937
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
+
938
964
  # Use clean_control_id as the key to avoid overwriting
939
965
  formatted_crm[control_id] = {
940
966
  "control_id": control_id,
941
967
  "clean_control_id": clean_control_id,
942
968
  "regscale_control_id": transform_control(control_id),
943
969
  "can_be_inherited_from_csp": row[CAN_BE_INHERITED_CSP],
944
- "specific_inheritance_and_customer_agency_csp_responsibilities": row[
945
- "Specific Inheritance and Customer Agency/CSP Responsibilities"
946
- ],
970
+ "specific_inheritance_and_customer_agency_csp_responsibilities": inheritance_field,
947
971
  }
948
972
 
949
973
  return formatted_crm
@@ -972,6 +996,9 @@ def parse_cis_worksheet(file_path: click.Path, cis_sheet_name: str) -> dict:
972
996
  worksheet_name=cis_sheet_name,
973
997
  warn_extra_headers=False,
974
998
  )
999
+ if validator.data.empty:
1000
+ return {}
1001
+
975
1002
  skip_rows = determine_skip_row(original_df=validator.data, text_to_find=CONTROL_ID, original_skip=skip_rows)
976
1003
 
977
1004
  # Parse the worksheet named 'CIS GovCloud U.S.+DoD (H)', skipping the initial rows
@@ -1075,7 +1102,7 @@ def parse_cis_worksheet(file_path: click.Path, cis_sheet_name: str) -> dict:
1075
1102
  results = list(executor.map(_process_row, [row for _, row in cis_df.iterrows()]))
1076
1103
 
1077
1104
  # iterate the results and index by control_id
1078
- return {result["control_id"]: result for result in results}
1105
+ return {clean_key(result["control_id"]): result for result in results}
1079
1106
 
1080
1107
 
1081
1108
  def determine_skip_row(original_df: "pd.DataFrame", text_to_find: str, original_skip: int):
@@ -1121,14 +1148,14 @@ def _drop_rows_nan(instructions_df: "pd.DataFrame") -> "pd.DataFrame":
1121
1148
 
1122
1149
 
1123
1150
  def parse_instructions_worksheet(
1124
- df: "pd.DataFrame",
1151
+ df: Dict[str, "pd.DataFrame"],
1125
1152
  version: Literal["rev4", "rev5"],
1126
1153
  instructions_sheet_name: str = "Instructions",
1127
1154
  ) -> list[dict]:
1128
1155
  """
1129
1156
  Function to parse the instructions sheet from the FedRAMP Rev5 CIS/CRM workbook
1130
1157
 
1131
- :param pd.DataFrame df: The dataframe to parse
1158
+ :param Dict[str, "pd.DataFrame"] df: The dataframe to parse
1132
1159
  :param Literal["rev4", "rev5"] version: The version of the FedRAMP CIS CRM workbook
1133
1160
  :param str instructions_sheet_name: The name of the instructions sheet to parse, defaults to "Instructions"
1134
1161
  :return: List of formatted instructions content as a dictionary
@@ -1136,6 +1163,8 @@ def parse_instructions_worksheet(
1136
1163
  """
1137
1164
  pd = get_pandas()
1138
1165
  df = df[instructions_sheet_name].iloc[2:]
1166
+ if len(df) == 0:
1167
+ return []
1139
1168
  instructions_df = df.dropna(axis=1, how="all")
1140
1169
 
1141
1170
  if version == "rev5":
@@ -1349,6 +1378,25 @@ def build_implementations_dict(security_plan_id) -> None:
1349
1378
  logger.debug("Built %s implementations", len(imps))
1350
1379
 
1351
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
+
1352
1400
  def create_new_security_plan(profile_id: int, system_name: str):
1353
1401
  """
1354
1402
  Create a new FedRamp security plan and map controls based on the profile id.
@@ -1418,6 +1466,7 @@ def create_new_security_plan(profile_id: int, system_name: str):
1418
1466
  INITIAL_IMPORT = False
1419
1467
  ret = next((plan for plan in existing_plan), None)
1420
1468
  logger.info(f"Found existing SSP# {ret.id}")
1469
+ create_backup_file(ret.id)
1421
1470
  existing_imps = ControlImplementation.get_list_by_plan(ret.id)
1422
1471
  for imp in existing_imps:
1423
1472
  EXISTING_IMPLEMENTATIONS[imp.controlID] = imp
@@ -1496,6 +1545,43 @@ def _check_sheet_names_exist(
1496
1545
  return df
1497
1546
 
1498
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
+
1499
1585
  def parse_and_import_ciscrm(
1500
1586
  file_path: click.Path,
1501
1587
  version: Literal["rev4", "rev5", "4", "5"],
@@ -1588,11 +1674,10 @@ def parse_and_import_ciscrm(
1588
1674
  crm_data=crm_data,
1589
1675
  version=version, # type: ignore
1590
1676
  )
1591
-
1592
- # upload workbook to the SSP
1593
- File.upload_file_to_regscale(
1594
- file_name=str(file_path),
1595
- parent_id=ssp.id,
1596
- parent_module="securityplans",
1597
- api=api,
1598
- )
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)
@@ -1,9 +1,146 @@
1
1
  {
2
2
  "title": "CISA Catalog of Known Exploited Vulnerabilities",
3
- "catalogVersion": "2025.06.25",
4
- "dateReleased": "2025-06-25T16:52:26.9744Z",
5
- "count": 1370,
3
+ "catalogVersion": "2025.07.10",
4
+ "dateReleased": "2025-07-10T16:05:09.522Z",
5
+ "count": 1379,
6
6
  "vulnerabilities": [
7
+ {
8
+ "cveID": "CVE-2025-5777",
9
+ "vendorProject": "Citrix",
10
+ "product": "NetScaler ADC and Gateway",
11
+ "vulnerabilityName": "Citrix NetScaler ADC and Gateway Out-of-Bounds Read Vulnerability",
12
+ "dateAdded": "2025-07-10",
13
+ "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.",
14
+ "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
+ "dueDate": "2025-07-11",
16
+ "knownRansomwareCampaignUse": "Unknown",
17
+ "notes": "https:\/\/support.citrix.com\/support-home\/kbsearch\/article?articleNumber=CTX693420 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-5777",
18
+ "cwes": [
19
+ "CWE-125"
20
+ ]
21
+ },
22
+ {
23
+ "cveID": "CVE-2019-9621",
24
+ "vendorProject": "Synacor",
25
+ "product": "Zimbra Collaboration Suite (ZCS)",
26
+ "vulnerabilityName": "Synacor Zimbra Collaboration Suite (ZCS) Server-Side Request Forgery (SSRF) Vulnerability",
27
+ "dateAdded": "2025-07-07",
28
+ "shortDescription": "Synacor Zimbra Collaboration Suite (ZCS) contains a server-side request forgery (SSRF) vulnerability via the ProxyServlet component.",
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-07-28",
31
+ "knownRansomwareCampaignUse": "Unknown",
32
+ "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",
33
+ "cwes": [
34
+ "CWE-918",
35
+ "CWE-807"
36
+ ]
37
+ },
38
+ {
39
+ "cveID": "CVE-2019-5418",
40
+ "vendorProject": "Rails",
41
+ "product": "Ruby on Rails",
42
+ "vulnerabilityName": "Rails Ruby on Rails Path Traversal Vulnerability",
43
+ "dateAdded": "2025-07-07",
44
+ "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.",
45
+ "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.",
46
+ "dueDate": "2025-07-28",
47
+ "knownRansomwareCampaignUse": "Unknown",
48
+ "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",
49
+ "cwes": [
50
+ "CWE-22"
51
+ ]
52
+ },
53
+ {
54
+ "cveID": "CVE-2016-10033",
55
+ "vendorProject": "PHP",
56
+ "product": "PHPMailer",
57
+ "vulnerabilityName": "PHPMailer Command Injection Vulnerability",
58
+ "dateAdded": "2025-07-07",
59
+ "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.",
60
+ "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.",
61
+ "dueDate": "2025-07-28",
62
+ "knownRansomwareCampaignUse": "Unknown",
63
+ "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",
64
+ "cwes": [
65
+ "CWE-77",
66
+ "CWE-88"
67
+ ]
68
+ },
69
+ {
70
+ "cveID": "CVE-2014-3931",
71
+ "vendorProject": "Looking Glass",
72
+ "product": "Multi-Router Looking Glass (MRLG)",
73
+ "vulnerabilityName": "Multi-Router Looking Glass (MRLG) Buffer Overflow Vulnerability",
74
+ "dateAdded": "2025-07-07",
75
+ "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.",
76
+ "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.",
77
+ "dueDate": "2025-07-28",
78
+ "knownRansomwareCampaignUse": "Unknown",
79
+ "notes": "https:\/\/mrlg.op-sec.us\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2014-3931",
80
+ "cwes": [
81
+ "CWE-119"
82
+ ]
83
+ },
84
+ {
85
+ "cveID": "CVE-2025-6554",
86
+ "vendorProject": "Google",
87
+ "product": "Chromium V8",
88
+ "vulnerabilityName": "Google Chromium V8 Type Confusion Vulnerability",
89
+ "dateAdded": "2025-07-02",
90
+ "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.",
91
+ "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.",
92
+ "dueDate": "2025-07-23",
93
+ "knownRansomwareCampaignUse": "Unknown",
94
+ "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",
95
+ "cwes": [
96
+ "CWE-843"
97
+ ]
98
+ },
99
+ {
100
+ "cveID": "CVE-2025-48928",
101
+ "vendorProject": "TeleMessage",
102
+ "product": "TM SGNL",
103
+ "vulnerabilityName": "TeleMessage TM SGNL Exposure of Core Dump File to an Unauthorized Control Sphere Vulnerability",
104
+ "dateAdded": "2025-07-01",
105
+ "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.",
106
+ "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.",
107
+ "dueDate": "2025-07-22",
108
+ "knownRansomwareCampaignUse": "Unknown",
109
+ "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",
110
+ "cwes": [
111
+ "CWE-528"
112
+ ]
113
+ },
114
+ {
115
+ "cveID": "CVE-2025-48927",
116
+ "vendorProject": "TeleMessage",
117
+ "product": "TM SGNL",
118
+ "vulnerabilityName": "TeleMessage TM SGNL Initialization of a Resource with an Insecure Default Vulnerability",
119
+ "dateAdded": "2025-07-01",
120
+ "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.",
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-22",
123
+ "knownRansomwareCampaignUse": "Unknown",
124
+ "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",
125
+ "cwes": [
126
+ "CWE-1188"
127
+ ]
128
+ },
129
+ {
130
+ "cveID": "CVE-2025-6543",
131
+ "vendorProject": "Citrix",
132
+ "product": "NetScaler ADC and Gateway",
133
+ "vulnerabilityName": "Citrix NetScaler ADC and Gateway Buffer Overflow Vulnerability",
134
+ "dateAdded": "2025-06-30",
135
+ "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.",
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-21",
138
+ "knownRansomwareCampaignUse": "Unknown",
139
+ "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",
140
+ "cwes": [
141
+ "CWE-119"
142
+ ]
143
+ },
7
144
  {
8
145
  "cveID": "CVE-2019-6693",
9
146
  "vendorProject": "Fortinet",