Skip to content

[REVIEW] aws-review: add organization-wide evidence scope #190

@mlodygbelmondo

Description

@mlodygbelmondo

Skill Being Reviewed

Skill name: aws-review
Skill path: skills/cloud/aws-review/

False Positive Analysis

Benign single-account evidence that can be over-reported as an organization-wide failure:

resource "aws_cloudtrail" "member_local" {
  name                          = "member-local-trail"
  is_multi_region_trail         = true
  enable_log_file_validation    = true
  include_global_service_events = true
}

Why this is a false positive risk:

The skill evaluates AWS IaC, AWS CLI output, and configuration exports against CIS AWS Foundations v3.0.0, but the output does not require reviewers to record account, organization, OU, delegated administrator, and Region scope for each evidence source. In a multi-account AWS Organizations environment, a member-account trail, analyzer, or Security Hub export can be useful local evidence but insufficient for organization-wide conclusions. Conversely, an organization trail or centrally managed Security Hub policy may cover accounts where local IaC appears incomplete. Without scope fields, reviewers can either over-report missing controls in member accounts or overclaim organization coverage from a single account export.

Coverage Gaps

Missed variant 1: Organization trail coverage is not separated from member-account trails

Evidence reviewed:
  account_id: 111111111111
  cloudtrail: member-local-trail
  is_multi_region_trail: true
Missing:
  is_organization_trail
  delegated administrator account
  covered organization accounts/OUs
  excluded or suspended accounts

Why it should be caught:

AWS CloudTrail supports organization trails that log events for the management account and all member accounts in an AWS Organization. A pass/fail result for CIS logging controls should identify whether the evidence is account-local or organization-wide, which account owns the trail, and which Regions/accounts are covered.

Missed variant 2: IAM Access Analyzer scope is account-level when an organization analyzer is required

resource "aws_accessanalyzer_analyzer" "account" {
  analyzer_name = "account-zone"
  type          = "ACCOUNT"
}

Why it should be caught:

CIS 1.20 says Access Analyzer should be enabled for all Regions, but in a multi-account environment the review also needs to distinguish account analyzers from organization analyzers and delegated administrator configuration. An account analyzer in one workload account does not prove organization-level external access or unused-access coverage.

Missed variant 3: Security Hub central configuration and self-managed targets change coverage

Security Hub evidence:
  delegated_admin: security-tooling
  home_region: us-east-1
  linked_regions: eu-central-1, us-west-2
  root: centrally managed
  sandbox OU: self-managed

Why it should be caught:

AWS Security Hub CSPM central configuration can apply standards and controls to accounts and OUs across linked Regions, but targets can be centrally managed or self-managed. A Security Hub finding export from a delegated administrator is not automatically full-organization evidence unless the report records home Region, linked Regions, configuration policies, target associations, and self-managed exceptions.

Missed variant 4: SCP and delegated-admin boundaries can make source-level IAM findings misleading

{
  "Effect": "Allow",
  "Action": "*",
  "Resource": "*"
}

Why it should be caught:

A local IAM policy with broad permissions is still important, but effective risk depends on SCPs, permission boundaries, session policies, resource policies, and delegated admin boundaries. The skill should not mark a broad local allow as fully mitigated by an SCP without evidence, but it should record effective-access constraints so severity reflects the actual blast radius.

Edge Cases

  • Organization-wide controls can be configured from management accounts or delegated administrator accounts; evidence should record which account supplied the data.
  • Security Hub central configuration uses a home Region and linked Regions; opt-in Regions and self-managed accounts/OUs can create coverage gaps.
  • AWS Config aggregators and Security Hub aggregations can be scoped to selected accounts/Regions; sampled or partial exports should not be treated as full coverage.
  • SCPs do not grant permissions; they only set maximum permissions. Reviewers should not treat an SCP as proof that a control passes unless the underlying IAM/resource configuration is also understood.
  • Suspended, newly created, and unjoined accounts can be omitted from organization-wide exports; reports need a coverage denominator.

Remediation Quality

  • Fix resolves the vulnerability
  • Fix doesn't introduce new security issues
  • Fix doesn't break functionality
  • Issues found: Add organization/account/OU/Region evidence scope fields, delegated administrator status, central-configuration coverage, and effective-access qualifiers. Add Not Evaluable from Single Account outcomes when the available evidence cannot prove organization-wide AWS posture.

Comparison to Other Tools

Tool / Framework Catches this? Notes
AWS Organizations / SCP review Partial Shows maximum permission boundaries and account hierarchy, but not the full resource posture by itself.
AWS CloudTrail organization trails Yes for logging scope Strong evidence for organization-wide event logging when account/Region coverage and delivery are verified.
IAM Access Analyzer organization analyzers Partial Helps identify external and unused access across an organization, but analyzer type, Region, and delegated admin state matter.
Security Hub CSPM central configuration Partial Strong posture-management evidence when home Region, linked Regions, configuration policies, and target associations are recorded.
AWS Config aggregators Partial Useful for resource/config coverage, but reports must record aggregator scope and excluded accounts/Regions.

Overall Assessment

Strengths:

  • Clear CIS AWS Foundations v3.0.0 structure and practical findings template.
  • Good coverage of IAM, S3, CloudTrail, monitoring, networking, and IMDSv2.
  • Useful warning not to count non-evaluable controls as passing.
  • Good common pitfalls around account-level versus bucket-level S3 public access blocks and multi-region CloudTrail.

Needs improvement:

  • The output format should require evidence scope: management account, delegated admin account, member account, OU, Region, and organization coverage denominator.
  • Organization trails, Security Hub central configuration, IAM Access Analyzer organization analyzers, AWS Config aggregators, and SCPs should be handled as first-class evidence sources.
  • Findings should separate local account risk from organization-wide coverage claims.
  • Add Not Evaluable from Single Account / Not Evaluable from IaC Only reason codes.

Priority recommendations:

  1. Add an AWS Organization Coverage section with organization ID, management account, delegated administrators, accounts/OUs reviewed, Regions reviewed, excluded accounts, and evidence source date.
  2. Add per-finding evidence fields: Evidence scope, Account/OU/Region, Delegated admin?, Organization-wide?, Coverage denominator, and Not Evaluable reason.
  3. Add specific checks for CloudTrail organization trails, Security Hub CSPM central configuration, IAM Access Analyzer organization analyzers, AWS Config aggregators, and SCP/permission-boundary effective-access qualifiers.
  4. Add severity guidance for local broad IAM allows constrained by SCPs: do not mark them safe without proof, but calibrate blast radius when effective-access evidence exists.

Sources Checked

Bounty Info

  • I have read and agree to the CONTRIBUTING.md bounty terms
  • Preferred payment method: to be provided privately after acceptance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions