cloud-audit 2.3.0__tar.gz → 2.3.1__tar.gz

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.
Files changed (173) hide show
  1. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/CHANGELOG.md +157 -1
  2. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/PKG-INFO +129 -37
  3. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/README.md +127 -35
  4. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/SECURITY.md +5 -6
  5. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/action.yml +51 -19
  6. cloud_audit-2.3.1/assets/blast-audit-boardroom.png +0 -0
  7. cloud_audit-2.3.1/assets/blast-audit-counterfactual.png +0 -0
  8. cloud_audit-2.3.1/assets/blast-audit-hero.png +0 -0
  9. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/mkdocs.yml +1 -0
  10. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/pyproject.toml +2 -2
  11. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/bsi_c5_2020.json +20 -8
  12. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/cis_aws_v3.json +4 -2
  13. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/hipaa_security.json +11 -5
  14. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/iso27001_2022.json +20 -8
  15. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/nis2_directive.json +20 -7
  16. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/frameworks/soc2_type2.json +20 -8
  17. cloud_audit-2.3.1/src/cloud_audit/providers/aws/checks/config_.py +484 -0
  18. cloud_audit-2.3.1/src/cloud_audit/providers/aws/checks/ddb.py +522 -0
  19. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/s3.py +214 -14
  20. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/provider.py +4 -0
  21. cloud_audit-2.3.1/tests/aws/test_config.py +245 -0
  22. cloud_audit-2.3.1/tests/aws/test_ddb.py +212 -0
  23. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_s3.py +119 -2
  24. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_compliance_frameworks.py +5 -0
  25. cloud_audit-2.3.0/src/cloud_audit/providers/aws/checks/config_.py +0 -145
  26. cloud_audit-2.3.0/tests/aws/test_config.py +0 -82
  27. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.cloud-audit.example.yml +0 -0
  28. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/FUNDING.yml +0 -0
  29. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  30. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  31. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  32. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/dependabot.yml +0 -0
  33. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/workflows/ci.yml +0 -0
  34. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/workflows/docs.yml +0 -0
  35. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/workflows/example-scan.yml +0 -0
  36. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.github/workflows/release.yml +0 -0
  37. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.gitignore +0 -0
  38. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.mcp.json +0 -0
  39. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/.pre-commit-hooks.yaml +0 -0
  40. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/CODEOWNERS +0 -0
  41. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/CODE_OF_CONDUCT.md +0 -0
  42. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/CONTRIBUTING.md +0 -0
  43. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/Dockerfile +0 -0
  44. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/LICENSE +0 -0
  45. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/Makefile +0 -0
  46. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/ROADMAP.md +0 -0
  47. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/assets/demo.gif +0 -0
  48. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/assets/logo-nobg.png +0 -0
  49. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/assets/logo.png +0 -0
  50. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/assets/report-preview.png +0 -0
  51. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/assets/social-preview.png +0 -0
  52. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/examples/daily-scan-with-diff.yml +0 -0
  53. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/examples/github-actions.yml +0 -0
  54. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/examples/post-deploy-scan.yml +0 -0
  55. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/overrides/main.html +0 -0
  56. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/scripts/generate_demo_gif.py +0 -0
  57. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/scripts/generate_report_screenshot.py +0 -0
  58. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/server.json +0 -0
  59. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/__init__.py +0 -0
  60. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/__main__.py +0 -0
  61. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/blast_radius.py +0 -0
  62. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/cli.py +0 -0
  63. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/__init__.py +0 -0
  64. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/compliance/engine.py +0 -0
  65. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/config.py +0 -0
  66. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/correlate.py +0 -0
  67. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/cost_model.py +0 -0
  68. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/diff.py +0 -0
  69. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/graph.py +0 -0
  70. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/history.py +0 -0
  71. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/mcp_server.py +0 -0
  72. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/models.py +0 -0
  73. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/__init__.py +0 -0
  74. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/__init__.py +0 -0
  75. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/__init__.py +0 -0
  76. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/account.py +0 -0
  77. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/backup.py +0 -0
  78. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/bedrock.py +0 -0
  79. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/cloudtrail.py +0 -0
  80. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/cloudwatch.py +0 -0
  81. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/ec2.py +0 -0
  82. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/ecs.py +0 -0
  83. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/efs.py +0 -0
  84. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/eip.py +0 -0
  85. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/guardduty.py +0 -0
  86. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/iam.py +0 -0
  87. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/inspector.py +0 -0
  88. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/kms.py +0 -0
  89. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/lambda_.py +0 -0
  90. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/rds.py +0 -0
  91. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/sagemaker.py +0 -0
  92. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/secrets.py +0 -0
  93. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/securityhub.py +0 -0
  94. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/ssm.py +0 -0
  95. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/vpc.py +0 -0
  96. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/checks/waf.py +0 -0
  97. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/iam_analyzer.py +0 -0
  98. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/iam_trust_graph.py +0 -0
  99. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/__init__.py +0 -0
  100. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/cloudtrail_tampering.py +0 -0
  101. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/cryptomining_role.py +0 -0
  102. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/datazone_overgrant.py +0 -0
  103. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/lambda_function_url.py +0 -0
  104. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/mmdsv1_in_use.py +0 -0
  105. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/quarantine_policy.py +0 -0
  106. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/roles_anywhere_abuse.py +0 -0
  107. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/ses_phishing.py +0 -0
  108. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/trufflehog_ua.py +0 -0
  109. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/aws/threat_feed/whoami_confusion.py +0 -0
  110. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/providers/base.py +0 -0
  111. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/py.typed +0 -0
  112. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/__init__.py +0 -0
  113. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/compliance_html.py +0 -0
  114. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/compliance_markdown.py +0 -0
  115. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/diff_markdown.py +0 -0
  116. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/html.py +0 -0
  117. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/markdown.py +0 -0
  118. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/sarif.py +0 -0
  119. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/reports/templates/report.html.j2 +0 -0
  120. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/root_cause.py +0 -0
  121. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/scanner.py +0 -0
  122. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/src/cloud_audit/simulate.py +0 -0
  123. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/__init__.py +0 -0
  124. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/__init__.py +0 -0
  125. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_bedrock.py +0 -0
  126. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_cis_checks.py +0 -0
  127. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_cloudtrail.py +0 -0
  128. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_cloudwatch.py +0 -0
  129. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_ec2.py +0 -0
  130. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_ecs.py +0 -0
  131. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_eip.py +0 -0
  132. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_guardduty.py +0 -0
  133. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_iam.py +0 -0
  134. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_iam_analyzer.py +0 -0
  135. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_iam_trust_graph.py +0 -0
  136. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_kms.py +0 -0
  137. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_lambda.py +0 -0
  138. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_rds.py +0 -0
  139. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_sagemaker.py +0 -0
  140. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_secrets.py +0 -0
  141. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_ssm.py +0 -0
  142. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/test_vpc.py +0 -0
  143. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/__init__.py +0 -0
  144. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_cloudtrail_tampering.py +0 -0
  145. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_cryptomining_role.py +0 -0
  146. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_datazone_overgrant.py +0 -0
  147. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_lambda_function_url.py +0 -0
  148. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_mmdsv1_in_use.py +0 -0
  149. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_quarantine_policy.py +0 -0
  150. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_roles_anywhere_abuse.py +0 -0
  151. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_ses_phishing.py +0 -0
  152. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_trufflehog_ua.py +0 -0
  153. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/aws/threat_feed/test_whoami_confusion.py +0 -0
  154. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/conftest.py +0 -0
  155. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_blast_radius.py +0 -0
  156. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_cli.py +0 -0
  157. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_cli_scan.py +0 -0
  158. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_config.py +0 -0
  159. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_correlate.py +0 -0
  160. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_cost_model.py +0 -0
  161. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_diff.py +0 -0
  162. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_graph.py +0 -0
  163. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_history.py +0 -0
  164. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_html.py +0 -0
  165. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_markdown.py +0 -0
  166. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_mcp_server.py +0 -0
  167. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_models.py +0 -0
  168. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_provider.py +0 -0
  169. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_root_cause.py +0 -0
  170. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_sarif.py +0 -0
  171. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_scanner.py +0 -0
  172. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_simulate.py +0 -0
  173. {cloud_audit-2.3.0 → cloud_audit-2.3.1}/tests/test_soc2_framework.py +0 -0
