cartography 0.114.0__py3-none-any.whl → 0.116.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 cartography might be problematic. Click here for more details.
- cartography/_version.py +2 -2
- cartography/cli.py +2 -2
- cartography/client/core/tx.py +12 -1
- cartography/intel/aws/config.py +7 -3
- cartography/intel/aws/ecr.py +9 -9
- cartography/intel/aws/ecr_image_layers.py +664 -0
- cartography/intel/aws/identitycenter.py +240 -13
- cartography/intel/aws/lambda_function.py +69 -2
- cartography/intel/aws/organizations.py +3 -1
- cartography/intel/aws/permission_relationships.py +3 -1
- cartography/intel/aws/redshift.py +9 -4
- cartography/intel/aws/resources.py +2 -0
- cartography/intel/aws/route53.py +53 -3
- cartography/intel/aws/securityhub.py +3 -1
- cartography/intel/azure/__init__.py +16 -0
- cartography/intel/azure/logic_apps.py +101 -0
- cartography/intel/azure/resource_groups.py +82 -0
- cartography/intel/create_indexes.py +2 -1
- cartography/intel/dns.py +5 -2
- cartography/intel/gcp/dns.py +2 -1
- cartography/intel/github/repos.py +3 -6
- cartography/intel/gsuite/api.py +17 -4
- cartography/intel/okta/applications.py +9 -4
- cartography/intel/okta/awssaml.py +5 -2
- cartography/intel/okta/factors.py +3 -1
- cartography/intel/okta/groups.py +5 -2
- cartography/intel/okta/organization.py +3 -1
- cartography/intel/okta/origins.py +3 -1
- cartography/intel/okta/roles.py +5 -2
- cartography/intel/okta/users.py +3 -1
- cartography/models/aws/ecr/image.py +21 -0
- cartography/models/aws/ecr/image_layer.py +107 -0
- cartography/models/aws/identitycenter/awspermissionset.py +24 -1
- cartography/models/aws/identitycenter/awssogroup.py +70 -0
- cartography/models/aws/identitycenter/awsssouser.py +37 -1
- cartography/models/aws/lambda_function/lambda_function.py +2 -0
- cartography/models/azure/logic_apps.py +56 -0
- cartography/models/azure/resource_groups.py +52 -0
- cartography/models/entra/user.py +18 -0
- cartography/rules/README.md +1 -0
- cartography/rules/__init__.py +0 -0
- cartography/rules/cli.py +342 -0
- cartography/rules/data/__init__.py +0 -0
- cartography/rules/data/frameworks/__init__.py +12 -0
- cartography/rules/data/frameworks/mitre_attack/__init__.py +14 -0
- cartography/rules/data/frameworks/mitre_attack/requirements/__init__.py +0 -0
- cartography/rules/data/frameworks/mitre_attack/requirements/t1190_exploit_public_facing_application/__init__.py +135 -0
- cartography/rules/formatters.py +46 -0
- cartography/rules/runners.py +338 -0
- cartography/rules/spec/__init__.py +0 -0
- cartography/rules/spec/model.py +88 -0
- cartography/rules/spec/result.py +46 -0
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/METADATA +19 -4
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/RECORD +58 -38
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/entry_points.txt +1 -0
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/WHEEL +0 -0
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/licenses/LICENSE +0 -0
- {cartography-0.114.0.dist-info → cartography-0.116.0.dist-info}/top_level.txt +0 -0
cartography/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.
|
|
32
|
-
__version_tuple__ = version_tuple = (0,
|
|
31
|
+
__version__ = version = '0.116.0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 116, 0)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
cartography/cli.py
CHANGED
|
@@ -967,8 +967,8 @@ class CLI:
|
|
|
967
967
|
logger.warning("A Kandji base URI was provided but a token was not.")
|
|
968
968
|
config.kandji_token = None
|
|
969
969
|
else:
|
|
970
|
-
logger.warning("A Kandji base URI was not provided.")
|
|
971
970
|
config.kandji_base_uri = None
|
|
971
|
+
config.kandji_token = None
|
|
972
972
|
|
|
973
973
|
if config.statsd_enabled:
|
|
974
974
|
logger.debug(
|
|
@@ -1096,8 +1096,8 @@ class CLI:
|
|
|
1096
1096
|
logger.warning("A SnipeIT base URI was provided but a token was not.")
|
|
1097
1097
|
config.snipeit_token = None
|
|
1098
1098
|
else:
|
|
1099
|
-
logger.warning("A SnipeIT base URI was not provided.")
|
|
1100
1099
|
config.snipeit_base_uri = None
|
|
1100
|
+
config.snipeit_token = None
|
|
1101
1101
|
|
|
1102
1102
|
# Tailscale config
|
|
1103
1103
|
if config.tailscale_token_env_var:
|
cartography/client/core/tx.py
CHANGED
|
@@ -19,6 +19,17 @@ from cartography.util import batch
|
|
|
19
19
|
logger = logging.getLogger(__name__)
|
|
20
20
|
|
|
21
21
|
|
|
22
|
+
def run_write_query(
|
|
23
|
+
neo4j_session: neo4j.Session, query: str, **parameters: Any
|
|
24
|
+
) -> None:
|
|
25
|
+
"""Execute a write query inside a managed transaction."""
|
|
26
|
+
|
|
27
|
+
def _run_query_tx(tx: neo4j.Transaction) -> None:
|
|
28
|
+
tx.run(query, **parameters).consume()
|
|
29
|
+
|
|
30
|
+
neo4j_session.execute_write(_run_query_tx)
|
|
31
|
+
|
|
32
|
+
|
|
22
33
|
def read_list_of_values_tx(
|
|
23
34
|
tx: neo4j.Transaction,
|
|
24
35
|
query: str,
|
|
@@ -31,7 +42,7 @@ def read_list_of_values_tx(
|
|
|
31
42
|
Example usage:
|
|
32
43
|
query = "MATCH (a:TestNode) RETURN a.name ORDER BY a.name"
|
|
33
44
|
|
|
34
|
-
values = neo4j_session.
|
|
45
|
+
values = neo4j_session.execute_read(read_list_of_values_tx, query)
|
|
35
46
|
|
|
36
47
|
:param tx: A neo4j read transaction object
|
|
37
48
|
:param query: A neo4j query string that returns a list of single values. For example,
|
cartography/intel/aws/config.py
CHANGED
|
@@ -5,6 +5,7 @@ from typing import List
|
|
|
5
5
|
import boto3
|
|
6
6
|
import neo4j
|
|
7
7
|
|
|
8
|
+
from cartography.client.core.tx import run_write_query
|
|
8
9
|
from cartography.util import aws_handle_regions
|
|
9
10
|
from cartography.util import run_cleanup_job
|
|
10
11
|
from cartography.util import timeit
|
|
@@ -80,7 +81,8 @@ def load_configuration_recorders(
|
|
|
80
81
|
for recorder in data:
|
|
81
82
|
recorder["_id"] = f'{recorder["name"]}:{current_aws_account_id}:{region}'
|
|
82
83
|
|
|
83
|
-
|
|
84
|
+
run_write_query(
|
|
85
|
+
neo4j_session,
|
|
84
86
|
ingest_configuration_recorders,
|
|
85
87
|
Recorders=data,
|
|
86
88
|
Region=region,
|
|
@@ -120,7 +122,8 @@ def load_delivery_channels(
|
|
|
120
122
|
for channel in data:
|
|
121
123
|
channel["_id"] = f'{channel["name"]}:{current_aws_account_id}:{region}'
|
|
122
124
|
|
|
123
|
-
|
|
125
|
+
run_write_query(
|
|
126
|
+
neo4j_session,
|
|
124
127
|
ingest_delivery_channels,
|
|
125
128
|
Channels=data,
|
|
126
129
|
Region=region,
|
|
@@ -167,7 +170,8 @@ def load_config_rules(
|
|
|
167
170
|
for detail in rule["Source"]["SourceDetails"]:
|
|
168
171
|
details.append(f"{detail}")
|
|
169
172
|
rule["_source_details"] = details
|
|
170
|
-
|
|
173
|
+
run_write_query(
|
|
174
|
+
neo4j_session,
|
|
171
175
|
ingest_config_rules,
|
|
172
176
|
Rules=data,
|
|
173
177
|
Region=region,
|
cartography/intel/aws/ecr.py
CHANGED
|
@@ -57,15 +57,15 @@ def get_ecr_repository_images(
|
|
|
57
57
|
)
|
|
58
58
|
for response in describe_response:
|
|
59
59
|
image_details = response["imageDetails"]
|
|
60
|
-
|
|
61
|
-
(
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
for detail in image_details:
|
|
61
|
+
tags = detail.get("imageTags") or []
|
|
62
|
+
if tags:
|
|
63
|
+
for tag in tags:
|
|
64
|
+
image_detail = {**detail, "imageTag": tag}
|
|
65
|
+
image_detail.pop("imageTags", None)
|
|
66
|
+
ecr_repository_images.append(image_detail)
|
|
67
|
+
else:
|
|
68
|
+
ecr_repository_images.append({**detail})
|
|
69
69
|
return ecr_repository_images
|
|
70
70
|
|
|
71
71
|
|