regscale-cli 6.16.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of regscale-cli might be problematic. Click here for more details.

Files changed (481) hide show
  1. regscale/__init__.py +1 -0
  2. regscale/airflow/__init__.py +9 -0
  3. regscale/airflow/azure/__init__.py +9 -0
  4. regscale/airflow/azure/cli.py +89 -0
  5. regscale/airflow/azure/upload_dags.py +116 -0
  6. regscale/airflow/click_dags.py +127 -0
  7. regscale/airflow/click_mixins.py +82 -0
  8. regscale/airflow/config.py +25 -0
  9. regscale/airflow/factories/__init__.py +0 -0
  10. regscale/airflow/factories/connections.py +58 -0
  11. regscale/airflow/factories/workflows.py +78 -0
  12. regscale/airflow/hierarchy.py +88 -0
  13. regscale/airflow/operators/__init__.py +0 -0
  14. regscale/airflow/operators/click.py +36 -0
  15. regscale/airflow/sensors/__init__.py +0 -0
  16. regscale/airflow/sensors/sql.py +107 -0
  17. regscale/airflow/sessions/__init__.py +0 -0
  18. regscale/airflow/sessions/sql/__init__.py +3 -0
  19. regscale/airflow/sessions/sql/queries.py +64 -0
  20. regscale/airflow/sessions/sql/sql_server_queries.py +248 -0
  21. regscale/airflow/tasks/__init__.py +0 -0
  22. regscale/airflow/tasks/branches.py +22 -0
  23. regscale/airflow/tasks/cli.py +116 -0
  24. regscale/airflow/tasks/click.py +73 -0
  25. regscale/airflow/tasks/debugging.py +9 -0
  26. regscale/airflow/tasks/groups.py +116 -0
  27. regscale/airflow/tasks/init.py +60 -0
  28. regscale/airflow/tasks/states.py +47 -0
  29. regscale/airflow/tasks/workflows.py +36 -0
  30. regscale/ansible/__init__.py +9 -0
  31. regscale/core/__init__.py +0 -0
  32. regscale/core/app/__init__.py +3 -0
  33. regscale/core/app/api.py +571 -0
  34. regscale/core/app/application.py +665 -0
  35. regscale/core/app/internal/__init__.py +136 -0
  36. regscale/core/app/internal/admin_actions.py +230 -0
  37. regscale/core/app/internal/assessments_editor.py +873 -0
  38. regscale/core/app/internal/catalog.py +316 -0
  39. regscale/core/app/internal/comparison.py +459 -0
  40. regscale/core/app/internal/control_editor.py +571 -0
  41. regscale/core/app/internal/encrypt.py +79 -0
  42. regscale/core/app/internal/evidence.py +1240 -0
  43. regscale/core/app/internal/file_uploads.py +151 -0
  44. regscale/core/app/internal/healthcheck.py +66 -0
  45. regscale/core/app/internal/login.py +305 -0
  46. regscale/core/app/internal/migrations.py +240 -0
  47. regscale/core/app/internal/model_editor.py +1701 -0
  48. regscale/core/app/internal/poam_editor.py +632 -0
  49. regscale/core/app/internal/workflow.py +105 -0
  50. regscale/core/app/logz.py +74 -0
  51. regscale/core/app/utils/XMLIR.py +258 -0
  52. regscale/core/app/utils/__init__.py +0 -0
  53. regscale/core/app/utils/api_handler.py +358 -0
  54. regscale/core/app/utils/app_utils.py +1110 -0
  55. regscale/core/app/utils/catalog_utils/__init__.py +0 -0
  56. regscale/core/app/utils/catalog_utils/common.py +91 -0
  57. regscale/core/app/utils/catalog_utils/compare_catalog.py +193 -0
  58. regscale/core/app/utils/catalog_utils/diagnostic_catalog.py +97 -0
  59. regscale/core/app/utils/catalog_utils/download_catalog.py +103 -0
  60. regscale/core/app/utils/catalog_utils/update_catalog.py +718 -0
  61. regscale/core/app/utils/catalog_utils/update_catalog_v2.py +1378 -0
  62. regscale/core/app/utils/catalog_utils/update_catalog_v3.py +1272 -0
  63. regscale/core/app/utils/catalog_utils/update_plans.py +334 -0
  64. regscale/core/app/utils/file_utils.py +238 -0
  65. regscale/core/app/utils/parser_utils.py +81 -0
  66. regscale/core/app/utils/pickle_file_handler.py +57 -0
  67. regscale/core/app/utils/regscale_utils.py +319 -0
  68. regscale/core/app/utils/report_utils.py +119 -0
  69. regscale/core/app/utils/variables.py +226 -0
  70. regscale/core/decorators.py +31 -0
  71. regscale/core/lazy_group.py +65 -0
  72. regscale/core/login.py +63 -0
  73. regscale/core/server/__init__.py +0 -0
  74. regscale/core/server/flask_api.py +473 -0
  75. regscale/core/server/helpers.py +373 -0
  76. regscale/core/server/rest.py +64 -0
  77. regscale/core/server/static/css/bootstrap.css +6030 -0
  78. regscale/core/server/static/css/bootstrap.min.css +6 -0
  79. regscale/core/server/static/css/main.css +176 -0
  80. regscale/core/server/static/images/regscale-cli.svg +49 -0
  81. regscale/core/server/static/images/regscale.svg +38 -0
  82. regscale/core/server/templates/base.html +74 -0
  83. regscale/core/server/templates/index.html +43 -0
  84. regscale/core/server/templates/login.html +28 -0
  85. regscale/core/server/templates/make_base64.html +22 -0
  86. regscale/core/server/templates/upload_STIG.html +109 -0
  87. regscale/core/server/templates/upload_STIG_result.html +26 -0
  88. regscale/core/server/templates/upload_ssp.html +144 -0
  89. regscale/core/server/templates/upload_ssp_result.html +128 -0
  90. regscale/core/static/__init__.py +0 -0
  91. regscale/core/static/regex.py +14 -0
  92. regscale/core/utils/__init__.py +117 -0
  93. regscale/core/utils/click_utils.py +13 -0
  94. regscale/core/utils/date.py +238 -0
  95. regscale/core/utils/graphql.py +254 -0
  96. regscale/core/utils/urls.py +23 -0
  97. regscale/dev/__init__.py +6 -0
  98. regscale/dev/analysis.py +454 -0
  99. regscale/dev/cli.py +235 -0
  100. regscale/dev/code_gen.py +492 -0
  101. regscale/dev/dirs.py +69 -0
  102. regscale/dev/docs.py +384 -0
  103. regscale/dev/monitoring.py +26 -0
  104. regscale/dev/profiling.py +216 -0
  105. regscale/exceptions/__init__.py +4 -0
  106. regscale/exceptions/license_exception.py +7 -0
  107. regscale/exceptions/validation_exception.py +9 -0
  108. regscale/integrations/__init__.py +1 -0
  109. regscale/integrations/commercial/__init__.py +486 -0
  110. regscale/integrations/commercial/ad.py +433 -0
  111. regscale/integrations/commercial/amazon/__init__.py +0 -0
  112. regscale/integrations/commercial/amazon/common.py +106 -0
  113. regscale/integrations/commercial/aqua/__init__.py +0 -0
  114. regscale/integrations/commercial/aqua/aqua.py +91 -0
  115. regscale/integrations/commercial/aws/__init__.py +6 -0
  116. regscale/integrations/commercial/aws/cli.py +322 -0
  117. regscale/integrations/commercial/aws/inventory/__init__.py +110 -0
  118. regscale/integrations/commercial/aws/inventory/base.py +64 -0
  119. regscale/integrations/commercial/aws/inventory/resources/__init__.py +19 -0
  120. regscale/integrations/commercial/aws/inventory/resources/compute.py +234 -0
  121. regscale/integrations/commercial/aws/inventory/resources/containers.py +113 -0
  122. regscale/integrations/commercial/aws/inventory/resources/database.py +101 -0
  123. regscale/integrations/commercial/aws/inventory/resources/integration.py +237 -0
  124. regscale/integrations/commercial/aws/inventory/resources/networking.py +253 -0
  125. regscale/integrations/commercial/aws/inventory/resources/security.py +240 -0
  126. regscale/integrations/commercial/aws/inventory/resources/storage.py +91 -0
  127. regscale/integrations/commercial/aws/scanner.py +823 -0
  128. regscale/integrations/commercial/azure/__init__.py +0 -0
  129. regscale/integrations/commercial/azure/common.py +32 -0
  130. regscale/integrations/commercial/azure/intune.py +488 -0
  131. regscale/integrations/commercial/azure/scanner.py +49 -0
  132. regscale/integrations/commercial/burp.py +78 -0
  133. regscale/integrations/commercial/cpe.py +144 -0
  134. regscale/integrations/commercial/crowdstrike.py +1117 -0
  135. regscale/integrations/commercial/defender.py +1511 -0
  136. regscale/integrations/commercial/dependabot.py +210 -0
  137. regscale/integrations/commercial/durosuite/__init__.py +0 -0
  138. regscale/integrations/commercial/durosuite/api.py +1546 -0
  139. regscale/integrations/commercial/durosuite/process_devices.py +101 -0
  140. regscale/integrations/commercial/durosuite/scanner.py +637 -0
  141. regscale/integrations/commercial/durosuite/variables.py +21 -0
  142. regscale/integrations/commercial/ecr.py +90 -0
  143. regscale/integrations/commercial/gcp/__init__.py +237 -0
  144. regscale/integrations/commercial/gcp/auth.py +96 -0
  145. regscale/integrations/commercial/gcp/control_tests.py +238 -0
  146. regscale/integrations/commercial/gcp/variables.py +18 -0
  147. regscale/integrations/commercial/gitlab.py +332 -0
  148. regscale/integrations/commercial/grype.py +165 -0
  149. regscale/integrations/commercial/ibm.py +90 -0
  150. regscale/integrations/commercial/import_all/__init__.py +0 -0
  151. regscale/integrations/commercial/import_all/import_all_cmd.py +467 -0
  152. regscale/integrations/commercial/import_all/scan_file_fingerprints.json +27 -0
  153. regscale/integrations/commercial/jira.py +1046 -0
  154. regscale/integrations/commercial/mappings/__init__.py +0 -0
  155. regscale/integrations/commercial/mappings/csf_controls.json +713 -0
  156. regscale/integrations/commercial/mappings/nist_800_53_r5_controls.json +1516 -0
  157. regscale/integrations/commercial/nessus/__init__.py +0 -0
  158. regscale/integrations/commercial/nessus/nessus_utils.py +429 -0
  159. regscale/integrations/commercial/nessus/scanner.py +416 -0
  160. regscale/integrations/commercial/nexpose.py +90 -0
  161. regscale/integrations/commercial/okta.py +798 -0
  162. regscale/integrations/commercial/opentext/__init__.py +0 -0
  163. regscale/integrations/commercial/opentext/click.py +99 -0
  164. regscale/integrations/commercial/opentext/scanner.py +143 -0
  165. regscale/integrations/commercial/prisma.py +91 -0
  166. regscale/integrations/commercial/qualys.py +1462 -0
  167. regscale/integrations/commercial/salesforce.py +980 -0
  168. regscale/integrations/commercial/sap/__init__.py +0 -0
  169. regscale/integrations/commercial/sap/click.py +31 -0
  170. regscale/integrations/commercial/sap/sysdig/__init__.py +0 -0
  171. regscale/integrations/commercial/sap/sysdig/click.py +57 -0
  172. regscale/integrations/commercial/sap/sysdig/sysdig_scanner.py +190 -0
  173. regscale/integrations/commercial/sap/tenable/__init__.py +0 -0
  174. regscale/integrations/commercial/sap/tenable/click.py +49 -0
  175. regscale/integrations/commercial/sap/tenable/scanner.py +196 -0
  176. regscale/integrations/commercial/servicenow.py +1756 -0
  177. regscale/integrations/commercial/sicura/__init__.py +0 -0
  178. regscale/integrations/commercial/sicura/api.py +855 -0
  179. regscale/integrations/commercial/sicura/commands.py +73 -0
  180. regscale/integrations/commercial/sicura/scanner.py +481 -0
  181. regscale/integrations/commercial/sicura/variables.py +16 -0
  182. regscale/integrations/commercial/snyk.py +90 -0
  183. regscale/integrations/commercial/sonarcloud.py +260 -0
  184. regscale/integrations/commercial/sqlserver.py +369 -0
  185. regscale/integrations/commercial/stig_mapper_integration/__init__.py +0 -0
  186. regscale/integrations/commercial/stig_mapper_integration/click_commands.py +38 -0
  187. regscale/integrations/commercial/stig_mapper_integration/mapping_engine.py +353 -0
  188. regscale/integrations/commercial/stigv2/__init__.py +0 -0
  189. regscale/integrations/commercial/stigv2/ckl_parser.py +349 -0
  190. regscale/integrations/commercial/stigv2/click_commands.py +95 -0
  191. regscale/integrations/commercial/stigv2/stig_integration.py +202 -0
  192. regscale/integrations/commercial/synqly/__init__.py +0 -0
  193. regscale/integrations/commercial/synqly/assets.py +46 -0
  194. regscale/integrations/commercial/synqly/ticketing.py +132 -0
  195. regscale/integrations/commercial/synqly/vulnerabilities.py +223 -0
  196. regscale/integrations/commercial/synqly_jira.py +840 -0
  197. regscale/integrations/commercial/tenablev2/__init__.py +0 -0
  198. regscale/integrations/commercial/tenablev2/authenticate.py +31 -0
  199. regscale/integrations/commercial/tenablev2/click.py +1584 -0
  200. regscale/integrations/commercial/tenablev2/scanner.py +504 -0
  201. regscale/integrations/commercial/tenablev2/stig_parsers.py +140 -0
  202. regscale/integrations/commercial/tenablev2/utils.py +78 -0
  203. regscale/integrations/commercial/tenablev2/variables.py +17 -0
  204. regscale/integrations/commercial/trivy.py +162 -0
  205. regscale/integrations/commercial/veracode.py +96 -0
  206. regscale/integrations/commercial/wizv2/WizDataMixin.py +97 -0
  207. regscale/integrations/commercial/wizv2/__init__.py +0 -0
  208. regscale/integrations/commercial/wizv2/click.py +429 -0
  209. regscale/integrations/commercial/wizv2/constants.py +1001 -0
  210. regscale/integrations/commercial/wizv2/issue.py +361 -0
  211. regscale/integrations/commercial/wizv2/models.py +112 -0
  212. regscale/integrations/commercial/wizv2/parsers.py +339 -0
  213. regscale/integrations/commercial/wizv2/sbom.py +115 -0
  214. regscale/integrations/commercial/wizv2/scanner.py +416 -0
  215. regscale/integrations/commercial/wizv2/utils.py +796 -0
  216. regscale/integrations/commercial/wizv2/variables.py +39 -0
  217. regscale/integrations/commercial/wizv2/wiz_auth.py +159 -0
  218. regscale/integrations/commercial/xray.py +91 -0
  219. regscale/integrations/integration/__init__.py +2 -0
  220. regscale/integrations/integration/integration.py +26 -0
  221. regscale/integrations/integration/inventory.py +17 -0
  222. regscale/integrations/integration/issue.py +100 -0
  223. regscale/integrations/integration_override.py +149 -0
  224. regscale/integrations/public/__init__.py +103 -0
  225. regscale/integrations/public/cisa.py +641 -0
  226. regscale/integrations/public/criticality_updater.py +70 -0
  227. regscale/integrations/public/emass.py +411 -0
  228. regscale/integrations/public/emass_slcm_import.py +697 -0
  229. regscale/integrations/public/fedramp/__init__.py +0 -0
  230. regscale/integrations/public/fedramp/appendix_parser.py +548 -0
  231. regscale/integrations/public/fedramp/click.py +479 -0
  232. regscale/integrations/public/fedramp/components.py +714 -0
  233. regscale/integrations/public/fedramp/docx_parser.py +259 -0
  234. regscale/integrations/public/fedramp/fedramp_cis_crm.py +1124 -0
  235. regscale/integrations/public/fedramp/fedramp_common.py +3181 -0
  236. regscale/integrations/public/fedramp/fedramp_docx.py +388 -0
  237. regscale/integrations/public/fedramp/fedramp_five.py +2343 -0
  238. regscale/integrations/public/fedramp/fedramp_traversal.py +138 -0
  239. regscale/integrations/public/fedramp/import_fedramp_r4_ssp.py +279 -0
  240. regscale/integrations/public/fedramp/import_workbook.py +495 -0
  241. regscale/integrations/public/fedramp/inventory_items.py +244 -0
  242. regscale/integrations/public/fedramp/mappings/__init__.py +0 -0
  243. regscale/integrations/public/fedramp/mappings/fedramp_r4_parts.json +7388 -0
  244. regscale/integrations/public/fedramp/mappings/fedramp_r5_params.json +8636 -0
  245. regscale/integrations/public/fedramp/mappings/fedramp_r5_parts.json +9605 -0
  246. regscale/integrations/public/fedramp/mappings/system_roles.py +34 -0
  247. regscale/integrations/public/fedramp/mappings/user.py +175 -0
  248. regscale/integrations/public/fedramp/mappings/values.py +141 -0
  249. regscale/integrations/public/fedramp/markdown_parser.py +150 -0
  250. regscale/integrations/public/fedramp/metadata.py +689 -0
  251. regscale/integrations/public/fedramp/models/__init__.py +59 -0
  252. regscale/integrations/public/fedramp/models/leveraged_auth_new.py +168 -0
  253. regscale/integrations/public/fedramp/models/poam_importer.py +522 -0
  254. regscale/integrations/public/fedramp/parts_mapper.py +107 -0
  255. regscale/integrations/public/fedramp/poam/__init__.py +0 -0
  256. regscale/integrations/public/fedramp/poam/scanner.py +851 -0
  257. regscale/integrations/public/fedramp/properties.py +201 -0
  258. regscale/integrations/public/fedramp/reporting.py +84 -0
  259. regscale/integrations/public/fedramp/resources.py +496 -0
  260. regscale/integrations/public/fedramp/rosetta.py +110 -0
  261. regscale/integrations/public/fedramp/ssp_logger.py +87 -0
  262. regscale/integrations/public/fedramp/system_characteristics.py +922 -0
  263. regscale/integrations/public/fedramp/system_control_implementations.py +582 -0
  264. regscale/integrations/public/fedramp/system_implementation.py +190 -0
  265. regscale/integrations/public/fedramp/xml_utils.py +87 -0
  266. regscale/integrations/public/nist_catalog.py +275 -0
  267. regscale/integrations/public/oscal.py +1946 -0
  268. regscale/integrations/public/otx.py +169 -0
  269. regscale/integrations/scanner_integration.py +2692 -0
  270. regscale/integrations/variables.py +25 -0
  271. regscale/models/__init__.py +7 -0
  272. regscale/models/app_models/__init__.py +5 -0
  273. regscale/models/app_models/catalog_compare.py +213 -0
  274. regscale/models/app_models/click.py +252 -0
  275. regscale/models/app_models/datetime_encoder.py +21 -0
  276. regscale/models/app_models/import_validater.py +321 -0
  277. regscale/models/app_models/mapping.py +260 -0
  278. regscale/models/app_models/pipeline.py +37 -0
  279. regscale/models/click_models.py +413 -0
  280. regscale/models/config.py +154 -0
  281. regscale/models/email_style.css +67 -0
  282. regscale/models/hierarchy.py +8 -0
  283. regscale/models/inspect_models.py +79 -0
  284. regscale/models/integration_models/__init__.py +0 -0
  285. regscale/models/integration_models/amazon_models/__init__.py +0 -0
  286. regscale/models/integration_models/amazon_models/inspector.py +262 -0
  287. regscale/models/integration_models/amazon_models/inspector_scan.py +206 -0
  288. regscale/models/integration_models/aqua.py +247 -0
  289. regscale/models/integration_models/azure_alerts.py +255 -0
  290. regscale/models/integration_models/base64.py +23 -0
  291. regscale/models/integration_models/burp.py +433 -0
  292. regscale/models/integration_models/burp_models.py +128 -0
  293. regscale/models/integration_models/cisa_kev_data.json +19333 -0
  294. regscale/models/integration_models/defender_data.py +93 -0
  295. regscale/models/integration_models/defenderimport.py +143 -0
  296. regscale/models/integration_models/drf.py +443 -0
  297. regscale/models/integration_models/ecr_models/__init__.py +0 -0
  298. regscale/models/integration_models/ecr_models/data.py +69 -0
  299. regscale/models/integration_models/ecr_models/ecr.py +239 -0
  300. regscale/models/integration_models/flat_file_importer.py +1079 -0
  301. regscale/models/integration_models/grype_import.py +247 -0
  302. regscale/models/integration_models/ibm.py +126 -0
  303. regscale/models/integration_models/implementation_results.py +85 -0
  304. regscale/models/integration_models/nexpose.py +140 -0
  305. regscale/models/integration_models/prisma.py +202 -0
  306. regscale/models/integration_models/qualys.py +720 -0
  307. regscale/models/integration_models/qualys_scanner.py +160 -0
  308. regscale/models/integration_models/sbom/__init__.py +0 -0
  309. regscale/models/integration_models/sbom/cyclone_dx.py +139 -0
  310. regscale/models/integration_models/send_reminders.py +620 -0
  311. regscale/models/integration_models/snyk.py +155 -0
  312. regscale/models/integration_models/synqly_models/__init__.py +0 -0
  313. regscale/models/integration_models/synqly_models/capabilities.json +1 -0
  314. regscale/models/integration_models/synqly_models/connector_types.py +22 -0
  315. regscale/models/integration_models/synqly_models/connectors/__init__.py +7 -0
  316. regscale/models/integration_models/synqly_models/connectors/assets.py +97 -0
  317. regscale/models/integration_models/synqly_models/connectors/ticketing.py +583 -0
  318. regscale/models/integration_models/synqly_models/connectors/vulnerabilities.py +169 -0
  319. regscale/models/integration_models/synqly_models/ocsf_mapper.py +331 -0
  320. regscale/models/integration_models/synqly_models/param.py +72 -0
  321. regscale/models/integration_models/synqly_models/synqly_model.py +733 -0
  322. regscale/models/integration_models/synqly_models/tenants.py +39 -0
  323. regscale/models/integration_models/tenable_models/__init__.py +0 -0
  324. regscale/models/integration_models/tenable_models/integration.py +187 -0
  325. regscale/models/integration_models/tenable_models/models.py +513 -0
  326. regscale/models/integration_models/trivy_import.py +231 -0
  327. regscale/models/integration_models/veracode.py +217 -0
  328. regscale/models/integration_models/xray.py +135 -0
  329. regscale/models/locking.py +100 -0
  330. regscale/models/platform.py +110 -0
  331. regscale/models/regscale_models/__init__.py +67 -0
  332. regscale/models/regscale_models/assessment.py +570 -0
  333. regscale/models/regscale_models/assessment_plan.py +52 -0
  334. regscale/models/regscale_models/asset.py +567 -0
  335. regscale/models/regscale_models/asset_mapping.py +190 -0
  336. regscale/models/regscale_models/case.py +42 -0
  337. regscale/models/regscale_models/catalog.py +261 -0
  338. regscale/models/regscale_models/cci.py +46 -0
  339. regscale/models/regscale_models/change.py +167 -0
  340. regscale/models/regscale_models/checklist.py +372 -0
  341. regscale/models/regscale_models/comment.py +49 -0
  342. regscale/models/regscale_models/compliance_settings.py +112 -0
  343. regscale/models/regscale_models/component.py +412 -0
  344. regscale/models/regscale_models/component_mapping.py +65 -0
  345. regscale/models/regscale_models/control.py +38 -0
  346. regscale/models/regscale_models/control_implementation.py +1128 -0
  347. regscale/models/regscale_models/control_objective.py +261 -0
  348. regscale/models/regscale_models/control_parameter.py +100 -0
  349. regscale/models/regscale_models/control_test.py +34 -0
  350. regscale/models/regscale_models/control_test_plan.py +75 -0
  351. regscale/models/regscale_models/control_test_result.py +52 -0
  352. regscale/models/regscale_models/custom_field.py +245 -0
  353. regscale/models/regscale_models/data.py +109 -0
  354. regscale/models/regscale_models/data_center.py +40 -0
  355. regscale/models/regscale_models/deviation.py +203 -0
  356. regscale/models/regscale_models/email.py +97 -0
  357. regscale/models/regscale_models/evidence.py +47 -0
  358. regscale/models/regscale_models/evidence_mapping.py +40 -0
  359. regscale/models/regscale_models/facility.py +59 -0
  360. regscale/models/regscale_models/file.py +382 -0
  361. regscale/models/regscale_models/filetag.py +37 -0
  362. regscale/models/regscale_models/form_field_value.py +94 -0
  363. regscale/models/regscale_models/group.py +169 -0
  364. regscale/models/regscale_models/implementation_objective.py +335 -0
  365. regscale/models/regscale_models/implementation_option.py +275 -0
  366. regscale/models/regscale_models/implementation_role.py +33 -0
  367. regscale/models/regscale_models/incident.py +177 -0
  368. regscale/models/regscale_models/interconnection.py +43 -0
  369. regscale/models/regscale_models/issue.py +1176 -0
  370. regscale/models/regscale_models/leveraged_authorization.py +125 -0
  371. regscale/models/regscale_models/line_of_inquiry.py +52 -0
  372. regscale/models/regscale_models/link.py +205 -0
  373. regscale/models/regscale_models/meta_data.py +64 -0
  374. regscale/models/regscale_models/mixins/__init__.py +0 -0
  375. regscale/models/regscale_models/mixins/parent_cache.py +124 -0
  376. regscale/models/regscale_models/module.py +224 -0
  377. regscale/models/regscale_models/modules.py +191 -0
  378. regscale/models/regscale_models/objective.py +14 -0
  379. regscale/models/regscale_models/parameter.py +87 -0
  380. regscale/models/regscale_models/ports_protocol.py +81 -0
  381. regscale/models/regscale_models/privacy.py +89 -0
  382. regscale/models/regscale_models/profile.py +50 -0
  383. regscale/models/regscale_models/profile_link.py +68 -0
  384. regscale/models/regscale_models/profile_mapping.py +124 -0
  385. regscale/models/regscale_models/project.py +63 -0
  386. regscale/models/regscale_models/property.py +278 -0
  387. regscale/models/regscale_models/question.py +85 -0
  388. regscale/models/regscale_models/questionnaire.py +87 -0
  389. regscale/models/regscale_models/questionnaire_instance.py +177 -0
  390. regscale/models/regscale_models/rbac.py +132 -0
  391. regscale/models/regscale_models/reference.py +86 -0
  392. regscale/models/regscale_models/regscale_model.py +1643 -0
  393. regscale/models/regscale_models/requirement.py +29 -0
  394. regscale/models/regscale_models/risk.py +274 -0
  395. regscale/models/regscale_models/sbom.py +54 -0
  396. regscale/models/regscale_models/scan_history.py +436 -0
  397. regscale/models/regscale_models/search.py +53 -0
  398. regscale/models/regscale_models/security_control.py +132 -0
  399. regscale/models/regscale_models/security_plan.py +204 -0
  400. regscale/models/regscale_models/software_inventory.py +159 -0
  401. regscale/models/regscale_models/stake_holder.py +64 -0
  402. regscale/models/regscale_models/stig.py +647 -0
  403. regscale/models/regscale_models/supply_chain.py +152 -0
  404. regscale/models/regscale_models/system_role.py +188 -0
  405. regscale/models/regscale_models/system_role_external_assignment.py +40 -0
  406. regscale/models/regscale_models/tag.py +37 -0
  407. regscale/models/regscale_models/tag_mapping.py +19 -0
  408. regscale/models/regscale_models/task.py +133 -0
  409. regscale/models/regscale_models/threat.py +196 -0
  410. regscale/models/regscale_models/user.py +175 -0
  411. regscale/models/regscale_models/user_group.py +55 -0
  412. regscale/models/regscale_models/vulnerability.py +242 -0
  413. regscale/models/regscale_models/vulnerability_mapping.py +162 -0
  414. regscale/models/regscale_models/workflow.py +55 -0
  415. regscale/models/regscale_models/workflow_action.py +34 -0
  416. regscale/models/regscale_models/workflow_instance.py +269 -0
  417. regscale/models/regscale_models/workflow_instance_step.py +114 -0
  418. regscale/models/regscale_models/workflow_template.py +58 -0
  419. regscale/models/regscale_models/workflow_template_step.py +45 -0
  420. regscale/regscale.py +815 -0
  421. regscale/utils/__init__.py +7 -0
  422. regscale/utils/b64conversion.py +14 -0
  423. regscale/utils/click_utils.py +118 -0
  424. regscale/utils/decorators.py +48 -0
  425. regscale/utils/dict_utils.py +59 -0
  426. regscale/utils/files.py +79 -0
  427. regscale/utils/fxns.py +30 -0
  428. regscale/utils/graphql_client.py +113 -0
  429. regscale/utils/lists.py +16 -0
  430. regscale/utils/numbers.py +12 -0
  431. regscale/utils/shell.py +148 -0
  432. regscale/utils/string.py +121 -0
  433. regscale/utils/synqly_utils.py +165 -0
  434. regscale/utils/threading/__init__.py +8 -0
  435. regscale/utils/threading/threadhandler.py +131 -0
  436. regscale/utils/threading/threadsafe_counter.py +47 -0
  437. regscale/utils/threading/threadsafe_dict.py +242 -0
  438. regscale/utils/threading/threadsafe_list.py +83 -0
  439. regscale/utils/version.py +104 -0
  440. regscale/validation/__init__.py +0 -0
  441. regscale/validation/address.py +37 -0
  442. regscale/validation/record.py +48 -0
  443. regscale/visualization/__init__.py +5 -0
  444. regscale/visualization/click.py +34 -0
  445. regscale_cli-6.16.0.0.dist-info/LICENSE +21 -0
  446. regscale_cli-6.16.0.0.dist-info/METADATA +659 -0
  447. regscale_cli-6.16.0.0.dist-info/RECORD +481 -0
  448. regscale_cli-6.16.0.0.dist-info/WHEEL +5 -0
  449. regscale_cli-6.16.0.0.dist-info/entry_points.txt +6 -0
  450. regscale_cli-6.16.0.0.dist-info/top_level.txt +2 -0
  451. tests/fixtures/__init__.py +2 -0
  452. tests/fixtures/api.py +87 -0
  453. tests/fixtures/models.py +91 -0
  454. tests/fixtures/test_fixture.py +144 -0
  455. tests/mocks/__init__.py +0 -0
  456. tests/mocks/objects.py +3 -0
  457. tests/mocks/response.py +32 -0
  458. tests/mocks/xml.py +13 -0
  459. tests/regscale/__init__.py +0 -0
  460. tests/regscale/core/__init__.py +0 -0
  461. tests/regscale/core/test_api.py +232 -0
  462. tests/regscale/core/test_app.py +406 -0
  463. tests/regscale/core/test_login.py +37 -0
  464. tests/regscale/core/test_logz.py +66 -0
  465. tests/regscale/core/test_sbom_generator.py +87 -0
  466. tests/regscale/core/test_validation_utils.py +163 -0
  467. tests/regscale/core/test_version.py +78 -0
  468. tests/regscale/models/__init__.py +0 -0
  469. tests/regscale/models/test_asset.py +71 -0
  470. tests/regscale/models/test_config.py +26 -0
  471. tests/regscale/models/test_control_implementation.py +27 -0
  472. tests/regscale/models/test_import.py +97 -0
  473. tests/regscale/models/test_issue.py +36 -0
  474. tests/regscale/models/test_mapping.py +52 -0
  475. tests/regscale/models/test_platform.py +31 -0
  476. tests/regscale/models/test_regscale_model.py +346 -0
  477. tests/regscale/models/test_report.py +32 -0
  478. tests/regscale/models/test_tenable_integrations.py +118 -0
  479. tests/regscale/models/test_user_model.py +121 -0
  480. tests/regscale/test_about.py +19 -0
  481. tests/regscale/test_authorization.py +65 -0
