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

@@ -33,6 +33,7 @@ from regscale.models.regscale_models import (
33
33
  from regscale.models.regscale_models.compliance_settings import ComplianceSettings
34
34
  from regscale.models.regscale_models.control_implementation import ControlImplementationStatus
35
35
  from regscale.utils.threading import ThreadSafeDict, ThreadSafeSet
36
+ from regscale.utils.version import RegscaleVersion
36
37
 
37
38
  # For type annotations only
38
39
  if TYPE_CHECKING:
@@ -62,6 +63,7 @@ NOT_IMPLEMENTED = ControlImplementationStatus.NotImplemented.value
62
63
  PARTIALLY_IMPLEMENTED = ControlImplementationStatus.PartiallyImplemented.value
63
64
  CONTROL_ID = "Control ID"
64
65
  ALT_IMPLEMENTATION = "Alternate Implementation"
66
+ ALTERNATIVE_IMPLEMENTATION = "Alternative Implementation"
65
67
  CAN_BE_INHERITED_CSP = "Can Be Inherited from CSP"
66
68
  IMPACT_LEVEL = "Impact Level"
67
69
  SYSTEM_NAME = "System Name"
@@ -75,7 +77,7 @@ STATUS_MAPPING = {
75
77
  PARTIALLY_IMPLEMENTED: ControlImplementationStatus.PartiallyImplemented,
76
78
  ControlImplementationStatus.Planned.value: ControlImplementationStatus.Planned,
77
79
  "N/A": ControlImplementationStatus.NA,
78
- "Alternative Implementation": ControlImplementationStatus.Alternative,
80
+ ALTERNATIVE_IMPLEMENTATION: ControlImplementationStatus.Alternative,
79
81
  ALT_IMPLEMENTATION: ControlImplementationStatus.Alternative,
80
82
  }
81
83
 
@@ -98,6 +100,7 @@ RESPONSIBILITY_MAP = {
98
100
  "bInherited": "Inherited",
99
101
  }
100
102
  REGSCALE_SSP_ID: int = 0
103
+ INITIAL_IMPORT = True
101
104
 
102
105
 
103
106
  @lru_cache(maxsize=1)
@@ -227,7 +230,7 @@ def map_implementation_status(control_id: str, cis_data: dict) -> str:
227
230
  return STATUS_MAPPING.get(status, ControlImplementationStatus.NotImplemented)
228
231
 
229
232
  # Priority-based status determination
230
- if any(status in ["N/A", "Alternative Implementation"] for status in status_counts):
233
+ if any(status in ["N/A", ALTERNATIVE_IMPLEMENTATION] for status in status_counts):
231
234
  status_ret = ControlImplementationStatus.NA
232
235
 
233
236
  implemented_count = status_counts.get("Implemented", 0)
@@ -301,6 +304,43 @@ def clean_customer_responsibility(value: str):
301
304
  return str(value)
302
305
 
303
306
 
307
+ def get_multi_status(record: dict) -> str:
308
+ """
309
+ Function to get the multi-select status from the record
310
+ """
311
+ status_list = []
312
+ status_map = {
313
+ "Implemented": ControlImplementationStatus.Implemented.value,
314
+ "Planned": ControlImplementationStatus.Implemented.Planned.value,
315
+ PARTIALLY_IMPLEMENTED: PARTIALLY_IMPLEMENTED,
316
+ "N/A": ControlImplementationStatus.NA.value,
317
+ NOT_IMPLEMENTED: NOT_IMPLEMENTED,
318
+ "Not Applicable": ControlImplementationStatus.NA.value,
319
+ ALTERNATIVE_IMPLEMENTATION: ControlImplementationStatus.Alternative.value,
320
+ ALT_IMPLEMENTATION: ControlImplementationStatus.Alternative.value,
321
+ }
322
+ # Get implementation status with default value
323
+ implementation_status = record.get("implementation_status", NOT_IMPLEMENTED)
324
+
325
+ # Handle empty or None status
326
+ if not implementation_status:
327
+ return NOT_IMPLEMENTED
328
+
329
+ if RegscaleVersion.meets_minimum_version("6.20.17.0"):
330
+ # Process multiple statuses
331
+ status_list = []
332
+ for status in implementation_status.split(","):
333
+ status = status.strip()
334
+ if status not in status_map:
335
+ logger.warning(f"Unknown implementation status: {status}")
336
+ continue
337
+ status_list.append(status_map[status])
338
+ return ",".join(status_list) if status_list else NOT_IMPLEMENTED
339
+ else:
340
+ # Legacy method - single status
341
+ return status_map.get(implementation_status, NOT_IMPLEMENTED)
342
+
343
+
304
344
  def update_imp_objective(
305
345
  leverage_auth_id: int,
306
346
  existing_imp_obj: List[ImplementationObjective],
@@ -319,13 +359,6 @@ def update_imp_objective(
319
359
  :rtype: None
320
360
  :return: None
321
361
  """
322
- status_map = {
323
- "Implemented": ControlImplementationStatus.Implemented.value,
324
- "Planned": ControlImplementationStatus.Implemented.Planned.value,
325
- PARTIALLY_IMPLEMENTED: PARTIALLY_IMPLEMENTED,
326
- "N/A": ControlImplementationStatus.NA.value,
327
- NOT_IMPLEMENTED: NOT_IMPLEMENTED,
328
- }
329
362
 
330
363
  cis_record = record.get("cis", {})
331
364
  crm_record = record.get("crm", {})
@@ -335,7 +368,10 @@ def update_imp_objective(
335
368
  control_originations[ix] = control_origination.strip()
336
369
 
337
370
  try:
338
- responsibility = next(origin for origin in control_originations)
371
+ if RegscaleVersion.meets_minimum_version("6.20.17.0"):
372
+ responsibility = ",".join(control_originations)
373
+ else:
374
+ responsibility = next(origin for origin in control_originations)
339
375
 
340
376
  except StopIteration:
341
377
  if imp.responsibility:
@@ -349,25 +385,28 @@ def update_imp_objective(
349
385
  existing_pairs = {(obj.objectiveId, obj.implementationId) for obj in existing_imp_obj}
350
386
  logger.debug(f"CRM Record: {crm_record}")
351
387
  can_be_inherited_from_csp: str = crm_record.get("can_be_inherited_from_csp") or ""
388
+ cloud_responsibility = customer_responsibility if can_be_inherited_from_csp.lower() == "yes" else ""
389
+ customer_responsibility = customer_responsibility if can_be_inherited_from_csp.lower() != "yes" else ""
352
390
  for objective in objectives:
353
391
  current_pair = (objective.id, imp.id)
354
392
  if current_pair not in existing_pairs:
355
393
  if objective.securityControlId != imp.controlID:
356
394
  # This is a bad match, do not save.
357
395
  continue
396
+
358
397
  imp_obj = ImplementationObjective(
359
398
  id=0,
360
399
  uuid="",
361
400
  inherited=can_be_inherited_from_csp in ["Yes", "Partial"],
362
401
  implementationId=imp.id,
363
- status=status_map.get(cis_record.get("implementation_status", NOT_IMPLEMENTED), NOT_IMPLEMENTED),
402
+ status=get_multi_status(cis_record),
364
403
  objectiveId=objective.id,
365
404
  notes=objective.name,
366
405
  securityControlId=objective.securityControlId,
367
406
  securityPlanId=REGSCALE_SSP_ID,
368
407
  responsibility=responsibility,
369
- cloudResponsibility=customer_responsibility if can_be_inherited_from_csp.lower() == "yes" else "",
370
- customerResponsibility=(customer_responsibility if can_be_inherited_from_csp.lower() != "yes" else ""),
408
+ cloudResponsibility=cloud_responsibility,
409
+ customerResponsibility=customer_responsibility,
371
410
  authorizationId=leverage_auth_id,
372
411
  parentObjectiveId=objective.parentObjectiveId,
373
412
  )
@@ -379,34 +418,20 @@ def update_imp_objective(
379
418
  )
380
419
  UPDATED_IMPLEMENTATION_OBJECTIVES.add(imp_obj)
381
420
  else:
382
- # NOTE: Don't overwrite the responsibility text and only append.
383
421
  ex_obj = next((obj for obj in existing_imp_obj if obj.objectiveId == objective.id), None)
384
422
  if ex_obj:
385
- ex_obj.status = status_map.get(
386
- cis_record.get("implementation_status", NOT_IMPLEMENTED), NOT_IMPLEMENTED
387
- )
388
- try:
389
- seperator = " \n---------------\n "
390
- if ex_obj.responsibility:
391
- ex_obj.responsibility = (
392
- seperator.join([ex_obj.responsibility, responsibility])
393
- if ex_obj.responsibility != responsibility
394
- else ex_obj.responsibility
395
- )
396
- if ex_obj.cloudResponsibility:
397
- ex_obj.cloudResponsibility = (
398
- seperator.join([ex_obj.cloudResponsibility, customer_responsibility])
399
- if ex_obj.cloudResponsibility != responsibility
400
- else ex_obj.cloudResponsibility
401
- )
402
- if ex_obj.customerResponsibility:
403
- ex_obj.customerResponsibility = (
404
- seperator.join([ex_obj.customerResponsibility, customer_responsibility])
405
- if ex_obj.cloudResponsibility != responsibility
406
- else ex_obj.customerResponsibility
407
- )
408
- except TypeError:
409
- logger.warning(f"Failed to update responsibility on Implementation Objective #{ex_obj.id}")
423
+ ex_obj.status = get_multi_status(cis_record)
424
+ if cloud_responsibility.strip():
425
+ logger.debug(
426
+ f"Updating Implementation Objective #{ex_obj.id} with responsibility: {responsibility}"
427
+ )
428
+ ex_obj.cloudResponsibility = cloud_responsibility
429
+ if customer_responsibility.strip():
430
+ logger.debug(
431
+ f"Updating Implementation Objective #{ex_obj.id} with cloud responsibility: {cloud_responsibility}"
432
+ )
433
+ ex_obj.customerResponsibility = customer_responsibility
434
+
410
435
  UPDATED_IMPLEMENTATION_OBJECTIVES.add(ex_obj)
411
436
 
412
437
 
@@ -995,6 +1020,7 @@ def parse_cis_worksheet(file_path: click.Path, cis_sheet_name: str) -> dict:
995
1020
  :return: The implementation status
996
1021
  :rtype: str
997
1022
  """
1023
+ selected_status = []
998
1024
  for col in [
999
1025
  "Implemented",
1000
1026
  ControlImplementationStatus.PartiallyImplemented,
@@ -1003,8 +1029,8 @@ def parse_cis_worksheet(file_path: click.Path, cis_sheet_name: str) -> dict:
1003
1029
  ControlImplementationStatus.NA,
1004
1030
  ]:
1005
1031
  if data_row[col]:
1006
- return col
1007
- return ""
1032
+ selected_status.append(col)
1033
+ return ", ".join(selected_status) if selected_status else ""
1008
1034
 
1009
1035
  # Function to extract the first non-empty control origination
1010
1036
  def _extract_origination(data_row: pd.Series) -> str:
@@ -1227,7 +1253,8 @@ def _save_implementation_text(imp: ControlImplementation, customer_text: str, cl
1227
1253
  imp.cloudImplementation = cloud_text
1228
1254
 
1229
1255
  # Update parameters in background thread
1230
- _spin_off_thread(parameter_merge, imp.id, imp.controlID)
1256
+ if INITIAL_IMPORT:
1257
+ _spin_off_thread(parameter_merge, imp.id, imp.controlID)
1231
1258
 
1232
1259
  # Save implementation changes
1233
1260
  imp.save()
@@ -1255,6 +1282,7 @@ def parse_and_map_data(
1255
1282
  crm_data=crm_data,
1256
1283
  version=version,
1257
1284
  )
1285
+ # Don't call this on re-import
1258
1286
  update_customer_text()
1259
1287
 
1260
1288
  report(error_set)
@@ -1330,6 +1358,7 @@ def create_new_security_plan(profile_id: int, system_name: str):
1330
1358
  :rtype: SecurityPlan
1331
1359
  :return: The created security plan
1332
1360
  """
1361
+ global INITIAL_IMPORT
1333
1362
  compliance_settings = ComplianceSettings.get_by_current_tenant()
1334
1363
  try:
1335
1364
  compliance_setting = next(
@@ -1386,6 +1415,7 @@ def create_new_security_plan(profile_id: int, system_name: str):
1386
1415
  build_implementations_dict(security_plan_id=ret.id)
1387
1416
 
1388
1417
  else:
1418
+ INITIAL_IMPORT = False
1389
1419
  ret = next((plan for plan in existing_plan), None)
1390
1420
  logger.info(f"Found existing SSP# {ret.id}")
1391
1421
  existing_imps = ControlImplementation.get_list_by_plan(ret.id)
@@ -185,10 +185,28 @@ class ImportValidater:
185
185
  df = pandas.read_csv(file_path, skiprows=self.skip_rows - 1, on_bad_lines="warn")
186
186
  else:
187
187
  df = pandas.read_csv(file_path, on_bad_lines="warn")
188
+
189
+ # Check if the DataFrame is empty or has no columns
190
+ if df.empty or len(df.columns) == 0:
191
+ raise ValidationException(
192
+ f"The CSV file '{file_path}' appears to be empty or has no parseable columns. "
193
+ f"Please check that:\n"
194
+ f"1. The file contains data\n"
195
+ f"2. The file has proper column headers\n"
196
+ f"3. The skip_rows parameter ({self.skip_rows}) is correct for this file format"
197
+ )
198
+
188
199
  if self.ignore_unnamed:
189
200
  df = df.loc[:, ~df.columns.str.contains("^Unnamed")]
190
- except pandas.errors.ParserError:
191
- raise ValidationException(f"Unable to parse the {CSV} file: {file_path}")
201
+ except pandas.errors.EmptyDataError as e:
202
+ raise ValidationException(
203
+ f"The CSV file '{file_path}' is empty or contains no data. "
204
+ f"Please verify the file contains valid CSV data with headers. "
205
+ f"If using skip_rows ({self.skip_rows}), ensure there are enough rows in the file."
206
+ ) from e
207
+ except pandas.errors.ParserError as e:
208
+ raise ValidationException(f"Unable to parse the {CSV} file: {file_path}. Error: {e}") from e
209
+
192
210
  self.validate_headers(df.columns)
193
211
  df = df.fillna("")
194
212
  return df
@@ -1,20 +1,108 @@
1
1
  {
2
2
  "title": "CISA Catalog of Known Exploited Vulnerabilities",
3
- "catalogVersion": "2025.06.13",
4
- "dateReleased": "2025-06-13T16:08:40.4237Z",
5
- "count": 1364,
3
+ "catalogVersion": "2025.06.25",
4
+ "dateReleased": "2025-06-25T16:52:26.9744Z",
5
+ "count": 1370,
6
6
  "vulnerabilities": [
7
+ {
8
+ "cveID": "CVE-2019-6693",
9
+ "vendorProject": "Fortinet",
10
+ "product": "FortiOS",
11
+ "vulnerabilityName": "Fortinet FortiOS Use of Hard-Coded Credentials Vulnerability",
12
+ "dateAdded": "2025-06-25",
13
+ "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
+ "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-16",
16
+ "knownRansomwareCampaignUse": "Unknown",
17
+ "notes": "https:\/\/fortiguard.com\/advisory\/FG-IR-19-007 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-6693",
18
+ "cwes": [
19
+ "CWE-798"
20
+ ]
21
+ },
22
+ {
23
+ "cveID": "CVE-2024-0769",
24
+ "vendorProject": "D-Link",
25
+ "product": "DIR-859 Router",
26
+ "vulnerabilityName": " D-Link DIR-859 Router Path Traversal Vulnerability",
27
+ "dateAdded": "2025-06-25",
28
+ "shortDescription": "D-Link DIR-859 routers contain a path traversal vulnerability in the file \/hedwig.cgi of the component HTTP POST Request Handler. Manipulation of the argument service with the input ..\/..\/..\/..\/htdocs\/webinc\/getcfg\/DHCPS6.BRIDGE-1.xml allows for the leakage of session data potentially enabling privilege escalation and unauthorized control of the device. This vulnerability affects legacy D-Link products. All associated hardware revisions have reached their end-of-life (EOL) or end-of-service (EOS) life cycle and should be retired and replaced per vendor instructions.",
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-16",
31
+ "knownRansomwareCampaignUse": "Unknown",
32
+ "notes": "https:\/\/supportannouncement.us.dlink.com\/announcement\/publication.aspx?name=SAP10371 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2024-0769",
33
+ "cwes": [
34
+ "CWE-22"
35
+ ]
36
+ },
37
+ {
38
+ "cveID": "CVE-2024-54085",
39
+ "vendorProject": "AMI",
40
+ "product": "MegaRAC SPx",
41
+ "vulnerabilityName": "AMI MegaRAC SPx Authentication Bypass by Spoofing Vulnerability",
42
+ "dateAdded": "2025-06-25",
43
+ "shortDescription": "AMI MegaRAC SPx contains an authentication bypass by spoofing vulnerability in the Redfish Host Interface. A successful exploitation of this vulnerability may lead to a loss of confidentiality, integrity, and\/or availability.",
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-07-16",
46
+ "knownRansomwareCampaignUse": "Unknown",
47
+ "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:\/\/go.ami.com\/hubfs\/Security%20Advisories\/2025\/AMI-SA-2025003.pdf ; https:\/\/security.netapp.com\/advisory\/ntap-20250328-0003\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2024-54085",
48
+ "cwes": [
49
+ "CWE-290"
50
+ ]
51
+ },
52
+ {
53
+ "cveID": "CVE-2023-0386",
54
+ "vendorProject": "Linux",
55
+ "product": "Kernel",
56
+ "vulnerabilityName": "Linux Kernel Improper Ownership Management Vulnerability",
57
+ "dateAdded": "2025-06-17",
58
+ "shortDescription": "Linux Kernel contains an improper ownership management vulnerability, where unauthorized access to the execution of the setuid file with capabilities was found in the Linux kernel\u2019s OverlayFS subsystem in how a user copies a capable file from a nosuid mount into another mount. This uid mapping bug allows a local user to escalate their privileges on the system.",
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-08",
61
+ "knownRansomwareCampaignUse": "Unknown",
62
+ "notes": "This vulnerability affects a common open-source component, third-party library, or a protocol used by different products. For more information, please see: https:\/\/git.kernel.org\/pub\/scm\/linux\/kernel\/git\/torvalds\/linux.git\/commit\/?id=4f11ada10d0a ; https:\/\/access.redhat.com\/security\/cve\/cve-2023-0386 ; https:\/\/security.netapp.com\/advisory\/ntap-20230420-0004\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2023-0386",
63
+ "cwes": [
64
+ "CWE-282"
65
+ ]
66
+ },
67
+ {
68
+ "cveID": "CVE-2023-33538",
69
+ "vendorProject": "TP-Link",
70
+ "product": "Multiple Routers",
71
+ "vulnerabilityName": "TP-Link Multiple Routers Command Injection Vulnerability",
72
+ "dateAdded": "2025-06-16",
73
+ "shortDescription": "TP-Link TL-WR940N V2\/V4, TL-WR841N V8\/V10, and TL-WR740N V1\/V2 contain a command injection vulnerability via the component \/userRpm\/WlanNetworkRpm. The impacted products could be end-of-life (EoL) and\/or end-of-service (EoS). Users should discontinue product utilization.",
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-07",
76
+ "knownRansomwareCampaignUse": "Unknown",
77
+ "notes": "https:\/\/www.tp-link.com\/nordic\/support\/faq\/3562\/ ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2023-33538",
78
+ "cwes": [
79
+ "CWE-77"
80
+ ]
81
+ },
82
+ {
83
+ "cveID": "CVE-2025-43200",
84
+ "vendorProject": "Apple",
85
+ "product": "Multiple Products",
86
+ "vulnerabilityName": "Apple Multiple Products Unspecified Vulnerability",
87
+ "dateAdded": "2025-06-16",
88
+ "shortDescription": "Apple iOS, iPadOS, macOS, watchOS, and visionOS, contain an unspecified vulnerability when processing a maliciously crafted photo or video shared via an iCloud Link.",
89
+ "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.",
90
+ "dueDate": "2025-07-07",
91
+ "knownRansomwareCampaignUse": "Unknown",
92
+ "notes": "https:\/\/support.apple.com\/en-us\/122174 ; https:\/\/support.apple.com\/en-us\/122173 ; https:\/\/support.apple.com\/en-us\/122900 ; https:\/\/support.apple.com\/en-us\/122901 ; https:\/\/support.apple.com\/en-us\/122902 ; https:\/\/support.apple.com\/en-us\/122903 ; https:\/\/support.apple.com\/en-us\/122904 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-43200",
93
+ "cwes": []
94
+ },
7
95
  {
8
96
  "cveID": "CVE-2025-33053",
9
- "vendorProject": "Web Distributed Authoring and Versioning",
10
- "product": "Web Distributed Authoring and Versioning (WebDAV)",
11
- "vulnerabilityName": "Web Distributed Authoring and Versioning (WebDAV) External Control of File Name or Path Vulnerability",
97
+ "vendorProject": "Microsoft",
98
+ "product": "Windows",
99
+ "vulnerabilityName": " Microsoft Windows External Control of File Name or Path Vulnerability",
12
100
  "dateAdded": "2025-06-10",
13
- "shortDescription": "Web Distributed Authoring and Versioning (WebDAV) contains an external control of file name or path vulnerability. This vulnerability could allow an unauthorized attacker to execute code over a network. This vulnerability could affect various products that implement WebDAV, including but not limited to Microsoft Windows.",
101
+ "shortDescription": "Microsoft Windows contains an external control of file name or path vulnerability that could allow an attacker to execute code from a remote WebDAV location specified by the WorkingDirectory attribute of Internet Shortcut files.",
14
102
  "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
103
  "dueDate": "2025-07-01",
16
104
  "knownRansomwareCampaignUse": "Unknown",
17
- "notes": "This vulnerability affects a common open-source project, third-party library, or a protocol used by different products. For more information, please see: https:\/\/msrc.microsoft.com\/update-guide\/en-US\/vulnerability\/CVE-2025-33053 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-33053",
105
+ "notes": "https:\/\/msrc.microsoft.com\/update-guide\/en-US\/vulnerability\/CVE-2025-33053 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-33053",
18
106
  "cwes": [
19
107
  "CWE-73"
20
108
  ]
@@ -29,7 +117,7 @@
29
117
  "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
118
  "dueDate": "2025-07-01",
31
119
  "knownRansomwareCampaignUse": "Unknown",
32
- "notes": "https:\/\/github.com\/wazuh\/wazuh\/security\/advisories\/GHSA-hcrc-79hj-m3qh ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-24016",
120
+ "notes": "https:\/\/wazuh.com\/blog\/addressing-the-cve-2025-24016-vulnerability\/ ; https:\/\/github.com\/wazuh\/wazuh\/security\/advisories\/GHSA-hcrc-79hj-m3qh ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-24016",
33
121
  "cwes": [
34
122
  "CWE-502"
35
123
  ]