This release adds 3 notable features for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+13 more
Affected surfaces
Summary
AI summaryUpdates Tests, Also in this release, and tiered across a mixed release.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | High |
Prevents shell injection in GitHub Action by using env‑var pattern instead of direct interpolation. Prevents shell injection in GitHub Action by using env‑var pattern instead of direct interpolation. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Adds DynamoDB hygiene module with three new checks (ddb.py). Adds DynamoDB hygiene module with three new checks (ddb.py). Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Adds check aws-cfg-003 to detect incomplete AWS Config recording groups. Adds check aws-cfg-003 to detect incomplete AWS Config recording groups. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Adds check aws-cfg-004 to ensure AWS Config delivery channel is configured and secure. Adds check aws-cfg-004 to ensure AWS Config delivery channel is configured and secure. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Enhances check aws-s3-004 to detect missing NoncurrentVersionExpiration in versioned S3 buckets. Enhances check aws-s3-004 to detect missing NoncurrentVersionExpiration in versioned S3 buckets. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Filters out service‑linked recorders in checks aws-cfg-001 and aws-cfg-002. Filters out service‑linked recorders in checks aws-cfg-001 and aws-cfg-002. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Feature | Low |
Pins cloud‑audit version in GitHub Action to specific PyPI release for reproducibility. Pins cloud‑audit version in GitHub Action to specific PyPI release for reproducibility. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Bugfix | Low |
Fixes broken relative links in README by replacing with absolute URLs. Fixes broken relative links in README by replacing with absolute URLs. Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Bugfix | Low |
Updates Prowler comparison statistics in README (600 checks, 84 services, 44 frameworks). Updates Prowler comparison statistics in README (600 checks, 84 services, 44 frameworks). Source: llm_adapter@2026-05-26 Confidence: high |
— |
| Bugfix | Low |
Refreshes SECURITY.md supported‑versions matrix to reflect current 2.3.x and 2.2.x lines. Refreshes SECURITY.md supported‑versions matrix to reflect current 2.3.x and 2.2.x lines. Source: llm_adapter@2026-05-26 Confidence: high |
— |
Full changelog
Added
-
DynamoDB hygiene module - new
ddb.pymodule adds 3 checks covering
production-baseline DynamoDB configuration. cloud-audit previously had zero
DynamoDB coverage across 23 services; v2.3.1 closes that gap.aws-ddb-001- Encryption at rest visibility (tiered severity).
Surfaces tables whereSSEDescriptionis absent (AWS-owned default key,
LOW- encryption is on but no CloudTrail audit trail, no rotation
control, no incident-time revocation),InaccessibleEncryptionDateTime
is set (CRITICAL- CMK was disabled or access revoked, table will be
archived in 7 days), orStatus != ENABLEDon a steady-state table
(HIGH). AWS-managed KMS (alias/aws/dynamodb) and customer-managed
CMKs both pass. The AWS Security Hub managed standard has no equivalent
control; cloud-audit is more opinionated because compliance auditors
(SOC 2, HIPAA, ISO 27001) typically require an auditable key.aws-ddb-002- Point-in-time recovery enabled (MEDIUM). Matches
AWS Security HubDynamoDB.2severity. Without PITR, accidental drops
or mass conditional-update bugs are unrecoverable except from on-demand
backups, which require explicit scheduling.aws-ddb-003- Autoscaling on PROVISIONED tables (MEDIUM). Matches
AWS Security HubDynamoDB.1severity. PROVISIONED billing with manual
capacity either over-provisions (cost waste, billed 24/7) or
under-provisions (ProvisionedThroughputExceededException, client
retries amplifying load).PAY_PER_REQUESTtables are skipped. Read-only
or write-only autoscaling registrations produce a sub-finding identifying
the missing dimension.
All three checks include CLI + Terraform remediation. Pagination via
list_tables. Application Auto Scaling targets are cached per-region for
the duration of the scan (one API call returns every DDB target in the
region). -
aws-cfg-003- AWS Config recording group complete (MEDIUM). Detects
recorders that record only a subset of resource types - either via the
legacyallSupported=falseconfiguration or the modern
recordingStrategy.useOnlyset toINCLUSION_BY_RESOURCE_TYPESor
EXCLUSION_BY_RESOURCE_TYPES. Also fires whenincludeGlobalResourceTypes
is false, which silently drops every IAM/CloudFront/Route53 change from
the configuration timeline. Filters out service-linked recorders
(recordingScope=INTERNAL). -
aws-cfg-004- AWS Config delivery channel exists and is configured
(tiered). ReportsHIGHwhen a recorder exists but no delivery channel
is configured (snapshots and configuration history items go nowhere).
ReportsLOWwhen the delivery channel exists but is throttled to the
slowestTwentyFour_Hourssnapshot frequency, or whens3KmsKeyArnis
not set (delivery uses SSE-S3 instead of a CMK).
Changed
-
aws-s3-004- Smarter S3 lifecycle check (community feedback). The
prior check only fired when a bucket had zero lifecycle rules - which
missed the most expensive anti-pattern in production: a versioning-enabled
bucket whose lifecycle rules don't includeNoncurrentVersionExpiration.
Without NCVE every object overwrite or delete retains the old version at
full storage rates indefinitely. The check now cross-references bucket
versioning state with lifecycle rules:- Versioning
EnabledorSuspended+ noNoncurrentVersionExpirationin
any enabled rule ->MEDIUM(the storage runaway case; matches AWS
Security HubS3.10). - No enabled lifecycle on an unversioned bucket ->
LOW(existing
behaviour preserved). - No
AbortIncompleteMultipartUploadrule ->LOW(new sub-finding;
orphaned multipart uploads accumulate billable storage that never
appears in regular object listings).
Cross-check adds one
get_bucket_versioningcall per bucket; result is
cached implicitly via the existing bucket-list cache pattern. Backward
compatible: same check ID, no behaviour change for unversioned buckets. - Versioning
-
aws-cfg-001andaws-cfg-002- service-linked recorder filtering.
Both existing checks now filter out service-linked recorders
(recordingScope=INTERNAL), which are created by other AWS services
(AWS Security Hub, AWS Audit Manager) and do not replace a
customer-managed recorder.
Tests
- 812 -> 836 (+24 net). New test files:
tests/aws/test_ddb.py(12 tests
covering all four encryption states, PITR enabled/disabled, autoscaling
with read+write/read-only/none/pay-per-request).tests/aws/test_config.py
expanded with 8 new tests foraws-cfg-003andaws-cfg-004.
tests/aws/test_s3.pyexpanded with 4 new tests for the smart lifecycle
cross-check (versioned without NCVE, versioned with NCVE, lifecycle
rules-but-no-NCVE, AbortMPU missing).
Compliance
Compliance framework mappings updated to cover the new check IDs:
- SOC 2 Type II:
aws-cfg-003andaws-cfg-004added to CC2.1, CC3.4,
CC4.1, CC7.1, CC8.1;aws-ddb-001mapped to CC6.1;aws-ddb-002mapped
to A1.2. - HIPAA Security Rule:
aws-cfg-003andaws-cfg-004added to
164.308(a)(1)(i) and 164.308(a)(8);aws-ddb-001to 164.312(a)(2)(iv);
aws-ddb-002to 164.308(a)(7)(i). - ISO/IEC 27001:2022:
aws-cfg-003andaws-cfg-004added to A.5.9,
A.5.23, A.5.36, A.8.9, A.8.32;aws-ddb-001to A.8.24;aws-ddb-002to
A.8.13. - NIS2 Directive:
aws-cfg-003andaws-cfg-004added to NIS2-RM-01b,
NIS2-RM-05, NIS2-RM-05b, NIS2-RM-06, NIS2-RM-06b, NIS2-GOV-01;
aws-ddb-001to NIS2-RM-05b. - BSI C5:2020:
aws-cfg-003andaws-cfg-004added to AM-01, OPS-14,
COS-07, COS-08, INQ-03;aws-ddb-001to CRY-04;aws-ddb-002to OPS-06. - CIS AWS Foundations Benchmark v3.0.0:
aws-cfg-003andaws-cfg-004
added to control 3.3. CIS v3.0.0 has no DynamoDB controls; the gap is
documented honestly rather than invented.
Acknowledgments
These improvements were prompted by feedback received via community channels.
Also in this release (carried over from prior unreleased work)
-
GitHub Action hardening -
action.ymlnow pins cloud-audit to a specific
PyPI version via the newcloud-audit-versioninput (default tracks the
action's release tag). Previously installed unpinnedcloud-auditlatest,
which made builds non-reproducible. Version string is validated against
[0-9A-Za-z.+-]before being passed topip install. -
GitHub Action shell injection prevention - all
run:blocks moved from
direct${{ inputs.* }}interpolation to env-var pattern (env:map +
bash arrays).extra-args,regions,output, anddiff-baselineare
now passed as argv entries tocloud-audit, not concatenated into shell
strings. A malicious workflow author can still pass odd flag values but
cannot break out of the cloud-audit invocation. -
README polish - dropped promotional "first/only" wording in three
places (blast-radius section, AI-SPM row, IAM Privilege Escalation row).
PMapper row reframed from "this is its open-source replacement" to a
factual statement of PMapper's last release date and cloud-audit's
distinct scope. Honest tone over marketing tone. -
README Prowler comparison refreshed - 572 checks / 83 services / 41
frameworks updated to 600 / 84 / 44 (verified against
github.com/prowler-cloud/prowler on 2026-05-25). Dropped unsubstantiated
"55 fixers" reference and "10+ providers" puffery. Footnote datestamp
changed from "April 2026" to "2026-05-25". -
README broken links fixed - two relative links to
docs/features/blast-radius.md(gitignored - the file is published only
via the docs site, not committed to git) replaced with absolute URLs
pointing athttps://haitmg.pl/cloud-audit/features/blast-radius/. -
docs/features/blast-radius.md - same "first pure-CLI open-source"
wording softened to "aims to be a lightweight CLI-native alternative". -
SECURITY.md supported versions matrix - stale
1.1.x/1.2.xrows
replaced with2.3.x(current) /2.2.x(security fixes only) /< 2.2
(no). The matrix had not been touched since the v1.x line was current.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About gebalamariusz/cloud-audit
Open-source AWS security scanner with attack chain detection, breach cost estimation, and copy-paste remediation (CLI + Terraform). 47 checks, 16 attack chain rules. First free standalone AWS security MCP server.
Related context
Related tools
Earlier breaking changes
- v2.2.0 Category enum gains THREAT value, separating active-abuse from SECURITY misconfigurations.
Beta — feedback welcome: [email protected]