Toxic Combinations in AWS and Azure: When Low-Risk Findings Become Critical
Learn what toxic combination cloud security means in AWS and Azure — misconfiguration pairs that create real attack paths, and how security graphs detect them.
In cloud security, the dangerous issues are often pairs and chains — not single misconfigurations. A medium-severity setting plus a high-privilege identity plus internet exposure becomes a toxic combination: individually defensible in a ticket comment, collectively exploitable in an afternoon.
Toxic combination cloud security is the named pairs in AWS and Azure (public + admin, and so on). How you rank a full finding queue is how to prioritize cloud vulnerabilities. How the graph represents hops is attack path analysis.
What makes a combination “toxic”?
A combination is toxic when:
- Two or more findings are low or medium in isolation
- Together they form a complete or partial attack path
- Impact reaches sensitive data, admin control, or lateral movement
Example:
| Finding alone | Severity alone | Combined |
|---|---|---|
| EC2 with outdated package | Medium | — |
| EC2 internet-facing | Medium | Critical path |
| Instance profile with S3 read on prod bucket | High if seen with EC2 | Data exfiltration path |
Toxic combinations in AWS
1. Internet exposure + IAM instance profile
Pattern:
- Security group allows
0.0.0.0/0on 443 or 22 - EC2 has IMDSv1 enabled or SSRF-vulnerable app
- Instance profile can
s3:GetObjecton*or assume powerful role
Why toxic: Remote code execution or credential theft → immediate cloud API access.
Fix: Restrict SG, enforce IMDSv2, scope instance profile to least privilege.
2. Public S3 + sensitive data classification
Pattern:
- Bucket ACL/policy allows public read or list
- Objects tagged or scanned as PII/financial data
Why toxic: Direct data breach without lateral movement.
Fix: Block public access at account level; encrypt and classify data.
3. Lambda URL / API Gateway + over-privileged execution role
Pattern:
- Public function URL or unauthenticated API stage
- Execution role includes
dynamodb:*,secretsmanager:GetSecretValue, or cross-account assume
Why toxic: Serverless entry points are easy to miss in CSPM sweeps.
Fix: Authenticate ingress; shrink execution role.
4. Cross-account role trust + external compromise
Pattern:
- Role trusts entire external account or
*principal - Role has admin or data access in your account
Why toxic: Supply-chain or partner account breach becomes your breach.
Fix: External ID, strict principal ARNs, least privilege.
5. EKS public endpoint + weak RBAC
Pattern:
- Cluster API publicly reachable
system:mastersor cluster-admin bound to broad groups
Why toxic: Kubernetes control plane becomes internet attack surface.
Fix: Private endpoint, IP allowlists, tighten RBAC.
Toxic combinations in Azure
1. Storage account public blob + confidential containers
Pattern:
- Anonymous blob access enabled
- Containers hold backups or exports with credentials
Fix: Disable anonymous access; use private endpoints.
2. NSG allowing RDP/SSH from Internet + managed identity
Pattern:
- NSG rule
Internet → 3389/22 - VM managed identity has Key Vault secrets read or SQL admin
Fix: Just-in-time access, bastion hosts, scope identities.
3. Over-permissive service principal + exposed app registration
Pattern:
- App registration secret in repo or logs
- SP has
ContributororUser Access Administratoron subscription
Fix: Certificate auth, conditional access, role reduction.
4. Azure AD role + weak conditional access
Pattern:
- Global Reader or Helpdesk admin with password reset rights
- No MFA for privileged roles from untrusted locations
Fix: Privileged Identity Management (PIM), MFA, CA policies.
5. App Service public + connection string in app settings
Pattern:
*.azurewebsites.netreachable- SQL connection string with db admin in configuration
Fix: Private Link, Key Vault references, managed identity to SQL.
AWS security misconfiguration vs. toxic combination
| Single misconfiguration | Often rated | Toxic when paired with |
|---|---|---|
| Open port 443 to world | Medium | Known RCE CVE on service |
| Unused IAM user with keys | Low | Keys in public GitHub repo |
| VPC flow logs disabled | Low | Active data exfil you cannot see |
| Encryption off on disk | Medium | Snapshot shared to external account |
CSPM flags the left column. Attack path analysis flags the row.
How security graphs detect toxic combinations
Graph platforms model:
[Internet] --REACHABLE--> [VM + CVE] --ASSUMES--> [Role] --CAN_ACCESS--> [Datastore]
Toxic combination cloud security rules are graph patterns:
internet_exposed AND critical_cve AND path_to_datastorepublic_storage AND sensitive_tagadmin_role AND assumable_from_external_account
OpenSourceOM targets queryable patterns like these in an open, self-hosted graph.
Prioritization playbook
- List all internet-exposed assets (CSPM)
- Attach identities each asset can use (CIEM)
- Overlay vulnerabilities (CWPP/scanner)
- Run path queries to sensitive data
- Remediate combinations — break any edge in the path
One broken edge (remove exposure, patch, or shrink role) collapses the chain.
Prevention: shift-left and guardrails
- IaC policies — block
0.0.0.0/0on admin ports in CI - Account guardrails — S3 Block Public Access, Azure Policy
- Identity boundaries — permission sets per environment
- Graph continuous monitoring — drift breaks old assumptions daily
Key takeaways
- Toxic combinations turn medium findings into critical breach paths
- AWS security misconfiguration and Azure posture issues matter most in pairs
- CNAPP and security graph tools exist to find combinations, not just singles
- Fix paths, not just tickets — break reachability, identity, or vulnerability links
Related: How to prioritize cloud vulnerabilities · CIEM explained