regscale-cli 6.16.2.0__py3-none-any.whl → 6.16.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.
- regscale/__init__.py +1 -1
- regscale/core/app/internal/control_editor.py +26 -2
- regscale/core/app/internal/model_editor.py +39 -26
- regscale/core/app/utils/api_handler.py +4 -11
- regscale/integrations/commercial/crowdstrike.py +0 -1
- regscale/integrations/commercial/grype/scanner.py +37 -29
- regscale/integrations/commercial/opentext/commands.py +2 -0
- regscale/integrations/commercial/opentext/scanner.py +45 -31
- regscale/integrations/commercial/qualys.py +52 -61
- regscale/integrations/commercial/servicenow.py +1 -0
- regscale/integrations/commercial/sicura/commands.py +9 -14
- regscale/integrations/commercial/snyk.py +2 -2
- regscale/integrations/commercial/synqly/ticketing.py +29 -0
- regscale/integrations/commercial/tenablev2/click.py +25 -13
- regscale/integrations/commercial/tenablev2/scanner.py +12 -3
- regscale/integrations/commercial/trivy/scanner.py +14 -6
- regscale/integrations/commercial/veracode.py +1 -1
- regscale/integrations/commercial/wizv2/click.py +15 -37
- regscale/integrations/jsonl_scanner_integration.py +120 -16
- regscale/integrations/public/fedramp/click.py +8 -8
- regscale/integrations/public/fedramp/fedramp_cis_crm.py +499 -106
- regscale/integrations/public/fedramp/ssp_logger.py +2 -9
- regscale/integrations/scanner_integration.py +67 -27
- regscale/models/integration_models/cisa_kev_data.json +86 -12
- regscale/models/integration_models/flat_file_importer/__init__.py +29 -8
- regscale/models/integration_models/snyk.py +141 -15
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/integration_models/tenable_models/integration.py +23 -3
- regscale/models/integration_models/veracode.py +91 -48
- regscale/models/regscale_models/control_implementation.py +18 -0
- regscale/models/regscale_models/control_objective.py +2 -1
- regscale/models/regscale_models/facility.py +10 -26
- regscale/models/regscale_models/functional_roles.py +38 -0
- regscale/models/regscale_models/issue.py +3 -1
- regscale/models/regscale_models/parameter.py +21 -3
- regscale/models/regscale_models/profile.py +22 -0
- regscale/models/regscale_models/profile_mapping.py +48 -3
- regscale/models/regscale_models/regscale_model.py +2 -0
- regscale/models/regscale_models/risk.py +38 -30
- regscale/models/regscale_models/security_plan.py +1 -0
- regscale/models/regscale_models/supply_chain.py +1 -1
- regscale/models/regscale_models/user.py +19 -6
- regscale/utils/threading/__init__.py +1 -0
- regscale/utils/threading/threadsafe_list.py +10 -0
- regscale/utils/threading/threadsafe_set.py +116 -0
- regscale/utils/version.py +3 -5
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/METADATA +1 -1
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/RECORD +52 -50
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.16.2.0.dist-info → regscale_cli-6.16.4.0.dist-info}/top_level.txt +0 -0
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
from regscale.integrations.public.fedramp.reporting import (
|
|
2
|
-
write_events,
|
|
3
|
-
log_error,
|
|
4
|
-
log_event,
|
|
5
|
-
)
|
|
6
|
-
|
|
7
1
|
import logging
|
|
2
|
+
|
|
8
3
|
from regscale.core.app.logz import create_logger
|
|
4
|
+
from regscale.integrations.public.fedramp.reporting import log_error, log_event, write_events
|
|
9
5
|
|
|
10
6
|
|
|
11
7
|
class CaptureEventsHandler(logging.Handler):
|
|
@@ -39,7 +35,6 @@ class SSPLogger:
|
|
|
39
35
|
return self.logger
|
|
40
36
|
|
|
41
37
|
def info(self, event_msg: str, record_type: str = "", model_layer: str = ""):
|
|
42
|
-
self.logger.info(event_msg)
|
|
43
38
|
info = {
|
|
44
39
|
"event_msg": event_msg,
|
|
45
40
|
"record_type": record_type,
|
|
@@ -57,7 +52,6 @@ class SSPLogger:
|
|
|
57
52
|
model_layer: str = "",
|
|
58
53
|
missing_element: str = "",
|
|
59
54
|
):
|
|
60
|
-
self.logger.error(event_msg)
|
|
61
55
|
error = {
|
|
62
56
|
"event_msg": event_msg,
|
|
63
57
|
"missing_element": missing_element,
|
|
@@ -67,7 +61,6 @@ class SSPLogger:
|
|
|
67
61
|
self.errors.append(log_error(**error, level="Error"))
|
|
68
62
|
|
|
69
63
|
def warning(self, event_msg: str, record_type: str = "", model_layer: str = ""):
|
|
70
|
-
self.logger.warning(event_msg)
|
|
71
64
|
warning = {
|
|
72
65
|
"event_msg": event_msg,
|
|
73
66
|
"record_type": record_type,
|
|
@@ -269,6 +269,10 @@ class IntegrationAsset:
|
|
|
269
269
|
other_cloud_identifier: Optional[str] = None
|
|
270
270
|
patch_level: Optional[str] = None
|
|
271
271
|
cpe: Optional[str] = None
|
|
272
|
+
is_latest_scan: Optional[bool] = None
|
|
273
|
+
is_authenticated_scan: Optional[bool] = None
|
|
274
|
+
system_administrator_id: Optional[str] = None
|
|
275
|
+
scanning_tool: Optional[str] = None
|
|
272
276
|
|
|
273
277
|
source_data: Optional[Dict[str, Any]] = None
|
|
274
278
|
url: Optional[str] = None
|
|
@@ -373,6 +377,7 @@ class IntegrationFinding:
|
|
|
373
377
|
cvss_v2_score: Optional[float] = None
|
|
374
378
|
ip_address: Optional[str] = None
|
|
375
379
|
plugin_id: Optional[str] = None
|
|
380
|
+
plugin_text: Optional[str] = None
|
|
376
381
|
dns: Optional[str] = None
|
|
377
382
|
severity_int: int = 0
|
|
378
383
|
security_check: Optional[str] = None
|
|
@@ -410,6 +415,7 @@ class IntegrationFinding:
|
|
|
410
415
|
risk_adjustment: str = "No"
|
|
411
416
|
operational_requirements: Optional[str] = None
|
|
412
417
|
deviation_rationale: Optional[str] = None
|
|
418
|
+
is_cwe: bool = False
|
|
413
419
|
|
|
414
420
|
poam_comments: Optional[str] = None
|
|
415
421
|
vulnerability_id: Optional[int] = None
|
|
@@ -1067,6 +1073,10 @@ class ScannerIntegration(ABC):
|
|
|
1067
1073
|
softwareVersion=asset.software_version,
|
|
1068
1074
|
softwareName=asset.software_name,
|
|
1069
1075
|
softwareVendor=asset.software_vendor,
|
|
1076
|
+
bLatestScan=asset.is_latest_scan,
|
|
1077
|
+
bAuthenticatedScan=asset.is_authenticated_scan,
|
|
1078
|
+
systemAdministratorId=asset.system_administrator_id,
|
|
1079
|
+
scanningTool=asset.scanning_tool,
|
|
1070
1080
|
)
|
|
1071
1081
|
if self.asset_identifier_field:
|
|
1072
1082
|
setattr(new_asset, self.asset_identifier_field, asset.identifier)
|
|
@@ -1587,15 +1597,34 @@ class ScannerIntegration(ABC):
|
|
|
1587
1597
|
bulk_update=True, defaults={"otherIdentifier": self._get_other_identifier(finding, is_poam)}
|
|
1588
1598
|
)
|
|
1589
1599
|
|
|
1600
|
+
self._handle_property_creation_for_issue(issue, finding)
|
|
1601
|
+
return issue
|
|
1602
|
+
|
|
1603
|
+
def _handle_property_creation_for_issue(self, issue: regscale_models.Issue, finding: IntegrationFinding) -> None:
|
|
1604
|
+
"""
|
|
1605
|
+
Handles property creation for an issue based on the finding data
|
|
1606
|
+
|
|
1607
|
+
:param regscale_models.Issue issue: The issue to handle properties for
|
|
1608
|
+
:param IntegrationFinding finding: The finding data
|
|
1609
|
+
:rtype: None
|
|
1610
|
+
"""
|
|
1590
1611
|
if poc := finding.point_of_contact:
|
|
1591
|
-
|
|
1612
|
+
regscale_models.Property(
|
|
1592
1613
|
key="POC",
|
|
1593
1614
|
value=poc,
|
|
1594
1615
|
parentId=issue.id,
|
|
1595
1616
|
parentModule="issues",
|
|
1596
|
-
).create_or_update(
|
|
1617
|
+
).create_or_update()
|
|
1618
|
+
logger.debug("Added POC property %s to issue %s", poc, issue.id)
|
|
1597
1619
|
|
|
1598
|
-
|
|
1620
|
+
if finding.is_cwe:
|
|
1621
|
+
regscale_models.Property(
|
|
1622
|
+
key="CWE",
|
|
1623
|
+
value=finding.plugin_id,
|
|
1624
|
+
parentId=issue.id,
|
|
1625
|
+
parentModule="issues",
|
|
1626
|
+
).create_or_update()
|
|
1627
|
+
logger.debug("Added CWE property %s to issue %s", finding.plugin_id, issue.id)
|
|
1599
1628
|
|
|
1600
1629
|
@staticmethod
|
|
1601
1630
|
def get_consolidated_asset_identifier(
|
|
@@ -1719,15 +1748,16 @@ class ScannerIntegration(ABC):
|
|
|
1719
1748
|
:param IntegrationFinding finding: The finding data that has failed
|
|
1720
1749
|
:rtype: None
|
|
1721
1750
|
"""
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1751
|
+
if ScannerVariables.vulnerabilityCreation.lower() != "noissue":
|
|
1752
|
+
logger.debug("Creating issue for failing finding %s", finding.external_id)
|
|
1753
|
+
found_issue = self.create_or_update_issue_from_finding(
|
|
1754
|
+
title=issue_title,
|
|
1755
|
+
finding=finding,
|
|
1756
|
+
)
|
|
1757
|
+
# Update the control implementation status to NOT_IMPLEMENTED since we have a failing finding
|
|
1758
|
+
if found_issue.controlImplementationIds:
|
|
1759
|
+
for control_id in found_issue.controlImplementationIds:
|
|
1760
|
+
self.update_control_implementation_status_after_close(control_id)
|
|
1731
1761
|
|
|
1732
1762
|
def handle_failing_checklist(
|
|
1733
1763
|
self,
|
|
@@ -2013,6 +2043,7 @@ class ScannerIntegration(ABC):
|
|
|
2013
2043
|
self._results["scan_history"] = scan_history.save()
|
|
2014
2044
|
self.update_result_counts("issues", regscale_models.Issue.bulk_save(progress_context=self.finding_progress))
|
|
2015
2045
|
self.close_outdated_issues(current_vulnerabilities)
|
|
2046
|
+
self._perform_batch_operations(self.finding_progress)
|
|
2016
2047
|
|
|
2017
2048
|
return processed_findings_count
|
|
2018
2049
|
|
|
@@ -2074,7 +2105,7 @@ class ScannerIntegration(ABC):
|
|
|
2074
2105
|
parentId=self.plan_id,
|
|
2075
2106
|
parentModule=regscale_models.SecurityPlan.get_module_string(),
|
|
2076
2107
|
scanningTool=self.title,
|
|
2077
|
-
scanDate=get_current_datetime(),
|
|
2108
|
+
scanDate=self.scan_date if self.scan_date else get_current_datetime(),
|
|
2078
2109
|
createdById=self.assessor_id,
|
|
2079
2110
|
tenantsId=self.tenant_id,
|
|
2080
2111
|
vLow=0,
|
|
@@ -2159,16 +2190,12 @@ class ScannerIntegration(ABC):
|
|
|
2159
2190
|
if asset := self.get_asset_by_identifier(finding.asset_identifier):
|
|
2160
2191
|
if vulnerability_id := self.handle_vulnerability(finding, asset, scan_history):
|
|
2161
2192
|
current_vulnerabilities[asset.id].add(vulnerability_id)
|
|
2162
|
-
|
|
2163
|
-
# Handle failing finding (creates/updates issues) for both checklist and vulnerability cases
|
|
2164
|
-
if finding.status != regscale_models.IssueStatus.Closed:
|
|
2165
2193
|
self.handle_failing_finding(
|
|
2166
2194
|
issue_title=finding.issue_title or finding.title,
|
|
2167
2195
|
finding=finding,
|
|
2168
2196
|
)
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
self.set_severity_count_for_scan(finding.severity, scan_history)
|
|
2197
|
+
# Update scan history severity counts
|
|
2198
|
+
self.set_severity_count_for_scan(finding.severity, scan_history)
|
|
2172
2199
|
|
|
2173
2200
|
def create_vulnerability_from_finding(
|
|
2174
2201
|
self, finding: IntegrationFinding, asset: regscale_models.Asset, scan_history: regscale_models.ScanHistory
|
|
@@ -2206,7 +2233,8 @@ class ScannerIntegration(ABC):
|
|
|
2206
2233
|
plugInName=finding.cve or finding.plugin_name, # Use CVE if available, otherwise use plugin name
|
|
2207
2234
|
plugInId=finding.plugin_id,
|
|
2208
2235
|
exploitAvailable=None, # Set this if you have information about exploit availability
|
|
2209
|
-
plugInText=finding.
|
|
2236
|
+
plugInText=finding.plugin_text
|
|
2237
|
+
or finding.observations, # or finding.evidence, whichever is more appropriate
|
|
2210
2238
|
port=finding.port if hasattr(finding, "port") else None,
|
|
2211
2239
|
protocol=finding.protocol if hasattr(finding, "protocol") else None,
|
|
2212
2240
|
operatingSystem=asset.operating_system if hasattr(asset, "operating_system") else None,
|
|
@@ -2262,11 +2290,12 @@ class ScannerIntegration(ABC):
|
|
|
2262
2290
|
vulnerability = self.create_vulnerability_from_finding(finding, asset, scan_history)
|
|
2263
2291
|
finding.vulnerability_id = vulnerability.id
|
|
2264
2292
|
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2293
|
+
if ScannerVariables.vulnerabilityCreation.lower() != "noissue":
|
|
2294
|
+
# Handle associated issue
|
|
2295
|
+
self.create_or_update_issue_from_finding(
|
|
2296
|
+
title=finding.title,
|
|
2297
|
+
finding=finding,
|
|
2298
|
+
)
|
|
2270
2299
|
|
|
2271
2300
|
return vulnerability.id
|
|
2272
2301
|
|
|
@@ -2548,7 +2577,7 @@ class ScannerIntegration(ABC):
|
|
|
2548
2577
|
:rtype: int
|
|
2549
2578
|
"""
|
|
2550
2579
|
logger.info("Syncing %s findings...", kwargs.get("title", cls.title))
|
|
2551
|
-
instance = cls(plan_id=plan_id)
|
|
2580
|
+
instance = cls(plan_id=plan_id, **kwargs)
|
|
2552
2581
|
instance.set_keys(**kwargs)
|
|
2553
2582
|
# If a progress object was passed, use it instead of creating a new one
|
|
2554
2583
|
instance.finding_progress = kwargs.pop("progress") if "progress" in kwargs else create_progress_object()
|
|
@@ -2572,9 +2601,17 @@ class ScannerIntegration(ABC):
|
|
|
2572
2601
|
logger.info("All findings have been processed successfully.")
|
|
2573
2602
|
|
|
2574
2603
|
if scan_history := instance._results.get("scan_history"):
|
|
2604
|
+
open_count = scan_history.vCritical + scan_history.vHigh + scan_history.vMedium + scan_history.vLow
|
|
2605
|
+
closed_count = findings_processed - open_count
|
|
2575
2606
|
logger.info(
|
|
2576
|
-
"Processed %d findings
|
|
2607
|
+
"Processed %d total findings. Open vulnerabilities: %d & Closed vulnerabilities: %d",
|
|
2577
2608
|
findings_processed,
|
|
2609
|
+
open_count,
|
|
2610
|
+
closed_count,
|
|
2611
|
+
)
|
|
2612
|
+
logger.info(
|
|
2613
|
+
"%d Open vulnerabilities: Critical(s): %d, High(s): %d, Medium(s): %d, Low(s): %d",
|
|
2614
|
+
open_count,
|
|
2578
2615
|
scan_history.vCritical,
|
|
2579
2616
|
scan_history.vHigh,
|
|
2580
2617
|
scan_history.vMedium,
|
|
@@ -2623,6 +2660,8 @@ class ScannerIntegration(ABC):
|
|
|
2623
2660
|
created_count = instance._results.get("assets", {}).get("created_count", 0)
|
|
2624
2661
|
updated_count = instance._results.get("assets", {}).get("updated_count", 0)
|
|
2625
2662
|
dedupe_count = assets_processed - (created_count + updated_count)
|
|
2663
|
+
# Ensure dedupe_count is always a positive value
|
|
2664
|
+
dedupe_count = dedupe_count if dedupe_count >= 0 else dedupe_count * -1
|
|
2626
2665
|
logger.info(
|
|
2627
2666
|
"%d assets processed and %d asset(s) deduped. %d asset(s) created & %d asset(s) updated in RegScale.",
|
|
2628
2667
|
assets_processed,
|
|
@@ -2770,6 +2809,7 @@ class ScannerIntegration(ABC):
|
|
|
2770
2809
|
:return: None
|
|
2771
2810
|
:rtype: None
|
|
2772
2811
|
"""
|
|
2812
|
+
logger.info(f"Updating scan history with scan_date {self.scan_date}")
|
|
2773
2813
|
scan_history.scanDate = datetime_str(self.scan_date)
|
|
2774
2814
|
scan_history.save()
|
|
2775
2815
|
|
|
@@ -1,9 +1,83 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "CISA Catalog of Known Exploited Vulnerabilities",
|
|
3
|
-
"catalogVersion": "2025.03
|
|
4
|
-
"dateReleased": "2025-
|
|
5
|
-
"count":
|
|
3
|
+
"catalogVersion": "2025.04.03",
|
|
4
|
+
"dateReleased": "2025-04-03T12:34:57.2906Z",
|
|
5
|
+
"count": 1313,
|
|
6
6
|
"vulnerabilities": [
|
|
7
|
+
{
|
|
8
|
+
"cveID": "CVE-2025-24813",
|
|
9
|
+
"vendorProject": "Apache",
|
|
10
|
+
"product": "Tomcat",
|
|
11
|
+
"vulnerabilityName": "Apache Tomcat Path Equivalence Vulnerability",
|
|
12
|
+
"dateAdded": "2025-04-01",
|
|
13
|
+
"shortDescription": "Apache Tomcat contains a path equivalence vulnerability that allows a remote attacker to execute code, disclose information, or inject malicious content via a partial PUT request.",
|
|
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-04-22",
|
|
16
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
17
|
+
"notes": "https:\/\/lists.apache.org\/thread\/j5fkjv2k477os90nczf2v9l61fb0kkgq ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-24813",
|
|
18
|
+
"cwes": [
|
|
19
|
+
"CWE-44",
|
|
20
|
+
"CWE-502"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"cveID": "CVE-2024-20439",
|
|
25
|
+
"vendorProject": "Cisco",
|
|
26
|
+
"product": "Smart Licensing Utility",
|
|
27
|
+
"vulnerabilityName": "Cisco Smart Licensing Utility Static Credential Vulnerability",
|
|
28
|
+
"dateAdded": "2025-03-31",
|
|
29
|
+
"shortDescription": "Cisco Smart Licensing Utility contains a static credential vulnerability that allows an unauthenticated, remote attacker to log in to an affected system and gain administrative credentials.",
|
|
30
|
+
"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.",
|
|
31
|
+
"dueDate": "2025-04-21",
|
|
32
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
33
|
+
"notes": "https:\/\/sec.cloudapps.cisco.com\/security\/center\/content\/CiscoSecurityAdvisory\/cisco-sa-cslu-7gHMzWmw ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2024-20439",
|
|
34
|
+
"cwes": [
|
|
35
|
+
"CWE-912"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"cveID": "CVE-2025-2783",
|
|
40
|
+
"vendorProject": "Google",
|
|
41
|
+
"product": "Chromium Mojo",
|
|
42
|
+
"vulnerabilityName": "Google Chromium Mojo Sandbox Escape Vulnerability",
|
|
43
|
+
"dateAdded": "2025-03-27",
|
|
44
|
+
"shortDescription": "Google Chromium Mojo on Windows contains a sandbox escape vulnerability caused by a logic error, which results from an incorrect handle being provided in unspecified circumstances. This vulnerability could affect multiple web browsers that utilize Chromium, including, but not limited to, Google Chrome, Microsoft Edge, and Opera.",
|
|
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-04-17",
|
|
47
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
48
|
+
"notes": "https:\/\/chromereleases.googleblog.com\/2025\/03\/stable-channel-update-for-desktop_25.html ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-2783",
|
|
49
|
+
"cwes": []
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"cveID": "CVE-2019-9875",
|
|
53
|
+
"vendorProject": "Sitecore",
|
|
54
|
+
"product": "CMS and Experience Platform (XP)",
|
|
55
|
+
"vulnerabilityName": "Sitecore CMS and Experience Platform (XP) Deserialization Vulnerability",
|
|
56
|
+
"dateAdded": "2025-03-26",
|
|
57
|
+
"shortDescription": "Sitecore CMS and Experience Platform (XP) contain a deserialization vulnerability in the Sitecore.Security.AntiCSRF module that allows an authenticated attacker to execute arbitrary code by sending a serialized .NET object in the HTTP POST parameter __CSRFTOKEN.",
|
|
58
|
+
"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.",
|
|
59
|
+
"dueDate": "2025-04-16",
|
|
60
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
61
|
+
"notes": "https:\/\/support.sitecore.com\/kb?id=kb_article_view&sysparm_article=KB0038556 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-9875",
|
|
62
|
+
"cwes": [
|
|
63
|
+
"CWE-502"
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
"cveID": "CVE-2019-9874",
|
|
68
|
+
"vendorProject": "Sitecore",
|
|
69
|
+
"product": "CMS and Experience Platform (XP)",
|
|
70
|
+
"vulnerabilityName": "Sitecore CMS and Experience Platform (XP) Deserialization Vulnerability",
|
|
71
|
+
"dateAdded": "2025-03-26",
|
|
72
|
+
"shortDescription": "Sitecore CMS and Experience Platform (XP) contain a deserialization vulnerability in the Sitecore.Security.AntiCSRF module that allows an unauthenticated attacker to execute arbitrary code by sending a serialized .NET object in the HTTP POST parameter __CSRFTOKEN.",
|
|
73
|
+
"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.",
|
|
74
|
+
"dueDate": "2025-04-16",
|
|
75
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
76
|
+
"notes": "https:\/\/support.sitecore.com\/kb?id=kb_article_view&sysparm_article=KB0334035 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2019-9874",
|
|
77
|
+
"cwes": [
|
|
78
|
+
"CWE-502"
|
|
79
|
+
]
|
|
80
|
+
},
|
|
7
81
|
{
|
|
8
82
|
"cveID": "CVE-2025-30154",
|
|
9
83
|
"vendorProject": "reviewdog",
|
|
@@ -11,10 +85,10 @@
|
|
|
11
85
|
"vulnerabilityName": "reviewdog\/action-setup GitHub Action Embedded Malicious Code Vulnerability",
|
|
12
86
|
"dateAdded": "2025-03-24",
|
|
13
87
|
"shortDescription": "reviewdog action-setup GitHub Action contains an embedded malicious code vulnerability that dumps exposed secrets to Github Actions Workflow Logs.",
|
|
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.",
|
|
88
|
+
"requiredAction": "Apply mitigations as set forth in the CISA instructions linked below. 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
89
|
"dueDate": "2025-04-14",
|
|
16
90
|
"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:\/\/github.com\/reviewdog\/reviewdog\/security\/advisories\/GHSA-qmg3-hpqr-gqvc ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-30154",
|
|
91
|
+
"notes": "This vulnerability affects a common open-source project, third-party library, or a protocol used by different products. For more information, please see: CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/03\/18\/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction ; Additional References: https:\/\/github.com\/reviewdog\/reviewdog\/security\/advisories\/GHSA-qmg3-hpqr-gqvc ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-30154",
|
|
18
92
|
"cwes": [
|
|
19
93
|
"CWE-506"
|
|
20
94
|
]
|
|
@@ -71,10 +145,10 @@
|
|
|
71
145
|
"vulnerabilityName": "tj-actions\/changed-files GitHub Action Embedded Malicious Code Vulnerability",
|
|
72
146
|
"dateAdded": "2025-03-18",
|
|
73
147
|
"shortDescription": "tj-actions\/changed-files GitHub Action contains an embedded malicious code vulnerability that allows a remote attacker to discover secrets by reading Github Actions Workflow Logs. These secrets may include, but are not limited to, valid AWS access keys, GitHub personal access tokens (PATs), npm tokens, and private RSA keys.",
|
|
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.",
|
|
148
|
+
"requiredAction": "Apply mitigations as set forth in the CISA instructions linked below. 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
149
|
"dueDate": "2025-04-08",
|
|
76
150
|
"knownRansomwareCampaignUse": "Unknown",
|
|
77
|
-
"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:\/\/github.com\/tj-actions\/changed-files\/blob\/45fb12d7a8bedb4da42342e52fe054c6c2c3fd73\/README.md?plain=1#L20-L28 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-30066",
|
|
151
|
+
"notes": "This vulnerability affects a common open-source project, third-party library, or a protocol used by different products. For more information, please see: CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/03\/18\/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction ; Additional References: https:\/\/github.com\/tj-actions\/changed-files\/blob\/45fb12d7a8bedb4da42342e52fe054c6c2c3fd73\/README.md?plain=1#L20-L28 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-30066",
|
|
78
152
|
"cwes": [
|
|
79
153
|
"CWE-506"
|
|
80
154
|
]
|
|
@@ -209,7 +283,7 @@
|
|
|
209
283
|
"shortDescription": "Microsoft Windows Management Console (MMC) contains an improper neutralization vulnerability that allows an unauthorized attacker to bypass a security feature locally.",
|
|
210
284
|
"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.",
|
|
211
285
|
"dueDate": "2025-04-01",
|
|
212
|
-
"knownRansomwareCampaignUse": "
|
|
286
|
+
"knownRansomwareCampaignUse": "Known",
|
|
213
287
|
"notes": "https:\/\/msrc.microsoft.com\/update-guide\/en-US\/vulnerability\/CVE-2025-26633 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-26633",
|
|
214
288
|
"cwes": [
|
|
215
289
|
"CWE-707"
|
|
@@ -2964,7 +3038,7 @@
|
|
|
2964
3038
|
{
|
|
2965
3039
|
"cveID": "CVE-2024-4761",
|
|
2966
3040
|
"vendorProject": "Google",
|
|
2967
|
-
"product": "Chromium
|
|
3041
|
+
"product": "Chromium V8",
|
|
2968
3042
|
"vulnerabilityName": "Google Chromium V8 Out-of-Bounds Memory Write Vulnerability",
|
|
2969
3043
|
"dateAdded": "2024-05-16",
|
|
2970
3044
|
"shortDescription": "Google Chromium V8 Engine contains an unspecified out-of-bounds memory write vulnerability 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. ",
|
|
@@ -7689,7 +7763,7 @@
|
|
|
7689
7763
|
"shortDescription": "Synacor Zimbra Collaboration Suite (ZCS) contains flaw in the mboximport functionality, allowing an authenticated attacker to upload arbitrary files to perform remote code execution. This vulnerability was chained with CVE-2022-37042 which allows for unauthenticated remote code execution.",
|
|
7690
7764
|
"requiredAction": "Apply updates per vendor instructions.",
|
|
7691
7765
|
"dueDate": "2022-09-01",
|
|
7692
|
-
"knownRansomwareCampaignUse": "
|
|
7766
|
+
"knownRansomwareCampaignUse": "Known",
|
|
7693
7767
|
"notes": "https:\/\/blog.zimbra.com\/2022\/08\/authentication-bypass-in-mailboximportservlet-vulnerability\/; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-27925",
|
|
7694
7768
|
"cwes": [
|
|
7695
7769
|
"CWE-22"
|
|
@@ -7704,7 +7778,7 @@
|
|
|
7704
7778
|
"shortDescription": "Synacor Zimbra Collaboration Suite (ZCS) contains an authentication bypass vulnerability in MailboxImportServlet. This vulnerability was chained with CVE-2022-27925 which allows for unauthenticated remote code execution.",
|
|
7705
7779
|
"requiredAction": "Apply updates per vendor instructions.",
|
|
7706
7780
|
"dueDate": "2022-09-01",
|
|
7707
|
-
"knownRansomwareCampaignUse": "
|
|
7781
|
+
"knownRansomwareCampaignUse": "Known",
|
|
7708
7782
|
"notes": "https:\/\/blog.zimbra.com\/2022\/08\/authentication-bypass-in-mailboximportservlet-vulnerability\/; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2022-37042",
|
|
7709
7783
|
"cwes": [
|
|
7710
7784
|
"CWE-23"
|
|
@@ -14619,7 +14693,7 @@
|
|
|
14619
14693
|
"cveID": "CVE-2020-6572",
|
|
14620
14694
|
"vendorProject": "Google",
|
|
14621
14695
|
"product": "Chrome Media",
|
|
14622
|
-
"vulnerabilityName": "Google Chrome Media
|
|
14696
|
+
"vulnerabilityName": "Google Chrome Media Use-After-Free Vulnerability",
|
|
14623
14697
|
"dateAdded": "2022-01-10",
|
|
14624
14698
|
"shortDescription": "Google Chrome Media contains a use-after-free vulnerability that allows a remote attacker to execute code via a crafted HTML page.",
|
|
14625
14699
|
"requiredAction": "Apply updates per vendor instructions.",
|
|
@@ -82,7 +82,7 @@ class FlatFileIntegration(ScannerIntegration):
|
|
|
82
82
|
"""
|
|
83
83
|
self.asset_identifier_field = asset_identifier_field
|
|
84
84
|
|
|
85
|
-
def fetch_assets(self, *args:
|
|
85
|
+
def fetch_assets(self, *args: Tuple, **kwargs: dict) -> Iterator["IntegrationAsset"]:
|
|
86
86
|
"""
|
|
87
87
|
Fetches assets from FlatFileImporter
|
|
88
88
|
|
|
@@ -220,16 +220,19 @@ class FlatFileImporter(ABC):
|
|
|
220
220
|
)
|
|
221
221
|
self.clean_up()
|
|
222
222
|
|
|
223
|
-
def parse_finding(self, vuln: Vulnerability) -> Optional["IntegrationFinding"]:
|
|
223
|
+
def parse_finding(self, vuln: Union[Vulnerability, "IntegrationFinding"]) -> Optional["IntegrationFinding"]:
|
|
224
224
|
"""
|
|
225
225
|
Parses a vulnerability object into an IntegrationFinding object
|
|
226
226
|
|
|
227
|
-
:param Vulnerability vuln: A vulnerability object
|
|
227
|
+
:param Union[Vulnerability, IntegrationFinding] vuln: A vulnerability object
|
|
228
228
|
:return: The parsed IntegrationFinding or None if parsing fails
|
|
229
229
|
:rtype: Optional[IntegrationFinding]
|
|
230
230
|
"""
|
|
231
231
|
from regscale.integrations.scanner_integration import IntegrationFinding
|
|
232
232
|
|
|
233
|
+
if isinstance(vuln, IntegrationFinding):
|
|
234
|
+
return vuln
|
|
235
|
+
|
|
233
236
|
try:
|
|
234
237
|
asset_id = vuln.dns or vuln.ipAddress
|
|
235
238
|
if not asset_id:
|
|
@@ -237,9 +240,9 @@ class FlatFileImporter(ABC):
|
|
|
237
240
|
|
|
238
241
|
severity = self.finding_severity_map.get(vuln.severity.capitalize(), regscale_models.IssueSeverity.Low)
|
|
239
242
|
status = self.map_status_to_issue_status(vuln.status)
|
|
240
|
-
cve: Optional[str] = vuln
|
|
241
|
-
extract_vuln: Any = self.extract_ghsa_strings(vuln
|
|
242
|
-
plugin_name = vuln
|
|
243
|
+
cve: Optional[str] = getattr(vuln, "cve", "")
|
|
244
|
+
extract_vuln: Any = self.extract_ghsa_strings(getattr(vuln, "plugInName", ""))
|
|
245
|
+
plugin_name = getattr(vuln, "plugInName", getattr(vuln, "title", ""))
|
|
243
246
|
if not self.assert_valid_cve(cve):
|
|
244
247
|
if isinstance(extract_vuln, list):
|
|
245
248
|
cve = ", ".join(extract_vuln)
|
|
@@ -286,16 +289,19 @@ class FlatFileImporter(ABC):
|
|
|
286
289
|
self.attributes.logger.error("Error parsing Wiz finding: %s", str(e), exc_info=True)
|
|
287
290
|
return None
|
|
288
291
|
|
|
289
|
-
def parse_asset(self, asset: Asset) -> "IntegrationAsset":
|
|
292
|
+
def parse_asset(self, asset: Union[Asset, "IntegrationAsset"]) -> "IntegrationAsset":
|
|
290
293
|
"""
|
|
291
294
|
Converts Asset -> IntegrationAsset
|
|
292
295
|
|
|
293
|
-
:param Asset asset: The asset to parse
|
|
296
|
+
:param Union[Asset, IntegrationAsset] asset: The asset to parse
|
|
294
297
|
:return: The parsed IntegrationAsset
|
|
295
298
|
:rtype: IntegrationAsset
|
|
296
299
|
"""
|
|
297
300
|
from regscale.integrations.scanner_integration import IntegrationAsset
|
|
298
301
|
|
|
302
|
+
if isinstance(asset, IntegrationAsset):
|
|
303
|
+
return asset
|
|
304
|
+
|
|
299
305
|
return IntegrationAsset(
|
|
300
306
|
name=asset.name,
|
|
301
307
|
external_id=asset.otherTrackingNumber,
|
|
@@ -514,6 +520,8 @@ class FlatFileImporter(ABC):
|
|
|
514
520
|
"""
|
|
515
521
|
Process the assets in the data
|
|
516
522
|
"""
|
|
523
|
+
from regscale.integrations.scanner_integration import IntegrationAsset
|
|
524
|
+
|
|
517
525
|
# The passed function creates asset objects. Convert to IntegrationAsset here
|
|
518
526
|
if isinstance(self.file_data, list):
|
|
519
527
|
for dat in self.file_data:
|
|
@@ -523,6 +531,8 @@ class FlatFileImporter(ABC):
|
|
|
523
531
|
if isinstance(self.data["assets"], Iterator):
|
|
524
532
|
self.integration_assets = self.data["assets"]
|
|
525
533
|
return None
|
|
534
|
+
elif isinstance(self.data["assets"], IntegrationAsset):
|
|
535
|
+
self.data["assets"] = [self.data["assets"]]
|
|
526
536
|
self.integration_assets = (self.parse_asset(asset) for asset in self.data["assets"])
|
|
527
537
|
|
|
528
538
|
def process_asset_data(self, dat: Any, func: Callable) -> None:
|
|
@@ -712,6 +722,17 @@ class FlatFileImporter(ABC):
|
|
|
712
722
|
|
|
713
723
|
with create_progress_object() as vuln_progress:
|
|
714
724
|
vuln_task = vuln_progress.add_task("Processing vulnerabilities...", total=len(self.file_data))
|
|
725
|
+
try:
|
|
726
|
+
res = func(self.file_data)
|
|
727
|
+
if isinstance(res, list):
|
|
728
|
+
self.integration_findings = res
|
|
729
|
+
self.data["vulns"] = res
|
|
730
|
+
vuln_progress.update(vuln_task, completed=len(self.file_data))
|
|
731
|
+
return
|
|
732
|
+
except Exception as e:
|
|
733
|
+
self.attributes.logger.debug(
|
|
734
|
+
"Cannot process vulns as a whole, now iterating all data to parse vulns: %s", str(e)
|
|
735
|
+
)
|
|
715
736
|
for ix, dat in enumerate(self.file_data):
|
|
716
737
|
vuln = func(dat, index=ix)
|
|
717
738
|
if not vuln:
|