@@ -7,6 +7,161 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.3.1] - 2026-05-26
11
+
12
+ ### Added
13
+
14
+ - **DynamoDB hygiene module** - new `ddb.py` module adds 3 checks covering
15
+ production-baseline DynamoDB configuration. cloud-audit previously had zero
16
+ DynamoDB coverage across 23 services; v2.3.1 closes that gap.
17
+
18
+ - **`aws-ddb-001` - Encryption at rest visibility** (tiered severity).
19
+ Surfaces tables where `SSEDescription` is absent (AWS-owned default key,
20
+ `LOW` - encryption is on but no CloudTrail audit trail, no rotation
21
+ control, no incident-time revocation), `InaccessibleEncryptionDateTime`
22
+ is set (`CRITICAL` - CMK was disabled or access revoked, table will be
23
+ archived in 7 days), or `Status != ENABLED` on a steady-state table
24
+ (`HIGH`). AWS-managed KMS (`alias/aws/dynamodb`) and customer-managed
25
+ CMKs both pass. The AWS Security Hub managed standard has no equivalent
26
+ control; cloud-audit is more opinionated because compliance auditors
27
+ (SOC 2, HIPAA, ISO 27001) typically require an auditable key.
28
+ - **`aws-ddb-002` - Point-in-time recovery enabled** (`MEDIUM`). Matches
29
+ AWS Security Hub `DynamoDB.2` severity. Without PITR, accidental drops
30
+ or mass conditional-update bugs are unrecoverable except from on-demand
31
+ backups, which require explicit scheduling.
32
+ - **`aws-ddb-003` - Autoscaling on PROVISIONED tables** (`MEDIUM`). Matches
33
+ AWS Security Hub `DynamoDB.1` severity. PROVISIONED billing with manual
34
+ capacity either over-provisions (cost waste, billed 24/7) or
35
+ under-provisions (`ProvisionedThroughputExceededException`, client
36
+ retries amplifying load). `PAY_PER_REQUEST` tables are skipped. Read-only
37
+ or write-only autoscaling registrations produce a sub-finding identifying
38
+ the missing dimension.
39
+
40
+ All three checks include CLI + Terraform remediation. Pagination via
41
+ `list_tables`. Application Auto Scaling targets are cached per-region for
42
+ the duration of the scan (one API call returns every DDB target in the
43
+ region).
44
+
45
+ - **`aws-cfg-003` - AWS Config recording group complete** (`MEDIUM`). Detects
46
+ recorders that record only a subset of resource types - either via the
47
+ legacy `allSupported=false` configuration or the modern
48
+ `recordingStrategy.useOnly` set to `INCLUSION_BY_RESOURCE_TYPES` or
49
+ `EXCLUSION_BY_RESOURCE_TYPES`. Also fires when `includeGlobalResourceTypes`
50
+ is false, which silently drops every IAM/CloudFront/Route53 change from
51
+ the configuration timeline. Filters out service-linked recorders
52
+ (`recordingScope=INTERNAL`).
53
+
54
+ - **`aws-cfg-004` - AWS Config delivery channel exists and is configured**
55
+ (tiered). Reports `HIGH` when a recorder exists but no delivery channel
56
+ is configured (snapshots and configuration history items go nowhere).
57
+ Reports `LOW` when the delivery channel exists but is throttled to the
58
+ slowest `TwentyFour_Hours` snapshot frequency, or when `s3KmsKeyArn` is
59
+ not set (delivery uses SSE-S3 instead of a CMK).
60
+
61
+ ### Changed
62
+
63
+ - **`aws-s3-004` - Smarter S3 lifecycle check** (community feedback). The
64
+ prior check only fired when a bucket had zero lifecycle rules - which
65
+ missed the most expensive anti-pattern in production: a versioning-enabled
66
+ bucket whose lifecycle rules don't include `NoncurrentVersionExpiration`.
67
+ Without NCVE every object overwrite or delete retains the old version at
68
+ full storage rates indefinitely. The check now cross-references bucket
69
+ versioning state with lifecycle rules:
70
+
71
+ - Versioning `Enabled` or `Suspended` + no `NoncurrentVersionExpiration` in
72
+ any enabled rule -> `MEDIUM` (the storage runaway case; matches AWS
73
+ Security Hub `S3.10`).
74
+ - No enabled lifecycle on an unversioned bucket -> `LOW` (existing
75
+ behaviour preserved).
76
+ - No `AbortIncompleteMultipartUpload` rule -> `LOW` (new sub-finding;
77
+ orphaned multipart uploads accumulate billable storage that never
78
+ appears in regular object listings).
79
+
80
+ Cross-check adds one `get_bucket_versioning` call per bucket; result is
81
+ cached implicitly via the existing bucket-list cache pattern. Backward
82
+ compatible: same check ID, no behaviour change for unversioned buckets.
83
+
84
+ - **`aws-cfg-001` and `aws-cfg-002` - service-linked recorder filtering**.
85
+ Both existing checks now filter out service-linked recorders
86
+ (`recordingScope=INTERNAL`), which are created by other AWS services
87
+ (AWS Security Hub, AWS Audit Manager) and do not replace a
88
+ customer-managed recorder.
89
+
90
+ ### Tests
91
+
92
+ - 812 -> 836 (+24 net). New test files: `tests/aws/test_ddb.py` (12 tests
93
+ covering all four encryption states, PITR enabled/disabled, autoscaling
94
+ with read+write/read-only/none/pay-per-request). `tests/aws/test_config.py`
95
+ expanded with 8 new tests for `aws-cfg-003` and `aws-cfg-004`.
96
+ `tests/aws/test_s3.py` expanded with 4 new tests for the smart lifecycle
97
+ cross-check (versioned without NCVE, versioned with NCVE, lifecycle
98
+ rules-but-no-NCVE, AbortMPU missing).
99
+
100
+ ### Compliance
101
+
102
+ Compliance framework mappings updated to cover the new check IDs:
103
+
104
+ - **SOC 2 Type II**: `aws-cfg-003` and `aws-cfg-004` added to CC2.1, CC3.4,
105
+ CC4.1, CC7.1, CC8.1; `aws-ddb-001` mapped to CC6.1; `aws-ddb-002` mapped
106
+ to A1.2.
107
+ - **HIPAA Security Rule**: `aws-cfg-003` and `aws-cfg-004` added to
108
+ 164.308(a)(1)(i) and 164.308(a)(8); `aws-ddb-001` to 164.312(a)(2)(iv);
109
+ `aws-ddb-002` to 164.308(a)(7)(i).
110
+ - **ISO/IEC 27001:2022**: `aws-cfg-003` and `aws-cfg-004` added to A.5.9,
111
+ A.5.23, A.5.36, A.8.9, A.8.32; `aws-ddb-001` to A.8.24; `aws-ddb-002` to
112
+ A.8.13.
113
+ - **NIS2 Directive**: `aws-cfg-003` and `aws-cfg-004` added to NIS2-RM-01b,
114
+ NIS2-RM-05, NIS2-RM-05b, NIS2-RM-06, NIS2-RM-06b, NIS2-GOV-01;
115
+ `aws-ddb-001` to NIS2-RM-05b.
116
+ - **BSI C5:2020**: `aws-cfg-003` and `aws-cfg-004` added to AM-01, OPS-14,
117
+ COS-07, COS-08, INQ-03; `aws-ddb-001` to CRY-04; `aws-ddb-002` to OPS-06.
118
+ - **CIS AWS Foundations Benchmark v3.0.0**: `aws-cfg-003` and `aws-cfg-004`
119
+ added to control 3.3. CIS v3.0.0 has no DynamoDB controls; the gap is
120
+ documented honestly rather than invented.
121
+
122
+ ### Acknowledgments
123
+
124
+ These improvements were prompted by feedback received via community channels.
125
+
126
+ ### Also in this release (carried over from prior unreleased work)
127
+
128
+ - **GitHub Action hardening** - `action.yml` now pins cloud-audit to a specific
129
+ PyPI version via the new `cloud-audit-version` input (default tracks the
130
+ action's release tag). Previously installed unpinned `cloud-audit` latest,
131
+ which made builds non-reproducible. Version string is validated against
132
+ `[0-9A-Za-z.+-]` before being passed to `pip install`.
133
+
134
+ - **GitHub Action shell injection prevention** - all `run:` blocks moved from
135
+ direct `${{ inputs.* }}` interpolation to env-var pattern (`env:` map +
136
+ bash arrays). `extra-args`, `regions`, `output`, and `diff-baseline` are
137
+ now passed as argv entries to `cloud-audit`, not concatenated into shell
138
+ strings. A malicious workflow author can still pass odd flag values but
139
+ cannot break out of the cloud-audit invocation.
140
+
141
+ - **README polish** - dropped promotional "first/only" wording in three
142
+ places (blast-radius section, AI-SPM row, IAM Privilege Escalation row).
143
+ PMapper row reframed from "this is its open-source replacement" to a
144
+ factual statement of PMapper's last release date and cloud-audit's
145
+ distinct scope. Honest tone over marketing tone.
146
+
147
+ - **README Prowler comparison refreshed** - 572 checks / 83 services / 41
148
+ frameworks updated to 600 / 84 / 44 (verified against
149
+ github.com/prowler-cloud/prowler on 2026-05-25). Dropped unsubstantiated
150
+ "55 fixers" reference and "10+ providers" puffery. Footnote datestamp
151
+ changed from "April 2026" to "2026-05-25".
152
+
153
+ - **README broken links fixed** - two relative links to
154
+ `docs/features/blast-radius.md` (gitignored - the file is published only
155
+ via the docs site, not committed to git) replaced with absolute URLs
156
+ pointing at `https://haitmg.pl/cloud-audit/features/blast-radius/`.
157
+
158
+ - **docs/features/blast-radius.md** - same "first pure-CLI open-source"
159
+ wording softened to "aims to be a lightweight CLI-native alternative".
160
+
161
+ - **SECURITY.md supported versions matrix** - stale `1.1.x` / `1.2.x` rows
162
+ replaced with `2.3.x` (current) / `2.2.x` (security fixes only) / `< 2.2`
163
+ (no). The matrix had not been touched since the v1.x line was current.
164
+
10
165
  ## [2.3.0] - 2026-05-15
11
166
 
12
167
  ### Added
@@ -746,7 +901,8 @@ this trade-off.
746
901
  - Docker image support
747
902
  - Rich terminal UI with progress bar and color-coded findings
748
903
 
749
- [Unreleased]: https://github.com/gebalamariusz/cloud-audit/compare/v1.3.0...HEAD
904
+ [Unreleased]: https://github.com/gebalamariusz/cloud-audit/compare/v2.3.1...HEAD
905
+ [2.3.1]: https://github.com/gebalamariusz/cloud-audit/compare/v2.3.0...v2.3.1
750
906
  [1.3.0]: https://github.com/gebalamariusz/cloud-audit/compare/v1.2.2...v1.3.0
751
907
  [1.2.2]: https://github.com/gebalamariusz/cloud-audit/compare/v1.2.1...v1.2.2
752
908
  [1.2.1]: https://github.com/gebalamariusz/cloud-audit/compare/v1.2.0...v1.2.1
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cloud-audit
3
- Version: 2.3.0
4
- Summary: Open-source AWS security scanner. Blast Radius CLI (forward BFS from arbitrary resource), Threat Feed v1 (10 active-abuse patterns from 2025-2026 incidents), 64 IAM escalation methods, What-If simulator, security trends, AI-SPM (Bedrock/SageMaker), 6 compliance frameworks, 31 attack chain rules, breach cost estimation, and MCP server. Every finding includes CLI + Terraform remediation.
3
+ Version: 2.3.1
4
+ Summary: Open-source AWS security scanner. 99 checks across 24 services. Blast Radius CLI, Threat Feed v1, DynamoDB hygiene (encryption/PITR/autoscaling), opinionated Config checks, smart S3 lifecycle, 64 IAM escalation methods, What-If simulator, AI-SPM (Bedrock/SageMaker), 6 compliance frameworks, 31 attack chain rules, breach cost estimation, MCP server. CLI + Terraform remediation for every finding.
5
5
  Project-URL: Homepage, https://haitmg.pl/cloud-audit/
6
6
  Project-URL: Documentation, https://haitmg.pl/cloud-audit/
7
7
  Project-URL: Source, https://github.com/gebalamariusz/cloud-audit
@@ -52,6 +52,10 @@ Description-Content-Type: text/markdown
52
52
  <!-- mcp-name: io.github.gebalamariusz/cloud-audit -->
53
53
  <h1 align="center">cloud-audit</h1>
54
54
 
55
+ <p align="center">
56
+ <a href="README.md">English</a> | <a href="README_zh-CN.md">简体中文</a>
57
+ </p>
58
+
55
59
  <p align="center">
56
60
  <strong>Find AWS attack paths, IAM escalation routes, and the fixes that matter most.</strong>
57
61
  </p>
@@ -80,14 +84,22 @@ Description-Content-Type: text/markdown
80
84
  <p align="center">
81
85
  <a href="https://haitmg.pl/cloud-audit/">Documentation</a> -
82
86
  <a href="https://haitmg.pl/cloud-audit/getting-started/quick-start/">Quick Start</a> -
83
- <a href="https://haitmg.pl/cloud-audit/compliance/overview/">Compliance</a> -
87
+ <a href="https://haitmg.pl/cloud-audit/features/blast-radius/">Blast Radius</a> -
88
+ <a href="https://blast-audit.haitmg.pl/">Live Visualizer</a> -
84
89
  <a href="https://haitmg.pl/cloud-audit/features/attack-chains/">Attack Chains</a> -
85
90
  <a href="https://haitmg.pl/cloud-audit/features/iam-escalation/">IAM Escalation</a> -
86
91
  <a href="https://haitmg.pl/cloud-audit/features/threat-feed/">Threat Feed</a> -
87
- <a href="https://haitmg.pl/cloud-audit/features/simulate/">Simulator</a> -
88
92
  <a href="https://haitmg.pl/cloud-audit/features/mcp-server/">MCP Server</a>
89
93
  </p>
90
94
 
95
+ <p align="center">
96
+ <a href="https://blast-audit.haitmg.pl/demo/capital-one-2019/?board=1">
97
+ <img src="assets/blast-audit-boardroom.png" alt="blast-audit visualizer - executive briefing view of Snowflake 2024 breach: $28M exposure, 4 years to detect, fix = enforce MFA" width="820">
98
+ </a>
99
+ <br>
100
+ <sub>Drop a <code>cloud-audit blast-radius</code> JSON into the live visualizer at <a href="https://blast-audit.haitmg.pl/">blast-audit.haitmg.pl</a> - or click the screenshot to explore the Snowflake 2024 breach interactively.</sub>
101
+ </p>
102
+
91
103
  ## Quick Start
92
104
 
93
105
  ```bash
@@ -101,30 +113,58 @@ Uses your default AWS credentials and region. Try without an AWS account:
101
113
  cloud-audit demo
102
114
  ```
103
115
 
104
- ### NEW in v2.3: Blast Radius CLI
116
+ ### NEW in v2.3: Blast Radius CLI + live visualizer
105
117
 
106
- Walk outward from a single AWS resource and show what an attacker could reach
107
- if THAT resource were compromised. Pure offline analysis against a saved scan -
108
- zero AWS API calls at blast-radius time. Seed any EC2 instance, IAM role/user,
109
- Lambda function, S3 bucket, or Secrets Manager secret.
118
+ > *Walk outward from any AWS resource and show exactly what an attacker reaches
119
+ > if THAT resource is compromised.* The CLI runs offline against a saved scan
120
+ > (zero AWS API calls at blast-radius time); the matching open visualizer at
121
+ > [blast-audit.haitmg.pl](https://blast-audit.haitmg.pl/) renders the same JSON
122
+ > as an interactive attack graph with break-point highlighting, MITRE ATT&CK
123
+ > overlay, and an executive boardroom mode for CFO/CISO briefings.
124
+
125
+ Seeds: EC2 short id (`i-XXX`), IAM role/user ARN, Lambda ARN, S3 bucket ARN,
126
+ Secrets Manager secret ARN.
110
127
 
111
128
  ```bash
112
- # Quick view: tree of reachable identities + data + impact
113
- cloud-audit blast-radius --resource i-0abc123def456
129
+ # 1. Run a scan once (saves to ~/.cloud-audit/last-scan.json)
130
+ cloud-audit scan
114
131
 
115
- # JSON for the blast-audit visualizer (https://blast-audit.haitmg.pl)
132
+ # 2. Inspect blast radius from any resource (uses the last scan automatically)
133
+ cloud-audit blast-radius --resource i-0abc123def456 # tree (default)
134
+ cloud-audit blast-radius --resource i-0abc123 --format mermaid # for docs/slides
135
+ cloud-audit blast-radius --resource i-0abc123 --format markdown # for PR comments
136
+
137
+ # 3. Export JSON and visualize it interactively
116
138
  cloud-audit blast-radius --resource arn:aws:iam::123456789012:role/deploy \
117
139
  --format json --output blast.json
140
+ # → open https://blast-audit.haitmg.pl/demo/upload/ → drop blast.json
141
+ ```
118
142
 
119
- # Mermaid diagram for docs / slides
120
- cloud-audit blast-radius --resource i-0abc123 --format mermaid
143
+ <p align="center">
144
+ <img src="assets/blast-audit-counterfactual.png" alt="Counterfactual view: applying the IAM fix collapses Capital One exposure from $270M to $0" width="820">
145
+ <br>
146
+ <sub>The visualizer's boardroom mode includes a one-click counterfactual -
147
+ <em>"What stops this attack?"</em> - that animates the exposure tile to
148
+ $0 when you preview the recommended IAM remediation.</sub>
149
+ </p>
121
150
 
122
- # Markdown summary for PR comments
123
- cloud-audit blast-radius --resource i-0abc123 --format markdown
124
- ```
151
+ Seven historical breach scenarios ship pre-loaded for context
152
+ (Capital One 2019, Cryptomining 2025, AgentCore 2026, Snowflake UNC5537 2024,
153
+ nx Supply Chain 2026, Codefinger SSE-C 2025, Trivy / TeamPCP 2026), each with
154
+ verified primary-source citations. See the [Blast Radius documentation](https://haitmg.pl/cloud-audit/features/blast-radius/)
155
+ for expansion rules, the BlastRadiusGraph v1.0 schema, and the risk-score heuristic.
125
156
 
126
- See [docs/features/blast-radius.md](docs/features/blast-radius.md) for the
127
- expansion rules, JSON schema (BlastRadiusGraph v1.0), and risk score heuristic.
157
+ ### Also new since v2.0
158
+
159
+ | Version | Highlight |
160
+ |---|---|
161
+ | **v2.3.0** (May 2026) | **Blast Radius CLI** + live visualizer + 15 security-hardening fixes (Mermaid XSS escape, ID collision, BFS bounds, symlink-safe writes, URL scheme allow-list). 812 tests. |
162
+ | v2.2.1 (May 2026) | TF-001 SES phishing burst escalation + TF-004 defensive-tool exclusion. |
163
+ | v2.2.0 (May 2026) | **Threat Feed v1** - 10 active-abuse detectors from 2025-2026 incidents (cryptomining, leaked-cred scanners, MMDSv1, DataZone, Roles Anywhere, CloudTrail tampering). External research refs on every finding. |
164
+ | v2.1.0 (Apr 2026) | 64 IAM escalation methods, full pathfinding.cloud coverage. |
165
+ | v2.0.0 (Apr 2026) | IAM Escalation graph, What-If simulator, Trend tracking, AI-SPM (Bedrock + SageMaker). |
166
+
167
+ Detail per release in [CHANGELOG.md](CHANGELOG.md).
128
168
 
129
169
  ### NEW in v2.2: Threat Feed
130
170
 
@@ -175,7 +215,7 @@ cloud-audit simulate --fix aws-vpc-002
175
215
  # Score: 34 -> 58 (+24) | Chains broken: 8 of 22 | Findings resolved: 11
176
216
  ```
177
217
 
178
- 94 checks across 23 AWS services. Every finding includes copy-paste AWS CLI + Terraform remediation.
218
+ 99 checks across 24 AWS services. Every finding includes copy-paste AWS CLI + Terraform remediation.
179
219
 
180
220
  <p align="center">
181
221
  <a href="https://www.youtube.com/watch?v=5uHoqggmTB8">
@@ -187,15 +227,17 @@ cloud-audit simulate --fix aws-vpc-002
187
227
 
188
228
  ---
189
229
 
190
- ## What's New in 2.0
230
+ ## Feature matrix
191
231
 
192
- | Feature | What it does |
232
+ | Capability | What it does |
193
233
  |---|---|
194
- | **IAM Privilege Escalation** | 61 escalation methods across 9 categories, including lateral movement detection via AssumeRole graph traversal. PMapper has been dead since 2022 -- this is its open-source replacement, and it covers paths PMapper never did. |
195
- | **What-If Simulator** | `cloud-audit simulate --fix aws-vpc-002` shows score change, chains broken, and risk reduction before you apply anything. |
196
- | **Root Cause Grouping** | "Fix 4 things, break 22 chains." Groups findings by shared root cause and ranks by impact. |
197
- | **Security Posture Trend** | `cloud-audit trend` tracks health score, chains, and risk over time with sparkline visualization. |
198
- | **AI-SPM** | First open-source Bedrock + SageMaker scanner. 5 checks, 3 attack chains (model theft, LLMjacking, data poisoning). |
234
+ | **Blast Radius CLI** (v2.3) | `cloud-audit blast-radius --resource <id>` walks outward from any AWS resource and emits the reachable attack graph as tree, JSON ([BlastRadiusGraph v1.0](https://haitmg.pl/cloud-audit/features/blast-radius/#output-json-blastradiusgraph-v10)), Mermaid, or Markdown. The JSON drops straight into the [live visualizer](https://blast-audit.haitmg.pl/) for interactive exploration. |
235
+ | **Threat Feed v1** (v2.2) | 10 active-abuse detectors from real 2025-2026 incidents - cryptomining, leaked-cred scanners, MMDSv1, DataZone overgrant, Roles Anywhere, CloudTrail tampering. Each detector ships with primary-source citation. |
236
+ | **IAM Privilege Escalation** (v2.1) | 64 escalation methods across 9 categories, including lateral movement detection via AssumeRole graph traversal. PMapper has been unmaintained since v1.1.5 (Jan 2022); cloud-audit offers a CLI-native alternative that covers additional escalation patterns beyond PMapper's IAM-principal scope. |
237
+ | **What-If Simulator** (v2.0) | `cloud-audit simulate --fix aws-vpc-002` shows score change, chains broken, and risk reduction before you apply anything. |
238
+ | **Root Cause Grouping** (v2.0) | "Fix 4 things, break 22 chains." Groups findings by shared root cause and ranks by impact. |
239
+ | **Security Posture Trend** (v2.0) | `cloud-audit trend` tracks health score, chains, and risk over time with sparkline visualization. |
240
+ | **AI-SPM** (v2.0) | Open-source Bedrock + SageMaker scanner. 5 checks, 3 attack chains (model theft, LLMjacking, data poisoning). |
199
241
 
200
242
  ---
201
243
 
@@ -269,15 +311,15 @@ claude mcp add cloud-audit -- uvx --from cloud-audit cloud-audit-mcp
269
311
 
270
312
  ## How It Compares
271
313
 
272
- [Prowler](https://github.com/prowler-cloud/prowler) is the AWS security standard: 572 checks across 83 services, 41 compliance frameworks (CIS, PCI-DSS, HIPAA, SOC2, NIST 800, ISO 27001, GDPR, FedRAMP, NIS2, MITRE ATT&CK and more), 55 auto-remediation fixers, and graph-based attack path analysis in the Prowler App (Cartography + Neo4j). It also covers Azure, GCP, Kubernetes, M365, and 10+ other providers.
314
+ [Prowler](https://github.com/prowler-cloud/prowler) is the AWS security standard: 600 checks across 84 services, 44 compliance frameworks (CIS, PCI-DSS, HIPAA, SOC2, NIST 800, ISO 27001, GDPR, FedRAMP, NIS2, MITRE ATT&CK and more), auto-remediation fixers, and graph-based attack path analysis in the Prowler App (Cartography + Neo4j). It also covers Azure, GCP, Kubernetes, M365, and several other providers.
273
315
 
274
- cloud-audit is AWS-only and intentionally narrower (94 curated checks). It goes deep where Prowler goes wide: attack chain correlation and IAM escalation detection run in the free CLI with zero infrastructure, every finding ships with reviewable Terraform + AWS CLI remediation, and scan diff / drift tracking is built into the CLI.
316
+ cloud-audit is AWS-only and intentionally narrower (99 curated checks). It goes deep where Prowler goes wide: attack chain correlation and IAM escalation detection run in the free CLI with zero infrastructure, every finding ships with reviewable Terraform + AWS CLI remediation, and scan diff / drift tracking is built into the CLI.
275
317
 
276
318
  | Feature | Prowler | cloud-audit |
277
319
  |---------|---------|-------------|
278
- | AWS checks | 572 across 83 services | 94 across 23 services |
279
- | Compliance frameworks (AWS) | 41 (CIS, PCI-DSS, HIPAA, SOC2, NIST, ISO 27001, GDPR, FedRAMP, NIS2, ...) | 6 (CIS v3.0, SOC 2, BSI C5, ISO 27001, HIPAA, NIS2) |
280
- | Auto-remediation | 55 fixers across 17 AWS services (direct API calls) | 94/94 findings with CLI + Terraform output (reviewable, you apply) |
320
+ | AWS checks | 600 across 84 services | 99 across 24 services |
321
+ | Compliance frameworks (AWS) | 44 (CIS, PCI-DSS, HIPAA, SOC2, NIST, ISO 27001, GDPR, FedRAMP, NIS2, ...) | 6 (CIS v3.0, SOC 2, BSI C5, ISO 27001, HIPAA, NIS2) |
322
+ | Auto-remediation | 55 fixers across 17 AWS services (direct API calls) | 99/99 findings with CLI + Terraform output (reviewable, you apply) |
281
323
  | Attack path / graph analysis | Prowler App (Cartography + graph queries) | CLI-native (31 rules, no infra) |
282
324
  | IAM privilege escalation graph | Prowler App | CLI-native (61 methods + AssumeRole graph) |
283
325
  | What-If remediation simulator | No | Yes |
@@ -290,7 +332,30 @@ cloud-audit is AWS-only and intentionally narrower (94 curated checks). It goes
290
332
 
291
333
  Use Prowler for compliance breadth, multi-cloud coverage, and graph-based attack path analysis. Use cloud-audit for fast CLI-native attack chain detection, reviewable Terraform remediation, and CI/CD drift tracking. They are complementary, not competitors - a common setup is Prowler for quarterly compliance evidence plus cloud-audit daily in CI/CD.
292
334
 
293
- <sub>Prowler stats verified from github.com/prowler-cloud/prowler (April 2026). cloud-audit snapshot as of v2.0.1.</sub>
335
+ <sub>Prowler stats verified from github.com/prowler-cloud/prowler on 2026-05-25. cloud-audit snapshot as of v2.3.0.</sub>
336
+
337
+ ### Blast radius specifically
338
+
339
+ Most existing AWS blast-radius tooling either lives behind paid SaaS, requires standing up Neo4j + Cartography, or has been unmaintained for years. `cloud-audit blast-radius` aims to be a lightweight CLI-native alternative: arbitrary AWS resource seeds (EC2, IAM, Lambda, S3, secret), a documented JSON contract (BlastRadiusGraph v1.0) that downstream tools can consume, and no infrastructure to stand up.
340
+
341
+ | Tool | Forward BFS from arbitrary AWS resource? | Pure CLI? | Last release |
342
+ |---|---|---|---|
343
+ | Wiz / Stream Security CloudTwin | yes | no (paid SaaS) | active |
344
+ | Prowler App | yes | no (needs Neo4j + Cartography) | active |
345
+ | Prowler CLI | no | yes | active |
346
+ | PMapper | IAM-only, optimised for privesc-to-admin | yes | v1.1.5, Jan 2022 (unmaintained) |
347
+ | Cloudsplaining | no (IAM policy analysis only) | yes | v0.8.2, Oct 2024 |
348
+ | CloudFox | no for AWS (`lateral-movement` GCP only) | yes | active |
349
+ | DetentionDodger | IAM-only, only post-quarantine users | yes | v1.0, Oct 2024 |
350
+ | awspx | partial (graph + web UI) | Docker | v1.3.4, Aug 2021 (unmaintained) |
351
+ | ScoutSuite | no | yes | v5.14.0, May 2024 |
352
+ | Cartography | no built-in (bring your own Cypher) | no (graph ingestor) | active |
353
+ | BloodHound CE | no for AWS (AD + Azure scope) | no (web app) | active |
354
+ | pathfinding.cloud | no (it's a catalog) | n/a | n/a |
355
+ | Trivy | no | yes | active |
356
+ | **cloud-audit blast-radius** | **yes** | **yes** | **v2.3.0, May 2026** |
357
+
358
+ The companion visualizer at [blast-audit.haitmg.pl](https://blast-audit.haitmg.pl/) consumes the same JSON without an account, install, or upload-to-cloud step. Everything stays in your browser.
294
359
 
295
360
  ---
296
361
 
@@ -401,26 +466,53 @@ cloud-audit never modifies your infrastructure. The `simulate` command runs loca
401
466
 
402
467
  ## What It Checks
403
468
 
404
- 94 checks across IAM, S3, EC2, VPC, RDS, EIP, EFS, CloudTrail, GuardDuty, KMS, CloudWatch, Lambda, ECS, SSM, Secrets Manager, AWS Config, Security Hub, Account, AWS Backup, Amazon Inspector, AWS WAF, Amazon Bedrock, and Amazon SageMaker.
469
+ 99 checks across IAM, S3, EC2, VPC, RDS, EIP, EFS, CloudTrail, GuardDuty, KMS, CloudWatch, Lambda, ECS, SSM, Secrets Manager, AWS Config, Security Hub, Account, AWS Backup, Amazon Inspector, AWS WAF, Amazon Bedrock, Amazon SageMaker, and Amazon DynamoDB.
405
470
 
406
- [See all 94 checks by service](https://haitmg.pl/cloud-audit/checks/) or run `cloud-audit list-checks` locally.
471
+ [See all 99 checks by service](https://haitmg.pl/cloud-audit/checks/) or run `cloud-audit list-checks` locally.
407
472
 
408
473
  ## Documentation
409
474
 
410
475
  Full docs at **[haitmg.pl/cloud-audit](https://haitmg.pl/cloud-audit/)**:
411
476
 
412
477
  - **[Getting Started](https://haitmg.pl/cloud-audit/getting-started/installation/)** - installation, quick start, demo mode
478
+ - **[Blast Radius](https://haitmg.pl/cloud-audit/features/blast-radius/)** - forward BFS from arbitrary AWS resource, JSON schema, visualizer integration
413
479
  - **[Attack Chains](https://haitmg.pl/cloud-audit/features/attack-chains/)** - all 31 rules with MITRE ATT&CK references
414
- - **[IAM Escalation](https://haitmg.pl/cloud-audit/features/iam-escalation/)** - 61 methods, 9 categories (action-based + lateral AssumeRole graph)
480
+ - **[IAM Escalation](https://haitmg.pl/cloud-audit/features/iam-escalation/)** - 64 methods, 9 categories (action-based + lateral AssumeRole graph)
481
+ - **[Threat Feed](https://haitmg.pl/cloud-audit/features/threat-feed/)** - 10 active-abuse detectors from 2025-2026 incidents
415
482
  - **[What-If Simulator](https://haitmg.pl/cloud-audit/features/simulate/)** - simulate remediation impact
416
483
  - **[Compliance](https://haitmg.pl/cloud-audit/compliance/overview/)** - 6 frameworks: CIS, SOC 2, BSI C5, ISO 27001, HIPAA, NIS2
417
484
  - **[All 94 Checks](https://haitmg.pl/cloud-audit/checks/)** - full check reference by service
418
485
 
486
+ ## Companion visualizer
487
+
488
+ The same BlastRadiusGraph v1.0 JSON that `cloud-audit blast-radius --format json` emits also drives the live visualizer at **[blast-audit.haitmg.pl](https://blast-audit.haitmg.pl/)** - no install, no signup, no upload to a third-party cloud (everything runs in your browser).
489
+
490
+ <p align="center">
491
+ <a href="https://blast-audit.haitmg.pl/demo/capital-one-2019/">
492
+ <img src="assets/blast-audit-hero.png" alt="blast-audit operator view of the Capital One 2019 attack chain with the break-point IAM role highlighted" width="820">
493
+ </a>
494
+ </p>
495
+
496
+ Seven historical breach scenarios are pre-loaded with primary-source citations:
497
+
498
+ | Scenario | Year | One-line pitch | URL |
499
+ |---|---|---|---|
500
+ | Capital One | 2019 | SSRF → IMDSv1 → admin S3 (100M records, $190M total damage) | [/demo/capital-one-2019/](https://blast-audit.haitmg.pl/demo/capital-one-2019/) |
501
+ | Cryptomining | 2025 | Leaked AKID → 14 ASGs spinning in 10 minutes | [/demo/cryptomining-2025/](https://blast-audit.haitmg.pl/demo/cryptomining-2025/) |
502
+ | Bedrock AgentCore | 2026 | Sandbox bypass via DNS resolver (AWS classed "won't fix") | [/demo/agentcore-2026/](https://blast-audit.haitmg.pl/demo/agentcore-2026/) |
503
+ | Snowflake / UNC5537 | 2024 | Infostealer-harvested credentials replayed against no-MFA tenants (165 orgs, $28M+ AT&T settlement) | [/demo/snowflake-unc5537-2024/](https://blast-audit.haitmg.pl/demo/snowflake-unc5537-2024/) |
504
+ | nx Supply Chain / UNC6426 | 2026 | Trojanised npm → LLM stealer → GitHub OIDC → AWS Admin in &lt;72 h | [/demo/unc6426-nx-2026/](https://blast-audit.haitmg.pl/demo/unc6426-nx-2026/) |
505
+ | Codefinger | 2025 | AWS-native SSE-C ransomware (no key recovery from CloudTrail) | [/demo/codefinger-ssec-2025/](https://blast-audit.haitmg.pl/demo/codefinger-ssec-2025/) |
506
+ | Trivy / TeamPCP | 2026 | 76 of 77 GitHub Action tags force-pushed to a credential stealer | [/demo/trivy-teampcp-2026/](https://blast-audit.haitmg.pl/demo/trivy-teampcp-2026/) |
507
+
508
+ Boardroom mode (`?board=1` on any scenario) renders the same graph as a CFO/CISO briefing with the dollar exposure, time-to-detect, and recommended fix surfaced as 3 big tiles - click *"What stops this attack?"* and the exposure tile animates to $0.
509
+
419
510
  ## What's Next
420
511
 
421
512
  - Multi-account scanning (AWS Organizations)
422
513
  - SCP + permission boundary evaluation in IAM escalation
423
514
  - Terraform drift detection
515
+ - Security Graph v3.0.0 (network reachability, cross-account propagation, permission-boundary semantics)
424
516
 
425
517
  Past releases: [CHANGELOG.md](CHANGELOG.md)
426
518
 
@@ -431,7 +523,7 @@ git clone https://github.com/gebalamariusz/cloud-audit.git
431
523
  cd cloud-audit
432
524
  pip install -e ".[dev]"
433
525
 
434
- pytest -v # 496 tests
526
+ pytest -v # 812 tests
435
527
  ruff check src/ tests/ # lint
436
528
  mypy src/ # type check
437
529
  ```