regscale-cli 6.20.6.0__py3-none-any.whl → 6.20.8.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/_version.py +1 -1
- regscale/core/app/api.py +8 -1
- regscale/core/app/application.py +49 -3
- regscale/core/utils/date.py +16 -16
- regscale/integrations/commercial/aqua/aqua.py +1 -1
- regscale/integrations/commercial/aws/cli.py +1 -1
- regscale/integrations/commercial/defender.py +1 -1
- regscale/integrations/commercial/ecr.py +1 -1
- regscale/integrations/commercial/ibm.py +1 -1
- regscale/integrations/commercial/nexpose.py +1 -1
- regscale/integrations/commercial/prisma.py +1 -1
- regscale/integrations/commercial/qualys/__init__.py +157 -84
- regscale/integrations/commercial/qualys/containers.py +2 -1
- regscale/integrations/commercial/qualys/scanner.py +5 -3
- regscale/integrations/commercial/snyk.py +14 -4
- regscale/integrations/commercial/synqly/ticketing.py +23 -11
- regscale/integrations/commercial/veracode.py +15 -4
- regscale/integrations/commercial/xray.py +1 -1
- regscale/integrations/public/cisa.py +7 -1
- regscale/integrations/public/nist_catalog.py +8 -2
- regscale/integrations/scanner_integration.py +18 -36
- regscale/models/app_models/import_validater.py +5 -1
- regscale/models/app_models/mapping.py +3 -1
- regscale/models/integration_models/cisa_kev_data.json +139 -4
- regscale/models/integration_models/flat_file_importer/__init__.py +36 -22
- regscale/models/integration_models/qualys.py +24 -4
- regscale/models/integration_models/send_reminders.py +8 -2
- regscale/models/integration_models/synqly_models/capabilities.json +1 -1
- regscale/models/regscale_models/control_implementation.py +40 -0
- regscale/models/regscale_models/issue.py +7 -4
- regscale/models/regscale_models/parameter.py +3 -2
- regscale/models/regscale_models/ports_protocol.py +15 -5
- regscale/models/regscale_models/vulnerability.py +1 -1
- regscale/utils/graphql_client.py +3 -6
- regscale/utils/threading/threadhandler.py +12 -2
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/METADATA +13 -13
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/RECORD +43 -42
- tests/regscale/core/test_version_regscale.py +62 -0
- tests/regscale/test_init.py +2 -0
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/LICENSE +0 -0
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/WHEEL +0 -0
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/entry_points.txt +0 -0
- {regscale_cli-6.20.6.0.dist-info → regscale_cli-6.20.8.0.dist-info}/top_level.txt +0 -0
|
@@ -52,13 +52,6 @@ def sync_freshdesk(regscale_id: int, regscale_module: str, name: str, subject: s
|
|
|
52
52
|
@ticketing.command(name="sync_jira")
|
|
53
53
|
@regscale_id()
|
|
54
54
|
@regscale_module()
|
|
55
|
-
@click.option(
|
|
56
|
-
"--issue_type",
|
|
57
|
-
type=click.STRING,
|
|
58
|
-
help="jira issue type",
|
|
59
|
-
required=True,
|
|
60
|
-
prompt="jira issue type",
|
|
61
|
-
)
|
|
62
55
|
@click.option(
|
|
63
56
|
"--project",
|
|
64
57
|
type=click.STRING,
|
|
@@ -66,6 +59,12 @@ def sync_freshdesk(regscale_id: int, regscale_module: str, name: str, subject: s
|
|
|
66
59
|
required=True,
|
|
67
60
|
prompt="jira project",
|
|
68
61
|
)
|
|
62
|
+
@click.option(
|
|
63
|
+
"--default_issue_type",
|
|
64
|
+
type=click.STRING,
|
|
65
|
+
help="Default Issue Type for the integration. If provided, the issue_type field becomes optional in ticket creation requests.",
|
|
66
|
+
required=False,
|
|
67
|
+
)
|
|
69
68
|
@click.option(
|
|
70
69
|
"--default_project",
|
|
71
70
|
type=click.STRING,
|
|
@@ -80,7 +79,12 @@ def sync_freshdesk(regscale_id: int, regscale_module: str, name: str, subject: s
|
|
|
80
79
|
default=True,
|
|
81
80
|
)
|
|
82
81
|
def sync_jira(
|
|
83
|
-
regscale_id: int,
|
|
82
|
+
regscale_id: int,
|
|
83
|
+
regscale_module: str,
|
|
84
|
+
project: str,
|
|
85
|
+
default_issue_type: str,
|
|
86
|
+
default_project: str,
|
|
87
|
+
sync_attachments: bool,
|
|
84
88
|
) -> None:
|
|
85
89
|
"""Sync Ticketing data between Jira and RegScale."""
|
|
86
90
|
from regscale.models.integration_models.synqly_models.connectors import Ticketing
|
|
@@ -89,8 +93,8 @@ def sync_jira(
|
|
|
89
93
|
ticketing_jira.run_sync(
|
|
90
94
|
regscale_id=regscale_id,
|
|
91
95
|
regscale_module=regscale_module,
|
|
92
|
-
issue_type=issue_type,
|
|
93
96
|
project=project,
|
|
97
|
+
default_issue_type=default_issue_type,
|
|
94
98
|
default_project=default_project,
|
|
95
99
|
sync_attachments=sync_attachments,
|
|
96
100
|
)
|
|
@@ -157,12 +161,20 @@ def sync_servicenow(regscale_id: int, regscale_module: str, issue_type: str, def
|
|
|
157
161
|
required=True,
|
|
158
162
|
prompt="servicenow_sir issue type",
|
|
159
163
|
)
|
|
160
|
-
|
|
164
|
+
@click.option(
|
|
165
|
+
"--default_project",
|
|
166
|
+
type=click.STRING,
|
|
167
|
+
help="Default Project for the integration. This maps to the custom table for tickets. This table should be derived from Security Incident table. Defaults to the security incident table if not specified.",
|
|
168
|
+
required=False,
|
|
169
|
+
)
|
|
170
|
+
def sync_servicenow_sir(regscale_id: int, regscale_module: str, issue_type: str, default_project: str) -> None:
|
|
161
171
|
"""Sync Ticketing data between Servicenow Sir and RegScale."""
|
|
162
172
|
from regscale.models.integration_models.synqly_models.connectors import Ticketing
|
|
163
173
|
|
|
164
174
|
ticketing_servicenow_sir = Ticketing("servicenow_sir")
|
|
165
|
-
ticketing_servicenow_sir.run_sync(
|
|
175
|
+
ticketing_servicenow_sir.run_sync(
|
|
176
|
+
regscale_id=regscale_id, regscale_module=regscale_module, issue_type=issue_type, default_project=default_project
|
|
177
|
+
)
|
|
166
178
|
|
|
167
179
|
|
|
168
180
|
@ticketing.command(name="sync_torq")
|
|
@@ -28,10 +28,12 @@ FlatFileImporter.show_mapping(
|
|
|
28
28
|
message="File path to the folder containing Veracode .xlsx files to process to RegScale.",
|
|
29
29
|
prompt="File path for Veracode files",
|
|
30
30
|
import_name="veracode",
|
|
31
|
+
support_component=True,
|
|
31
32
|
)
|
|
32
33
|
def import_veracode(
|
|
33
34
|
folder_path: PathLike[str],
|
|
34
35
|
regscale_ssp_id: int,
|
|
36
|
+
component_id: int,
|
|
35
37
|
scan_date: datetime,
|
|
36
38
|
mappings_path: Path,
|
|
37
39
|
disable_mapping: bool,
|
|
@@ -43,9 +45,15 @@ def import_veracode(
|
|
|
43
45
|
"""
|
|
44
46
|
Import scans, vulnerabilities and assets to RegScale from Veracode export files
|
|
45
47
|
"""
|
|
48
|
+
if not regscale_ssp_id and not component_id:
|
|
49
|
+
raise click.UsageError(
|
|
50
|
+
"You must provide either a --regscale_ssp_id or a --component_id to import Veracode scans."
|
|
51
|
+
)
|
|
52
|
+
|
|
46
53
|
import_veracode_data(
|
|
47
54
|
folder_path=folder_path,
|
|
48
|
-
|
|
55
|
+
object_id=component_id if component_id else regscale_ssp_id,
|
|
56
|
+
is_component=bool(component_id),
|
|
49
57
|
scan_date=scan_date,
|
|
50
58
|
mappings_path=mappings_path,
|
|
51
59
|
disable_mapping=disable_mapping,
|
|
@@ -58,7 +66,7 @@ def import_veracode(
|
|
|
58
66
|
|
|
59
67
|
def import_veracode_data(
|
|
60
68
|
folder_path: PathLike[str],
|
|
61
|
-
|
|
69
|
+
object_id: int,
|
|
62
70
|
scan_date: datetime,
|
|
63
71
|
mappings_path: Path,
|
|
64
72
|
s3_bucket: str,
|
|
@@ -66,11 +74,13 @@ def import_veracode_data(
|
|
|
66
74
|
aws_profile: str,
|
|
67
75
|
disable_mapping: Optional[bool] = False,
|
|
68
76
|
upload_file: Optional[bool] = True,
|
|
77
|
+
is_component: Optional[bool] = False,
|
|
69
78
|
) -> None:
|
|
70
79
|
"""Import scans, vulnerabilities and assets to RegScale from Veracode export files"
|
|
71
80
|
|
|
72
81
|
:param os.PathLike[str] folder_path: Path to the folder containing Veracode files
|
|
73
|
-
:param int
|
|
82
|
+
:param int object_id: RegScale SSP ID or Component ID
|
|
83
|
+
:param bool is_component: Whether object_id is a component or not
|
|
74
84
|
:param datetime scan_date: Scan date
|
|
75
85
|
:param os.PathLike[str] mappings_path: Path to the header mapping file
|
|
76
86
|
:param str s3_bucket: S3 bucket to download the files from
|
|
@@ -85,7 +95,7 @@ def import_veracode_data(
|
|
|
85
95
|
import_name="Veracode",
|
|
86
96
|
file_types=[".xml", ".xlsx", ".json"],
|
|
87
97
|
folder_path=folder_path,
|
|
88
|
-
|
|
98
|
+
object_id=object_id,
|
|
89
99
|
scan_date=scan_date,
|
|
90
100
|
mappings_path=mappings_path,
|
|
91
101
|
disable_mapping=disable_mapping,
|
|
@@ -93,4 +103,5 @@ def import_veracode_data(
|
|
|
93
103
|
s3_prefix=s3_prefix,
|
|
94
104
|
aws_profile=aws_profile,
|
|
95
105
|
upload_file=upload_file,
|
|
106
|
+
is_component=is_component,
|
|
96
107
|
)
|
|
@@ -171,7 +171,13 @@ def parse_html(page_url: str, app: Application) -> list:
|
|
|
171
171
|
control["items"] = len(articles)
|
|
172
172
|
control["page"] += 1
|
|
173
173
|
# check if max threads <= 20 to prevent IP ban from CISA
|
|
174
|
-
|
|
174
|
+
max_threads_config = app.config.get("maxThreads", 100)
|
|
175
|
+
if not isinstance(max_threads_config, int):
|
|
176
|
+
try:
|
|
177
|
+
max_threads_config = int(max_threads_config)
|
|
178
|
+
except (ValueError, TypeError):
|
|
179
|
+
max_threads_config = 100
|
|
180
|
+
max_threads = min(max_threads_config, 20)
|
|
175
181
|
with ThreadPoolExecutor(max_workers=max_threads) as executor:
|
|
176
182
|
futures = []
|
|
177
183
|
for link in control["links"]:
|
|
@@ -67,8 +67,14 @@ def sort_controls_by_id(catalog_id: int) -> None:
|
|
|
67
67
|
api = Api()
|
|
68
68
|
config = app.config
|
|
69
69
|
# update api limits depending on maxThreads
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
max_threads = config.get("maxThreads", 100)
|
|
71
|
+
if not isinstance(max_threads, int):
|
|
72
|
+
try:
|
|
73
|
+
max_threads = int(max_threads)
|
|
74
|
+
except (ValueError, TypeError):
|
|
75
|
+
max_threads = 100
|
|
76
|
+
api.pool_connections = max(api.pool_connections, max_threads)
|
|
77
|
+
api.pool_maxsize = max(api.pool_maxsize, max_threads)
|
|
72
78
|
security_control_count: int = 0
|
|
73
79
|
|
|
74
80
|
# get all controls by catalog
|
|
@@ -638,6 +638,9 @@ class ScannerIntegration(ABC):
|
|
|
638
638
|
self.is_component: bool = is_component
|
|
639
639
|
if self.is_component:
|
|
640
640
|
self.component = regscale_models.Component.get_object(self.plan_id)
|
|
641
|
+
self.parent_module: str = regscale_models.Component.get_module_string()
|
|
642
|
+
else:
|
|
643
|
+
self.parent_module: str = regscale_models.SecurityPlan.get_module_string()
|
|
641
644
|
self.components: ThreadSafeList[Any] = ThreadSafeList()
|
|
642
645
|
self.asset_map_by_identifier: ThreadSafeDict[str, regscale_models.Asset] = ThreadSafeDict()
|
|
643
646
|
self.software_to_create: ThreadSafeList[regscale_models.SoftwareInventory] = ThreadSafeList()
|
|
@@ -655,16 +658,17 @@ class ScannerIntegration(ABC):
|
|
|
655
658
|
self.implementation_option_map: ThreadSafeDict[str, int] = ThreadSafeDict()
|
|
656
659
|
self.control_implementation_map: ThreadSafeDict[int, regscale_models.ControlImplementation] = ThreadSafeDict()
|
|
657
660
|
|
|
658
|
-
self.control_implementation_id_map = regscale_models.ControlImplementation.
|
|
659
|
-
plan_id=
|
|
661
|
+
self.control_implementation_id_map = regscale_models.ControlImplementation.get_control_label_map_by_parent(
|
|
662
|
+
parent_id=self.plan_id, parent_module=self.parent_module
|
|
660
663
|
)
|
|
661
664
|
self.control_map = {v: k for k, v in self.control_implementation_id_map.items()}
|
|
662
665
|
self.existing_issue_ids_by_implementation_map = regscale_models.Issue.get_open_issues_ids_by_implementation_id(
|
|
663
|
-
plan_id=plan_id
|
|
666
|
+
plan_id=self.plan_id, is_component=self.is_component
|
|
664
667
|
) # GraphQL Call
|
|
665
|
-
self.control_id_to_implementation_map = regscale_models.ControlImplementation.
|
|
666
|
-
plan_id=
|
|
668
|
+
self.control_id_to_implementation_map = regscale_models.ControlImplementation.get_control_id_map_by_parent(
|
|
669
|
+
parent_id=self.plan_id, parent_module=self.parent_module
|
|
667
670
|
)
|
|
671
|
+
|
|
668
672
|
self.cci_to_control_map: ThreadSafeDict[str, set[int]] = ThreadSafeDict()
|
|
669
673
|
self._no_ccis: bool = False
|
|
670
674
|
self.cci_to_control_map_lock: threading.Lock = threading.Lock()
|
|
@@ -800,11 +804,7 @@ class ScannerIntegration(ABC):
|
|
|
800
804
|
getattr(x, self.asset_identifier_field): x
|
|
801
805
|
for x in regscale_models.Asset.get_all_by_parent(
|
|
802
806
|
parent_id=self.plan_id,
|
|
803
|
-
parent_module=
|
|
804
|
-
regscale_models.Component.get_module_string()
|
|
805
|
-
if self.is_component
|
|
806
|
-
else regscale_models.SecurityPlan.get_module_string()
|
|
807
|
-
),
|
|
807
|
+
parent_module=self.parent_module,
|
|
808
808
|
)
|
|
809
809
|
}
|
|
810
810
|
|
|
@@ -817,7 +817,7 @@ class ScannerIntegration(ABC):
|
|
|
817
817
|
"""
|
|
818
818
|
all_issues = regscale_models.Issue.get_all_by_parent(
|
|
819
819
|
parent_id=self.plan_id,
|
|
820
|
-
parent_module=
|
|
820
|
+
parent_module=self.parent_module,
|
|
821
821
|
)
|
|
822
822
|
return {issue.integrationFindingId: issue for issue in all_issues}
|
|
823
823
|
|
|
@@ -1094,11 +1094,7 @@ class ScannerIntegration(ABC):
|
|
|
1094
1094
|
otherTrackingNumber=asset.other_tracking_number or asset.identifier,
|
|
1095
1095
|
assetOwnerId=asset.asset_owner_id or "Unknown",
|
|
1096
1096
|
parentId=component.id if component else self.plan_id,
|
|
1097
|
-
parentModule=
|
|
1098
|
-
regscale_models.Component.get_module_string()
|
|
1099
|
-
if component or self.is_component
|
|
1100
|
-
else regscale_models.SecurityPlan.get_module_string()
|
|
1101
|
-
),
|
|
1097
|
+
parentModule=self.parent_module,
|
|
1102
1098
|
assetType=asset.asset_type,
|
|
1103
1099
|
dateLastUpdated=asset.date_last_updated or get_current_datetime(),
|
|
1104
1100
|
status=asset.status,
|
|
@@ -1324,9 +1320,7 @@ class ScannerIntegration(ABC):
|
|
|
1324
1320
|
|
|
1325
1321
|
:rtype: None
|
|
1326
1322
|
"""
|
|
1327
|
-
regscale_models.Asset.get_all_by_parent(
|
|
1328
|
-
parent_id=self.plan_id, parent_module=regscale_models.SecurityPlan.get_module_string()
|
|
1329
|
-
)
|
|
1323
|
+
regscale_models.Asset.get_all_by_parent(parent_id=self.plan_id, parent_module=self.parent_module)
|
|
1330
1324
|
|
|
1331
1325
|
def _create_process_function(self, loading_assets: TaskID) -> Callable[[IntegrationAsset], bool]:
|
|
1332
1326
|
"""
|
|
@@ -1600,11 +1594,7 @@ class ScannerIntegration(ABC):
|
|
|
1600
1594
|
|
|
1601
1595
|
# Update all fields
|
|
1602
1596
|
issue.parentId = self.plan_id
|
|
1603
|
-
issue.parentModule =
|
|
1604
|
-
regscale_models.Component.get_module_string()
|
|
1605
|
-
if self.is_component
|
|
1606
|
-
else regscale_models.SecurityPlan.get_module_string()
|
|
1607
|
-
)
|
|
1597
|
+
issue.parentModule = self.parent_module
|
|
1608
1598
|
issue.vulnerabilityId = finding.vulnerability_id
|
|
1609
1599
|
issue.title = issue_title
|
|
1610
1600
|
issue.dateCreated = finding.date_created
|
|
@@ -2159,7 +2149,7 @@ class ScannerIntegration(ABC):
|
|
|
2159
2149
|
# Get all existing POAM IDs and find the maximum
|
|
2160
2150
|
issues: List[regscale_models.Issue] = regscale_models.Issue.get_all_by_parent(
|
|
2161
2151
|
parent_id=self.plan_id,
|
|
2162
|
-
parent_module=
|
|
2152
|
+
parent_module=self.parent_module,
|
|
2163
2153
|
)
|
|
2164
2154
|
self._max_poam_id = max(
|
|
2165
2155
|
(
|
|
@@ -2184,11 +2174,7 @@ class ScannerIntegration(ABC):
|
|
|
2184
2174
|
"""
|
|
2185
2175
|
scan_history = regscale_models.ScanHistory(
|
|
2186
2176
|
parentId=self.plan_id,
|
|
2187
|
-
parentModule=
|
|
2188
|
-
regscale_models.Component.get_module_string()
|
|
2189
|
-
if self.is_component
|
|
2190
|
-
else regscale_models.SecurityPlan.get_module_string()
|
|
2191
|
-
),
|
|
2177
|
+
parentModule=self.parent_module,
|
|
2192
2178
|
scanningTool=self.title,
|
|
2193
2179
|
scanDate=self.scan_date if self.scan_date else get_current_datetime(),
|
|
2194
2180
|
createdById=self.assessor_id,
|
|
@@ -2309,11 +2295,7 @@ class ScannerIntegration(ABC):
|
|
|
2309
2295
|
description=finding.description,
|
|
2310
2296
|
dateLastUpdated=finding.date_last_updated,
|
|
2311
2297
|
parentId=self.plan_id,
|
|
2312
|
-
parentModule=
|
|
2313
|
-
regscale_models.Component.get_module_string()
|
|
2314
|
-
if self.is_component
|
|
2315
|
-
else regscale_models.SecurityPlan.get_module_string()
|
|
2316
|
-
),
|
|
2298
|
+
parentModule=self.parent_module,
|
|
2317
2299
|
dns=asset.fqdn or "unknown",
|
|
2318
2300
|
status=regscale_models.VulnerabilityStatus.Open,
|
|
2319
2301
|
ipAddress=finding.ip_address or asset.ipAddress or "",
|
|
@@ -2424,7 +2406,7 @@ class ScannerIntegration(ABC):
|
|
|
2424
2406
|
|
|
2425
2407
|
# Get all vulnerabilities for this security plan
|
|
2426
2408
|
all_vulnerabilities: list[regscale_models.Vulnerability] = regscale_models.Vulnerability.get_all_by_parent(
|
|
2427
|
-
parent_id=self.plan_id, parent_module=
|
|
2409
|
+
parent_id=self.plan_id, parent_module=self.parent_module
|
|
2428
2410
|
)
|
|
2429
2411
|
|
|
2430
2412
|
# Pre-filter vulnerabilities that are not in current set
|
|
@@ -133,9 +133,13 @@ class ImportValidater:
|
|
|
133
133
|
:param Union[list, pd.Index] headers: List of headers from the file
|
|
134
134
|
"""
|
|
135
135
|
import re
|
|
136
|
+
from pandas import Index
|
|
136
137
|
|
|
137
138
|
from regscale.models import Mapping
|
|
138
139
|
|
|
140
|
+
if isinstance(headers, Index):
|
|
141
|
+
headers = [str(header) for header in headers] # Convert pd.Index to list of strings
|
|
142
|
+
|
|
139
143
|
if not self.ignore_unnamed and any(re.search(r"unnamed", header, re.IGNORECASE) for header in headers): # type: ignore
|
|
140
144
|
raise ValidationException(
|
|
141
145
|
f"Unable to parse headers from the file. Please ensure the headers are named in {self.file_path}"
|
|
@@ -227,7 +231,7 @@ class ImportValidater:
|
|
|
227
231
|
elif self.worksheet_name:
|
|
228
232
|
df = pandas.read_excel(file_path, sheet_name=self.worksheet_name)
|
|
229
233
|
elif self.skip_rows:
|
|
230
|
-
df = pandas.read_excel(file_path, skiprows=self.skip_rows)
|
|
234
|
+
df = pandas.read_excel(file_path, skiprows=self.skip_rows - 1)
|
|
231
235
|
else:
|
|
232
236
|
df = pandas.read_excel(file_path)
|
|
233
237
|
except Exception as e:
|
|
@@ -121,8 +121,10 @@ class Mapping(BaseModel):
|
|
|
121
121
|
mapping = values.data.get("mapping")
|
|
122
122
|
if mapping is not None and expected_field_names is not None:
|
|
123
123
|
if missing_fields := [field for field in expected_field_names if field not in mapping]:
|
|
124
|
+
# Get file_path_for_prompt from values instead of cls
|
|
125
|
+
file_path = values.data.get("file_path_for_prompt")
|
|
124
126
|
for field in missing_fields:
|
|
125
|
-
cls._prompt_for_field(field, mapping,
|
|
127
|
+
cls._prompt_for_field(field, mapping, file_path)
|
|
126
128
|
return expected_field_names
|
|
127
129
|
|
|
128
130
|
@field_validator("expected_field_names")
|
|
@@ -1,9 +1,144 @@
|
|
|
1
1
|
{
|
|
2
2
|
"title": "CISA Catalog of Known Exploited Vulnerabilities",
|
|
3
|
-
"catalogVersion": "2025.07.
|
|
4
|
-
"dateReleased": "2025-07-
|
|
5
|
-
"count":
|
|
3
|
+
"catalogVersion": "2025.07.28",
|
|
4
|
+
"dateReleased": "2025-07-28T14:00:14.6746Z",
|
|
5
|
+
"count": 1391,
|
|
6
6
|
"vulnerabilities": [
|
|
7
|
+
{
|
|
8
|
+
"cveID": "CVE-2023-2533",
|
|
9
|
+
"vendorProject": "PaperCut",
|
|
10
|
+
"product": "NG\/MF",
|
|
11
|
+
"vulnerabilityName": "PaperCut NG\/MF Cross-Site Request Forgery (CSRF) Vulnerability",
|
|
12
|
+
"dateAdded": "2025-07-28",
|
|
13
|
+
"shortDescription": "PaperCut NG\/MF contains a cross-site request forgery (CSRF) vulnerability, which, under specific conditions, could potentially enable an attacker to alter security settings or execute arbitrary code. ",
|
|
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-08-18",
|
|
16
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
17
|
+
"notes": "https:\/\/www.papercut.com\/kb\/Main\/SecurityBulletinJune2023 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2023-2533",
|
|
18
|
+
"cwes": [
|
|
19
|
+
"CWE-352"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"cveID": "CVE-2025-20337",
|
|
24
|
+
"vendorProject": "Cisco",
|
|
25
|
+
"product": "Identity Services Engine",
|
|
26
|
+
"vulnerabilityName": "Cisco Identity Services Engine Injection Vulnerability",
|
|
27
|
+
"dateAdded": "2025-07-28",
|
|
28
|
+
"shortDescription": "Cisco Identity Services Engine contains an injection vulnerability in a specific API of Cisco ISE and Cisco ISE-PIC due to insufficient validation of user-supplied input allowing an attacker to exploit this vulnerability by submitting a crafted API request. Successful exploitation could allow an attacker to perform remote code execution and obtaining root privileges on an affected device.",
|
|
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-18",
|
|
31
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
32
|
+
"notes": "https:\/\/sec.cloudapps.cisco.com\/security\/center\/content\/CiscoSecurityAdvisory\/cisco-sa-ise-unauth-rce-ZAd2GnJ6 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-20337",
|
|
33
|
+
"cwes": [
|
|
34
|
+
"CWE-74"
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"cveID": "CVE-2025-20281",
|
|
39
|
+
"vendorProject": "Cisco",
|
|
40
|
+
"product": "Identity Services Engine",
|
|
41
|
+
"vulnerabilityName": "Cisco Identity Services Engine Injection Vulnerability",
|
|
42
|
+
"dateAdded": "2025-07-28",
|
|
43
|
+
"shortDescription": "Cisco Identity Services Engine contains an injection vulnerability in a specific API of Cisco ISE and Cisco ISE-PIC due to insufficient validation of user-supplied input allowing an attacker to exploit this vulnerability by submitting a crafted API request. Successful exploitation could allow an attacker to perform remote code execution and obtaining root privileges on an affected device.",
|
|
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-18",
|
|
46
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
47
|
+
"notes": "https:\/\/sec.cloudapps.cisco.com\/security\/center\/content\/CiscoSecurityAdvisory\/cisco-sa-ise-unauth-rce-ZAd2GnJ6 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-20281",
|
|
48
|
+
"cwes": [
|
|
49
|
+
"CWE-74"
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"cveID": "CVE-2025-2775",
|
|
54
|
+
"vendorProject": "SysAid",
|
|
55
|
+
"product": "SysAid On-Prem",
|
|
56
|
+
"vulnerabilityName": "SysAid On-Prem Improper Restriction of XML External Entity Reference Vulnerability",
|
|
57
|
+
"dateAdded": "2025-07-22",
|
|
58
|
+
"shortDescription": "SysAid On-Prem contains an improper restriction of XML external entity reference vulnerability in the Checkin processing functionality, allowing for administrator account takeover and file read primitives.",
|
|
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-08-12",
|
|
61
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
62
|
+
"notes": "https:\/\/documentation.sysaid.com\/docs\/24-40-60 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-2775",
|
|
63
|
+
"cwes": [
|
|
64
|
+
"CWE-611"
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"cveID": "CVE-2025-2776",
|
|
69
|
+
"vendorProject": "SysAid",
|
|
70
|
+
"product": "SysAid On-Prem",
|
|
71
|
+
"vulnerabilityName": "SysAid On-Prem Improper Restriction of XML External Entity Reference Vulnerability",
|
|
72
|
+
"dateAdded": "2025-07-22",
|
|
73
|
+
"shortDescription": "SysAid On-Prem contains an improper restriction of XML external entity reference vulnerability in the Server URL processing functionality, allowing for administrator account takeover and file read primitives.",
|
|
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-08-12",
|
|
76
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
77
|
+
"notes": "https:\/\/documentation.sysaid.com\/docs\/24-40-60 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-2776",
|
|
78
|
+
"cwes": [
|
|
79
|
+
"CWE-611"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"cveID": "CVE-2025-6558",
|
|
84
|
+
"vendorProject": "Google",
|
|
85
|
+
"product": "Chromium",
|
|
86
|
+
"vulnerabilityName": "Google Chromium ANGLE and GPU Improper Input Validation Vulnerability",
|
|
87
|
+
"dateAdded": "2025-07-22",
|
|
88
|
+
"shortDescription": "Google Chromium contains an improper input validation vulnerability in ANGLE and GPU. This vulnerability could allow a remote attacker to potentially perform a sandbox escape 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.",
|
|
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-08-12",
|
|
91
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
92
|
+
"notes": "https:\/\/chromereleases.googleblog.com\/2025\/07\/stable-channel-update-for-desktop_15.html ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-6558",
|
|
93
|
+
"cwes": [
|
|
94
|
+
"CWE-20"
|
|
95
|
+
]
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"cveID": "CVE-2025-54309",
|
|
99
|
+
"vendorProject": "CrushFTP",
|
|
100
|
+
"product": "CrushFTP",
|
|
101
|
+
"vulnerabilityName": " CrushFTP Unprotected Alternate Channel Vulnerability",
|
|
102
|
+
"dateAdded": "2025-07-22",
|
|
103
|
+
"shortDescription": "CrushFTP contains an unprotected alternate channel vulnerability. When the DMZ proxy feature is not used, mishandles AS2 validation and consequently allows remote attackers to obtain admin access via HTTPS.",
|
|
104
|
+
"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.",
|
|
105
|
+
"dueDate": "2025-08-12",
|
|
106
|
+
"knownRansomwareCampaignUse": "Unknown",
|
|
107
|
+
"notes": "https:\/\/www.crushftp.com\/crush11wiki\/Wiki.jsp?page=CompromiseJuly2025 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-54309 ",
|
|
108
|
+
"cwes": [
|
|
109
|
+
"CWE-420"
|
|
110
|
+
]
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"cveID": "CVE-2025-49704",
|
|
114
|
+
"vendorProject": "Microsoft",
|
|
115
|
+
"product": "SharePoint",
|
|
116
|
+
"vulnerabilityName": "Microsoft SharePoint Code Injection Vulnerability",
|
|
117
|
+
"dateAdded": "2025-07-22",
|
|
118
|
+
"shortDescription": "Microsoft SharePoint contains a code injection vulnerability that could allow an authorized attacker to execute code over a network. This vulnerability could be chained with CVE-2025-49706. The update for CVE-2025-53770 includes more robust protections than the update for CVE-2025-49704.",
|
|
119
|
+
"requiredAction": "CISA recommends disconnecting public-facing versions of SharePoint Server that have reached their end-of-life (EOL) or end-of-service (EOS). For example, SharePoint Server 2013 and earlier versions are end-of-life and should be discontinued if still in use. For supported versions, please follow the mitigations according to CISA and vendor instructions. Adhere to the applicable BOD 22-01 guidance for cloud services or discontinue use of the product if mitigations are not available.",
|
|
120
|
+
"dueDate": "2025-07-23",
|
|
121
|
+
"knownRansomwareCampaignUse": "Known",
|
|
122
|
+
"notes": "CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/07\/20\/microsoft-releases-guidance-exploitation-sharepoint-vulnerability-cve-2025-53770; https:\/\/www.microsoft.com\/en-us\/security\/blog\/2025\/07\/22\/disrupting-active-exploitation-of-on-premises-sharepoint-vulnerabilities\/ ; https:\/\/msrc.microsoft.com\/update-guide\/vulnerability\/CVE-2025-49704 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-49704",
|
|
123
|
+
"cwes": [
|
|
124
|
+
"CWE-94"
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"cveID": "CVE-2025-49706",
|
|
129
|
+
"vendorProject": "Microsoft",
|
|
130
|
+
"product": "SharePoint",
|
|
131
|
+
"vulnerabilityName": "Microsoft SharePoint Improper Authentication Vulnerability",
|
|
132
|
+
"dateAdded": "2025-07-22",
|
|
133
|
+
"shortDescription": "Microsoft SharePoint contains an improper authentication vulnerability that allows an authorized attacker to perform spoofing over a network. Successfully exploitation could allow an attacker to view sensitive information and make some changes to disclosed information. This vulnerability could be chained with CVE-2025-49704. The update for CVE-2025-53771 includes more robust protections than the update for CVE-2025-49706.",
|
|
134
|
+
"requiredAction": "CISA recommends disconnecting public-facing versions of SharePoint Server that have reached their end-of-life (EOL) or end-of-service (EOS). For example, SharePoint Server 2013 and earlier versions are end-of-life and should be discontinued if still in use. For supported versions, please follow the mitigations according to CISA and vendor instructions. Adhere to the applicable BOD 22-01 guidance for cloud services or discontinue use of the product if mitigations are not available.",
|
|
135
|
+
"dueDate": "2025-07-23",
|
|
136
|
+
"knownRansomwareCampaignUse": "Known",
|
|
137
|
+
"notes": "CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/07\/20\/microsoft-releases-guidance-exploitation-sharepoint-vulnerability-cve-2025-53770 ; https:\/\/www.microsoft.com\/en-us\/security\/blog\/2025\/07\/22\/disrupting-active-exploitation-of-on-premises-sharepoint-vulnerabilities\/ ; https:\/\/msrc.microsoft.com\/update-guide\/vulnerability\/CVE-2025-49706 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-49706",
|
|
138
|
+
"cwes": [
|
|
139
|
+
"CWE-287"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
7
142
|
{
|
|
8
143
|
"cveID": "CVE-2025-53770",
|
|
9
144
|
"vendorProject": "Microsoft",
|
|
@@ -14,7 +149,7 @@
|
|
|
14
149
|
"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
150
|
"dueDate": "2025-07-21",
|
|
16
151
|
"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
|
|
152
|
+
"notes": "CISA Mitigation Instructions: https:\/\/www.cisa.gov\/news-events\/alerts\/2025\/07\/20\/microsoft-releases-guidance-exploitation-sharepoint-vulnerability-cve-2025-53770; https:\/\/www.microsoft.com\/en-us\/security\/blog\/2025\/07\/22\/disrupting-active-exploitation-of-on-premises-sharepoint-vulnerabilities\/ ; https:\/\/msrc.microsoft.com\/update-guide\/vulnerability\/CVE-2025-53770 ; https:\/\/nvd.nist.gov\/vuln\/detail\/CVE-2025-53770",
|
|
18
153
|
"cwes": [
|
|
19
154
|
"CWE-502"
|
|
20
155
|
]
|