@@ -0,0 +1,1001 @@
1
+ """This module contains all the constants used in the Wiz SDK."""
2
+
3
+ from enum import Enum
4
+ from typing import List, Optional
5
+
6
+ from regscale.models import IssueSeverity
7
+
8
+ SBOM_FILE_PATH = "artifacts/wiz_sbom.json"
9
+ INVENTORY_FILE_PATH = "artifacts/wiz_inventory.json"
10
+ ISSUES_FILE_PATH = "artifacts/wiz_issues.json"
11
+ VULNERABILITY_FILE_PATH = "artifacts/wiz_vulnerabilities.json"
12
+ CLOUD_CONFIG_FINDINGS_FILE_PATH = "artifacts/wiz_cloud_config_findings.json"
13
+ HOST_VULNERABILITY_FILE_PATH = "artifacts/wiz_host_vulnerabilities.json"
14
+ DATA_FINDINGS_FILE_PATH = "artifacts/wiz_data_findings.json"
15
+ CONTENT_TYPE = "application/json"
16
+ RATE_LIMIT_MSG = "Rate limit exceeded"
17
+ PROVIDER = "Provider ID"
18
+ RESOURCE = "Resource Type"
19
+ CHECK_INTERVAL_FOR_DOWNLOAD_REPORT = 7
20
+ MAX_RETRIES = 100
21
+ ASSET_TYPE_MAPPING = {
22
+ "ACCESS_ROLE": "Other",
23
+ "ACCESS_ROLE_BINDING": "Other",
24
+ "ACCESS_ROLE_PERMISSION": "Other",
25
+ "API_GATEWAY": "Other",
26
+ "APPLICATION": "Other",
27
+ "AUTHENTICATION_CONFIGURATION": "Other",
28
+ "BACKUP_SERVICE": "Other",
29
+ "BUCKET": "Other",
30
+ "CDN": "Other",
31
+ "CERTIFICATE": "Other",
32
+ "CICD_SERVICE": "Other",
33
+ "CLOUD_LOG_CONFIGURATION": "Other",
34
+ "CLOUD_ORGANIZATION": "Other",
35
+ "COMPUTE_INSTANCE_GROUP": "Other",
36
+ "CONFIG_MAP": "Other",
37
+ "CONTAINER": "Other",
38
+ "CONTAINER_GROUP": "Other",
39
+ "CONTAINER_IMAGE": "Other",
40
+ "CONTAINER_REGISTRY": "Other",
41
+ "CONTAINER_SERVICE": "Other",
42
+ "DAEMON_SET": "Other",
43
+ "DATABASE": "Other",
44
+ "DATA_WORKLOAD": "Other",
45
+ "DB_SERVER": "Physical Server",
46
+ "DEPLOYMENT": "Other",
47
+ "DNS_RECORD": "Other",
48
+ "DNS_ZONE": "Other",
49
+ "DOMAIN": "Other",
50
+ "EMAIL_SERVICE": "Other",
51
+ "ENCRYPTION_KEY": "Other",
52
+ "ENDPOINT": "Other",
53
+ "FILE_SYSTEM_SERVICE": "Other",
54
+ "FIREWALL": "Firewall",
55
+ "GATEWAY": "Other",
56
+ "GOVERNANCE_POLICY": "Other",
57
+ "GOVERNANCE_POLICY_GROUP": "Other",
58
+ "HOSTED_APPLICATION": "Other",
59
+ "IAM_BINDING": "Other",
60
+ "IP_RANGE": "Other",
61
+ "KUBERNETES_CLUSTER": "Other",
62
+ "KUBERNETES_CRON_JOB": "Other",
63
+ "KUBERNETES_INGRESS": "Other",
64
+ "KUBERNETES_INGRESS_CONTROLLER": "Other",
65
+ "KUBERNETES_JOB": "Other",
66
+ "KUBERNETES_NETWORK_POLICY": "Other",
67
+ "KUBERNETES_NODE": "Other",
68
+ "KUBERNETES_PERSISTENT_VOLUME": "Other",
69
+ "KUBERNETES_PERSISTENT_VOLUME_CLAIM": "Other",
70
+ "KUBERNETES_POD_SECURITY_POLICY": "Other",
71
+ "KUBERNETES_SERVICE": "Other",
72
+ "KUBERNETES_STORAGE_CLASS": "Other",
73
+ "KUBERNETES_VOLUME": "Other",
74
+ "LOAD_BALANCER": "Other",
75
+ "MANAGED_CERTIFICATE": "Other",
76
+ "MANAGEMENT_SERVICE": "Other",
77
+ "NETWORK_ADDRESS": "Other",
78
+ "NETWORK_INTERFACE": "Other",
79
+ "NETWORK_ROUTING_RULE": "Other",
80
+ "NETWORK_SECURITY_RULE": "Other",
81
+ "PEERING": "Other",
82
+ "POD": "Other",
83
+ "PORT_RANGE": "Other",
84
+ "PRIVATE_ENDPOINT": "Other",
85
+ "PROXY": "Other",
86
+ "PROXY_RULE": "Other",
87
+ "RAW_ACCESS_POLICY": "Other",
88
+ "REGISTERED_DOMAIN": "Other",
89
+ "REPLICA_SET": "Other",
90
+ "RESOURCE_GROUP": "Other",
91
+ "SEARCH_INDEX": "Other",
92
+ "SERVICE_ACCOUNT": "Other",
93
+ "SUBNET": "Other",
94
+ "SUBSCRIPTION": "Other",
95
+ "SWITCH": "Network Switch",
96
+ "VIRTUAL_DESKTOP": "Virtual Machine (VM)",
97
+ "VIRTUAL_MACHINE": "Virtual Machine (VM)",
98
+ "VIRTUAL_MACHINE_IMAGE": "Other",
99
+ "VIRTUAL_NETWORK": "Other",
100
+ "VOLUME": "Other",
101
+ "WEB_SERVICE": "Other",
102
+ "DATA_WORKFLOW": "Other",
103
+ }
104
+
105
+ INVENTORY_QUERY = """
106
+ query CloudResourceSearch(
107
+ $filterBy: CloudResourceFilters
108
+ $first: Int
109
+ $after: String
110
+ ) {
111
+ cloudResources(
112
+ filterBy: $filterBy
113
+ first: $first
114
+ after: $after
115
+ ) {
116
+ nodes {
117
+ ...CloudResourceFragment
118
+ }
119
+ pageInfo {
120
+ hasNextPage
121
+ endCursor
122
+ }
123
+ }
124
+ }
125
+ fragment CloudResourceFragment on CloudResource {
126
+ id
127
+ name
128
+ type
129
+ subscriptionId
130
+ subscriptionExternalId
131
+ graphEntity{
132
+ id
133
+ providerUniqueId
134
+ name
135
+ type
136
+ projects {
137
+ id
138
+ }
139
+ properties
140
+ firstSeen
141
+ lastSeen
142
+ }
143
+ }
144
+ """
145
+ DATASOURCE = "Wiz"
146
+ SBOM_QUERY = """
147
+ query ArtifactsGroupedByNameTable($filterBy: SBOMArtifactsGroupedByNameFilter, $first: Int, $after: String, $orderBy: SBOMArtifactsGroupedByNameOrder) {
148
+ sbomArtifactsGroupedByName(
149
+ filterBy: $filterBy
150
+ first: $first
151
+ after: $after
152
+ orderBy: $orderBy
153
+ ) {
154
+ nodes {
155
+ id
156
+ type {
157
+ ...SBOMArtifactTypeFragment
158
+ }
159
+ name
160
+ validatedInRuntime
161
+ artifacts(first: 0) {
162
+ totalCount
163
+ }
164
+ versions(first: 500) {
165
+ nodes {
166
+ version
167
+ }
168
+ }
169
+ }
170
+ updatedAt
171
+ pageInfo {
172
+ endCursor
173
+ hasNextPage
174
+ }
175
+ totalCount
176
+ }
177
+ }
178
+ fragment SBOMArtifactTypeFragment on SBOMArtifactType {
179
+ group
180
+ codeLibraryLanguage
181
+ osPackageManager
182
+ hostedTechnology {
183
+ id
184
+ name
185
+ icon
186
+ }
187
+ plugin
188
+ }
189
+ """
190
+
191
+ TECHNOLOGIES_FILE_PATH = "./artifacts/technologies.json"
192
+ AUTH0_URLS = [
193
+ "https://auth.wiz.io/oauth/token",
194
+ "https://auth0.gov.wiz.io/oauth/token",
195
+ "https://auth0.test.wiz.io/oauth/token",
196
+ "https://auth0.demo.wiz.io/oauth/token",
197
+ ]
198
+ COGNITO_URLS = [
199
+ "https://auth.app.wiz.io/oauth/token",
200
+ "https://auth.gov.wiz.io/oauth/token",
201
+ "https://auth.test.wiz.io/oauth/token",
202
+ "https://auth.demo.wiz.io/oauth/token",
203
+ "https://auth.app.wiz.us/oauth/token",
204
+ ]
205
+ CREATE_REPORT_QUERY = """
206
+ mutation CreateReport($input: CreateReportInput!) {
207
+ createReport(input: $input) {
208
+ report {
209
+ id
210
+ }
211
+ }
212
+ }
213
+ """
214
+ REPORTS_QUERY = """
215
+ query ReportsTable($filterBy: ReportFilters, $first: Int, $after: String) {
216
+ reports(first: $first, after: $after, filterBy: $filterBy) {
217
+ nodes {
218
+ id
219
+ name
220
+ type {
221
+ id
222
+ name
223
+ }
224
+ project {
225
+ id
226
+ name
227
+ }
228
+ emailTarget {
229
+ to
230
+ }
231
+ parameters {
232
+ query
233
+ framework {
234
+ name
235
+ }
236
+ subscriptions {
237
+ id
238
+ name
239
+ type
240
+ }
241
+ entities {
242
+ id
243
+ name
244
+ type
245
+ }
246
+ }
247
+ lastRun {
248
+ ...LastRunDetails
249
+ }
250
+ nextRunAt
251
+ runIntervalHours
252
+ }
253
+ pageInfo {
254
+ hasNextPage
255
+ endCursor
256
+ }
257
+ totalCount
258
+ }
259
+ }
260
+ fragment LastRunDetails on ReportRun {
261
+ id
262
+ status
263
+ failedReason
264
+ runAt
265
+ progress
266
+ results {
267
+ ... on ReportRunResultsBenchmark {
268
+ errorCount
269
+ passedCount
270
+ failedCount
271
+ scannedCount
272
+ }
273
+ ... on ReportRunResultsGraphQuery {
274
+ resultCount
275
+ entityCount
276
+ }
277
+ ... on ReportRunResultsNetworkExposure {
278
+ scannedCount
279
+ publiclyAccessibleCount
280
+ }
281
+ ... on ReportRunResultsConfigurationFindings {
282
+ findingsCount
283
+ }
284
+ ... on ReportRunResultsVulnerabilities {
285
+ count
286
+ }
287
+ ... on ReportRunResultsIssues {
288
+ count
289
+ }
290
+ }
291
+ }
292
+ """
293
+ DOWNLOAD_QUERY = """
294
+ query ReportDownloadUrl($reportId: ID!) {
295
+ report(id: $reportId) {
296
+ lastRun {
297
+ url
298
+ status
299
+ }
300
+ }
301
+ }
302
+ """
303
+ ISSUE_QUERY = """query IssuesTable(
304
+ $filterBy: IssueFilters
305
+ $first: Int
306
+ $after: String
307
+ $orderBy: IssueOrder
308
+ ) {
309
+ issues:issuesV2(filterBy: $filterBy
310
+ first: $first
311
+ after: $after
312
+ orderBy: $orderBy) {
313
+ nodes {
314
+ id
315
+ sourceRule{
316
+ __typename
317
+ ... on Control {
318
+ id
319
+ name
320
+ controlDescription: description
321
+ resolutionRecommendation
322
+ securitySubCategories {
323
+ title
324
+ externalId
325
+ category {
326
+ name
327
+ framework {
328
+ name
329
+ }
330
+ }
331
+ }
332
+ }
333
+ ... on CloudEventRule{
334
+ id
335
+ name
336
+ cloudEventRuleDescription: description
337
+ sourceType
338
+ type
339
+ }
340
+ ... on CloudConfigurationRule{
341
+ id
342
+ name
343
+ cloudConfigurationRuleDescription: description
344
+ remediationInstructions
345
+ serviceType
346
+ }
347
+ }
348
+ createdAt
349
+ updatedAt
350
+ dueAt
351
+ type
352
+ resolvedAt
353
+ statusChangedAt
354
+ projects {
355
+ id
356
+ name
357
+ slug
358
+ businessUnit
359
+ riskProfile {
360
+ businessImpact
361
+ }
362
+ }
363
+ status
364
+ severity
365
+ entitySnapshot {
366
+ id
367
+ type
368
+ nativeType
369
+ name
370
+ status
371
+ cloudPlatform
372
+ cloudProviderURL
373
+ providerId
374
+ region
375
+ resourceGroupExternalId
376
+ subscriptionExternalId
377
+ subscriptionName
378
+ subscriptionTags
379
+ tags
380
+ createdAt
381
+ externalId
382
+ }
383
+ serviceTickets {
384
+ externalId
385
+ name
386
+ url
387
+ }
388
+ notes {
389
+ createdAt
390
+ updatedAt
391
+ text
392
+ user {
393
+ name
394
+ email
395
+ }
396
+ serviceAccount {
397
+ name
398
+ }
399
+ }
400
+ }
401
+ pageInfo {
402
+ hasNextPage
403
+ endCursor
404
+ }
405
+ }
406
+ }"""
407
+
408
+ VULNERABILITY_QUERY = """
409
+ query VulnerabilityFindingsTable($filterBy: VulnerabilityFindingFilters, $first: Int, $after: String) {
410
+ vulnerabilityFindings(
411
+ filterBy: $filterBy
412
+ first: $first
413
+ after: $after
414
+ orderBy: {direction: DESC}
415
+ ) {
416
+ nodes {
417
+ id
418
+ name
419
+ detailedName
420
+ description
421
+ severity: vendorSeverity
422
+ weightedSeverity
423
+ status
424
+ fixedVersion
425
+ detectionMethod
426
+ hasExploit
427
+ hasCisaKevExploit
428
+ cisaKevReleaseDate
429
+ cisaKevDueDate
430
+ firstDetectedAt
431
+ lastDetectedAt
432
+ resolvedAt
433
+ score
434
+ validatedInRuntime
435
+ epssSeverity
436
+ epssPercentile
437
+ epssProbability
438
+ dataSourceName
439
+ fixDate
440
+ fixDateBefore
441
+ publishedDate
442
+ projects{
443
+ id
444
+ }
445
+ cvssv2 {
446
+ attackVector
447
+ attackComplexity
448
+ confidentialityImpact
449
+ integrityImpact
450
+ privilegesRequired
451
+ userInteractionRequired
452
+ }
453
+ cvssv3 {
454
+ attackVector
455
+ attackComplexity
456
+ confidentialityImpact
457
+ integrityImpact
458
+ privilegesRequired
459
+ userInteractionRequired
460
+ }
461
+ ignoreRules {
462
+ id
463
+ }
464
+ layerMetadata {
465
+ id
466
+ details
467
+ isBaseLayer
468
+ }
469
+ vulnerableAsset {
470
+ ... on VulnerableAssetBase {
471
+ id
472
+ type
473
+ name
474
+ cloudPlatform
475
+ subscriptionName
476
+ subscriptionExternalId
477
+ subscriptionId
478
+ tags
479
+ hasLimitedInternetExposure
480
+ hasWideInternetExposure
481
+ isAccessibleFromVPN
482
+ isAccessibleFromOtherVnets
483
+ isAccessibleFromOtherSubscriptions
484
+ }
485
+ ... on VulnerableAssetVirtualMachine {
486
+ id
487
+ type
488
+ name
489
+ cloudPlatform
490
+ subscriptionName
491
+ subscriptionExternalId
492
+ subscriptionId
493
+ tags
494
+ operatingSystem
495
+ imageName
496
+ imageId
497
+ imageNativeType
498
+ hasLimitedInternetExposure
499
+ hasWideInternetExposure
500
+ isAccessibleFromVPN
501
+ isAccessibleFromOtherVnets
502
+ isAccessibleFromOtherSubscriptions
503
+ }
504
+ ... on VulnerableAssetServerless {
505
+ id
506
+ type
507
+ name
508
+ cloudPlatform
509
+ subscriptionName
510
+ subscriptionExternalId
511
+ subscriptionId
512
+ tags
513
+ hasLimitedInternetExposure
514
+ hasWideInternetExposure
515
+ isAccessibleFromVPN
516
+ isAccessibleFromOtherVnets
517
+ isAccessibleFromOtherSubscriptions
518
+ }
519
+ ... on VulnerableAssetContainerImage {
520
+ id
521
+ type
522
+ name
523
+ cloudPlatform
524
+ subscriptionName
525
+ subscriptionExternalId
526
+ subscriptionId
527
+ tags
528
+ hasLimitedInternetExposure
529
+ hasWideInternetExposure
530
+ isAccessibleFromVPN
531
+ isAccessibleFromOtherVnets
532
+ isAccessibleFromOtherSubscriptions
533
+ repository {
534
+ vertexId
535
+ name
536
+ }
537
+ registry {
538
+ vertexId
539
+ name
540
+ }
541
+ scanSource
542
+ executionControllers {
543
+ ...VulnerableAssetExecutionControllerDetails
544
+ }
545
+ }
546
+ ... on VulnerableAssetContainer {
547
+ id
548
+ type
549
+ name
550
+ cloudPlatform
551
+ subscriptionName
552
+ subscriptionExternalId
553
+ subscriptionId
554
+ tags
555
+ hasLimitedInternetExposure
556
+ hasWideInternetExposure
557
+ isAccessibleFromVPN
558
+ isAccessibleFromOtherVnets
559
+ isAccessibleFromOtherSubscriptions
560
+ executionControllers {
561
+ ...VulnerableAssetExecutionControllerDetails
562
+ }
563
+ }
564
+ ... on VulnerableAssetRepositoryBranch {
565
+ id
566
+ type
567
+ name
568
+ cloudPlatform
569
+ repositoryId
570
+ repositoryName
571
+ }
572
+ }
573
+ }
574
+ pageInfo {
575
+ hasNextPage
576
+ endCursor
577
+ }
578
+ }
579
+ }
580
+ fragment VulnerableAssetExecutionControllerDetails on VulnerableAssetExecutionController {
581
+ id
582
+ entityType
583
+ externalId
584
+ providerUniqueId
585
+ name
586
+ subscriptionExternalId
587
+ subscriptionId
588
+ subscriptionName
589
+ ancestors {
590
+ id
591
+ name
592
+ entityType
593
+ externalId
594
+ providerUniqueId
595
+ }
596
+ }
597
+ """
598
+ # CIS_BENCHMARK_QUERY
599
+ CLOUD_CONFIG_FINDING_QUERY = """
600
+ query CloudConfigurationFindingsTable($filterBy: ConfigurationFindingFilters, $first: Int, $after: String, $quick: Boolean) {
601
+ configurationFindings(
602
+ filterBy: $filterBy
603
+ first: $first
604
+ after: $after
605
+ quick: $quick
606
+ ) {
607
+ nodes {
608
+ id
609
+ name
610
+ analyzedAt
611
+ firstSeenAt
612
+ severity
613
+ result
614
+ status
615
+ remediation
616
+ source
617
+ targetExternalId
618
+ statusChangedAt
619
+ ignoreRules {
620
+ id
621
+ tags {
622
+ key
623
+ value
624
+ }
625
+ }
626
+ subscription {
627
+ id
628
+ name
629
+ externalId
630
+ cloudProvider
631
+ }
632
+ resource {
633
+ id
634
+ name
635
+ type
636
+ projects {
637
+ id
638
+ name
639
+ riskProfile {
640
+ businessImpact
641
+ }
642
+ }
643
+ }
644
+ rule {
645
+ id
646
+ shortId
647
+ graphId
648
+ name
649
+ description
650
+ remediationInstructions
651
+ securitySubCategories {
652
+ id
653
+ title
654
+ externalId
655
+ category {
656
+ id
657
+ framework {
658
+ id
659
+ name
660
+ }
661
+ name
662
+ }
663
+ }
664
+ tags {
665
+ key
666
+ value
667
+ }
668
+ }
669
+ }
670
+ maxCountReached
671
+ pageInfo {
672
+ hasNextPage
673
+ endCursor
674
+ }
675
+ totalCount
676
+ }
677
+ }
678
+ """
679
+ HOST_VULNERABILITY_QUERY = """
680
+ query HostConfigurationFindingsTable($filterBy: HostConfigurationRuleAssessmentFilters, $orderBy: HostConfigurationRuleAssessmentOrder, $first: Int, $after: String) {
681
+ hostConfigurationRuleAssessments(
682
+ filterBy: $filterBy
683
+ orderBy: $orderBy
684
+ first: $first
685
+ after: $after
686
+ ) {
687
+ nodes {
688
+ id
689
+ firstSeen
690
+ analyzedAt
691
+ updatedAt
692
+ resource {
693
+ id
694
+ type
695
+ name
696
+ subscription {
697
+ id
698
+ name
699
+ externalId
700
+ cloudProvider
701
+ }
702
+ }
703
+ result
704
+ status
705
+ ignoreRules {
706
+ id
707
+ }
708
+ rule {
709
+ id
710
+ shortName
711
+ description
712
+ name
713
+ severity
714
+ securitySubCategories {
715
+ ...SecuritySubCategoryDetails
716
+ }
717
+ }
718
+ hasGraphObject
719
+ }
720
+ pageInfo {
721
+ endCursor
722
+ hasNextPage
723
+ }
724
+ maxCountReached
725
+ totalCount
726
+ }
727
+ }
728
+ fragment SecuritySubCategoryDetails on SecuritySubCategory {
729
+ id
730
+ title
731
+ externalId
732
+ description
733
+ category {
734
+ id
735
+ name
736
+ framework {
737
+ id
738
+ name
739
+ enabled
740
+ }
741
+ }
742
+ }
743
+ """
744
+ DATA_FINDING_QUERY = """
745
+ query DataFindingsGroupedByValueTable($groupBy: DataFindingsGroupedByValueField!, $after: String, $first: Int, $filterBy: DataFindingFilters, $orderBy: DataFindingsGroupedByValueOrder) {
746
+ dataFindingsGroupedByValue(
747
+ groupBy: $groupBy
748
+ filterBy: $filterBy
749
+ first: $first
750
+ after: $after
751
+ orderBy: $orderBy
752
+ ) {
753
+ nodes {
754
+ categories
755
+ location {
756
+ countryCode
757
+ state
758
+ }
759
+ regionCount
760
+ graphEntityCount
761
+ graphEntity {
762
+ id
763
+ name
764
+ type
765
+ properties
766
+ projects {
767
+ id
768
+ name
769
+ slug
770
+ isFolder
771
+ }
772
+ issues(filterBy: {status: [OPEN, IN_PROGRESS]}) {
773
+ criticalSeverityCount
774
+ highSeverityCount
775
+ mediumSeverityCount
776
+ lowSeverityCount
777
+ informationalSeverityCount
778
+ }
779
+ }
780
+ cloudAccount {
781
+ id
782
+ name
783
+ externalId
784
+ cloudProvider
785
+ }
786
+ dataClassifiers {
787
+ id
788
+ name
789
+ category
790
+ matcherType
791
+ severity
792
+ }
793
+ securitySubCategories {
794
+ id
795
+ title
796
+ externalId
797
+ description
798
+ category {
799
+ id
800
+ name
801
+ description
802
+ framework {
803
+ id
804
+ name
805
+ description
806
+ enabled
807
+ }
808
+ }
809
+ }
810
+ findingsCount
811
+ dataFindings(first: 5) {
812
+ nodes {
813
+ ...DataFindingDetails
814
+ }
815
+ }
816
+ }
817
+ pageInfo {
818
+ hasNextPage
819
+ endCursor
820
+ }
821
+ totalCount
822
+ }
823
+ }
824
+ fragment DataFindingDetails on DataFinding {
825
+ id
826
+ name
827
+ dataClassifier {
828
+ id
829
+ name
830
+ category
831
+ securitySubCategories {
832
+ id
833
+ title
834
+ externalId
835
+ description
836
+ category {
837
+ id
838
+ name
839
+ description
840
+ framework {
841
+ id
842
+ name
843
+ description
844
+ enabled
845
+ }
846
+ }
847
+ }
848
+ }
849
+ cloudAccount {
850
+ id
851
+ name
852
+ externalId
853
+ cloudProvider
854
+ }
855
+ location {
856
+ countryCode
857
+ state
858
+ }
859
+ severity
860
+ totalMatchCount
861
+ uniqueMatchCount
862
+ graphEntity {
863
+ id
864
+ name
865
+ type
866
+ properties
867
+ projects {
868
+ id
869
+ name
870
+ slug
871
+ isFolder
872
+ }
873
+ }
874
+ externalSource
875
+ }
876
+ """
877
+
878
+
879
+ SEVERITY_MAP = {
880
+ "CRITICAL": IssueSeverity.High.value,
881
+ "HIGH": IssueSeverity.High.value,
882
+ "MEDIUM": IssueSeverity.Moderate.value,
883
+ "LOW": IssueSeverity.Low.value,
884
+ None: IssueSeverity.NotAssigned.value,
885
+ }
886
+
887
+ BEARER = "Bearer "
888
+
889
+
890
+ class WizVulnerabilityType(Enum):
891
+ """Enum for Wiz vulnerability types."""
892
+
893
+ HOST_FINDING = "host_finding"
894
+ DATA_FINDING = "data_finding"
895
+ VULNERABILITY = "vulnerability"
896
+ CONFIGURATION = "configuration_finding"
897
+ ISSUE = "issue"
898
+
899
+
900
+ def get_wiz_vulnerability_queries(project_id: str, filter_by: Optional[dict] = None) -> List[dict]:
901
+ """Get the Wiz vulnerability queries.
902
+
903
+ :param str project_id: The project ID
904
+ :param Optional[dict] filter_by: Optional filter criteria
905
+ :return: List of query configurations
906
+ :rtype: List[dict]
907
+ """
908
+ if not filter_by:
909
+ filter_by = {"projectId": [project_id]}
910
+
911
+ return [
912
+ {
913
+ "type": WizVulnerabilityType.VULNERABILITY,
914
+ "query": VULNERABILITY_QUERY,
915
+ "topic_key": "vulnerabilityFindings",
916
+ "file_path": VULNERABILITY_FILE_PATH,
917
+ "asset_lookup": "vulnerableAsset",
918
+ "variables": {
919
+ "first": 200,
920
+ "filterBy": filter_by,
921
+ "fetchTotalCount": False,
922
+ },
923
+ },
924
+ {
925
+ "type": WizVulnerabilityType.CONFIGURATION,
926
+ "query": CLOUD_CONFIG_FINDING_QUERY,
927
+ "topic_key": "configurationFindings",
928
+ "file_path": CLOUD_CONFIG_FINDINGS_FILE_PATH,
929
+ "asset_lookup": "resource",
930
+ "variables": {
931
+ "first": 200,
932
+ "quick": True,
933
+ "filterBy": {
934
+ "rule": {},
935
+ "resource": {"projectId": [project_id]},
936
+ },
937
+ },
938
+ },
939
+ {
940
+ "type": WizVulnerabilityType.HOST_FINDING,
941
+ "query": HOST_VULNERABILITY_QUERY,
942
+ "topic_key": "hostConfigurationRuleAssessments",
943
+ "file_path": HOST_VULNERABILITY_FILE_PATH,
944
+ "asset_lookup": "resource",
945
+ "variables": {
946
+ "first": 200,
947
+ "filterBy": {
948
+ "resource": {"projectId": [project_id]},
949
+ "frameworkCategory": [],
950
+ },
951
+ },
952
+ },
953
+ {
954
+ "type": WizVulnerabilityType.DATA_FINDING,
955
+ "query": DATA_FINDING_QUERY,
956
+ "topic_key": "dataFindingsGroupedByValue",
957
+ "file_path": DATA_FINDINGS_FILE_PATH,
958
+ "asset_lookup": "resource",
959
+ "variables": {
960
+ "first": 200,
961
+ "filterBy": {"projectId": [project_id]},
962
+ "orderBy": {"field": "FINDING_COUNT", "direction": "DESC"},
963
+ "groupBy": "GRAPH_ENTITY",
964
+ },
965
+ },
966
+ ]
967
+
968
+
969
+ def get_wiz_issue_queries(project_id: str, filter_by: Optional[dict] = None) -> List[dict]:
970
+ """Get the Wiz issue queries.
971
+
972
+ :param str project_id: The project ID
973
+ :param Optional[dict] filter_by: Optional filter criteria
974
+ :return: List of query configurations
975
+ :rtype: List[dict]
976
+ """
977
+ if not filter_by:
978
+ filter_by = {"project": project_id, "status": ["OPEN", "IN_PROGRESS"]}
979
+
980
+ return [
981
+ {
982
+ "type": WizVulnerabilityType.ISSUE,
983
+ "query": ISSUE_QUERY,
984
+ "topic_key": "issues",
985
+ "file_path": ISSUES_FILE_PATH,
986
+ "variables": {
987
+ "first": 200,
988
+ "filterBy": filter_by,
989
+ "fetchTotalCount": True,
990
+ "fetchIssues": True,
991
+ "fetchSecurityScoreImpact": False,
992
+ "fetchThreatDetectionDetails": False,
993
+ "fetchActorsAndResourcesGraphEntities": False,
994
+ "fetchCloudAccountsAndCloudOrganizations": False,
995
+ "fetchMultipleSourceRules": False,
996
+ "groupBy": "SOURCE_RULE",
997
+ "groupOrderBy": {"field": "SEVERITY", "direction": "DESC"},
998
+ "orderBy": {"direction": "DESC", "field": "SEVERITY"},
999
+ },
1000
+ },
1001
+ ]