Anatomy of an AWS Cloud Misconfiguration in BFSI background
Back to Journal
Cloud Security

Anatomy of an AWS Cloud Misconfiguration in BFSI

Adayptus Security Research
August 15, 2026
19 min read

The four AWS misconfigurations we repeatedly see in BFSI production environments, and why the chain between them matters more than any single finding. Internet-exposed admin ports, stale IAM keys, missing VPC Flow Logs and permissive KMS policies.

A Security Hub console showing four hundred findings tells you almost nothing useful. The number is a function of how many controls are enabled, not how exposed you are. The question that matters is narrower and harder: which of these findings, in combination, form a path from the internet to something that matters?

The observations below are anonymised and aggregated across multiple AWS assessments of production environments in the Indian BFSI sector. No client, account, application or resource is identified, and every example is sanitised. What is deliberately preserved is the pattern — because the same four findings recur, and they recur together.

The central argument of this article is that severity assigned per-finding is misleading. A Security Hub finding should not automatically be interpreted as an exploitable vulnerability, and a "medium" that sits on an attack path frequently matters more than a "high" that sits in isolation.

Key Takeaways
  • 01Findings are not equally dangerous. Separate configuration weakness, control gap, visibility gap and exploitable exposure.
  • 02The damaging outcomes come from chains, not single misconfigurations.
  • 03Authentication is not an adequate compensating control for an internet-exposed admin port.
  • 04Static IAM keys convert a single host compromise into durable, portable account access.
  • 05Encryption is only as strong as the authorisation around the key.

First, a Taxonomy Worth Adopting

Before the findings, a distinction that changes how a backlog gets prioritised. Most AWS security findings fall into one of five categories, and they warrant different responses.

CategoryMeaningExample
Configuration weaknessDeviates from a hardening baseline; not directly reachableUnencrypted EBS volume on an internal host
Security control gapA preventive control that should exist does notNo MFA on a privileged principal
Detection / visibility gapNot exploitable; you would be blind during an incidentVPC Flow Logs disabled
Directly exploitable exposureReachable from an untrusted network todayRDP open to 0.0.0.0/0
Conditionally criticalLow alone; severe when chainedStale access key on a reachable host

The last row is where most real incidents live, and it is the row a per-finding severity score handles worst.

Finding 1 — Internet-Exposed Administrative Ports

What we observe. Security groups permitting TCP/22 or TCP/3389 inbound from 0.0.0.0/0. Less commonly but more seriously, database and management ports — 3306, 5432, 6379, 27017, 9200 — reachable from the internet. In production environments we have reviewed, these are rarely deliberate; they are almost always a troubleshooting rule that outlived its purpose.

Why it happens. A migration window, an urgent vendor access request, or a break-glass debugging session. Someone opens the port, the incident closes, and nothing prompts removal — because nothing breaks. Security groups have no expiry semantics, so a temporary rule is indistinguishable from a permanent one.

Security Hub signal. EC2.13 and EC2.14 (SSH/RDP from 0.0.0.0/0) under AWS Foundational Security Best Practices, with corresponding CIS AWS Foundations Benchmark controls. Note that these controls check the security group definition, not whether an instance is actually attached and running — which is precisely why a finding needs validation before it is prioritised.

Attack path. Internet-wide scanning identifies the open port within minutes of exposure. From there: credential stuffing against reused passwords, brute force against weak ones, or direct exploitation of an unpatched service. Access to the host is the objective — not the port.

Why authentication is not sufficient. This is the argument we most often have to make explicitly. "It requires a key pair" answers only one of several threats. It does not address a vulnerability in the listening service itself, which is reachable pre-authentication. It does not address a stolen or leaked private key. It does not address a compromised vendor or developer endpoint that legitimately holds credentials. And it does nothing about the log noise that makes genuine authentication anomalies hard to spot. Authentication is a control on who gets in; exposure is a decision about who may attempt entry at all.

How to validate before you prioritise. A security group with an open rule and no attached running instance is a configuration weakness. The same rule attached to a running instance with a public IP, in a subnet with an internet gateway route, is a directly exploitable exposure. Check all three conditions — group, instance state and routing — before assigning severity.

Validation

aws ec2 describe-security-groups \
  --filters Name=ip-permission.cidr,Values='0.0.0.0/0' \
            Name=ip-permission.from-port,Values=22 \
  --query 'SecurityGroups[].GroupId' --output text

# then confirm whether anything is actually behind it
aws ec2 describe-instances \
  --filters Name=instance.group-id,Values=<sg-id> \
            Name=instance-state-name,Values=running \
  --query 'Reservations[].Instances[].{Id:InstanceId,PublicIp:PublicIpAddress}'

Remediation and prevention. Immediately, restrict source ranges to known CIDRs. Strategically, remove the need for inbound administrative access entirely: AWS Systems Manager Session Manager provides shell access over the SSM API with IAM-based authorisation and full session logging, and requires no open inbound port, no bastion and no key distribution. To prevent recurrence, enforce a Service Control Policy or a policy-as-code check in the pipeline that rejects 0.0.0.0/0 on administrative ports, so a non-compliant group cannot be deployed rather than being detected afterwards.

Finding 2 — Stale and Over-Privileged IAM Access Keys

What we observe. Long-lived AKIA keys with last-used dates measured in years; keys belonging to users who have left; keys created for a one-off migration and never revoked; and — the compounding factor — those same keys attached to identities holding far broader permissions than their purpose requires. Across anonymised assessments, a recurring pattern is a service account created for a single integration that has accumulated policies through successive projects.

Why it happens. Keys are created because they are the path of least resistance: a script needs credentials, a vendor tool asks for them, a CI job needs to authenticate. Nothing forces expiry. And crucially, revoking a key risks breaking something unknown, while leaving it costs nothing visible — so the asymmetry always favours inaction.

Security Hub signal. IAM.3 (keys rotated within 90 days), IAM.8 (unused credentials disabled), IAM.22 (unused credentials removed after 45 days), and the CIS controls covering root key existence and credential hygiene.

Why static credentials are structurally different. A temporary credential from an IAM role expires whether or not anyone notices it was stolen. A static key does not: it is portable, works from any network, survives instance termination, and typically triggers nothing when used from an unfamiliar location. It converts a transient host compromise into durable account access — which is the single most consequential property in this article.

Find keys that are old, unused, or both

aws iam generate-credential-report
aws iam get-credential-report --query Content --output text | base64 --decode

# per key: age and last-used service/region
aws iam get-access-key-last-used --access-key-id <AKIA...>

# permissions actually exercised, versus permissions granted
aws iam generate-service-last-accessed-details --arn <principal-arn>

That last command is the one most teams skip and the one that makes least privilege tractable. Rather than reasoning about what a principal might need, service-last-accessed data shows which services it has actually used. Permissions never exercised are the safest place to start cutting.

Remediation and prevention. Disable before deleting — it is reversible and surfaces breakage safely. Investigate any key that is unused but recently active, since that combination is worth understanding rather than simply revoking. Replace static keys with IAM roles: instance profiles for EC2, task roles for ECS, IRSA for EKS, and OIDC federation for CI/CD pipelines, which removes long-lived keys from build systems entirely. Prevent recurrence with an SCP restricting iam:CreateAccessKey to a narrow set of principals, and treat any new key as an exception requiring justification.

Finding 3 — Missing VPC Flow Logs

What we observe. Flow Logs disabled entirely, or enabled on one VPC while others — often those added later, during expansion or acquisition — have none.

This is a visibility gap, not a vulnerability. Enabling Flow Logs prevents nothing. No attacker is deterred by them and no exploit is blocked. Rated purely as a configuration item it is unremarkable, which is exactly why it survives so many remediation cycles — it never looks urgent next to a "critical".

Why it matters anyway. Its value is realised entirely during incident response, at which point it cannot be retrofitted. CloudTrail answers which API calls were made. GuardDuty answers which known-bad patterns were detected. Neither answers what talked to what, when, and how much data moved. Without Flow Logs, questions like "did this host communicate with an external endpoint before we contained it" and "how much data left the environment" are unanswerable — and unanswerable questions force worst-case assumptions in regulatory notification.

For BFSI entities in India this has a specific operational consequence. CERT-In directions require specified incidents to be reported within six hours of detection, and CERT-In directions also set expectations around retention of ICT system logs. An organisation that cannot characterise scope inside that window is not reporting from evidence; it is reporting from assumption.

Remediation and prevention. Enable at the VPC level with a defined retention period, deliver to S3 or CloudWatch Logs in a dedicated logging account an attacker with production credentials cannot reach, and — the step that converts storage into detection — feed them into your SIEM with rules that actually fire. Logs nobody queries are an archive, not a control. Prevent recurrence by making Flow Logs part of the landing-zone template so new VPCs inherit them, rather than a checklist item at build time. This is the same principle we cover in cloud misconfigurations that cause breaches: fix the template, not the instance.

Finding 4 — Overly Permissive KMS Key Policies

What we observe. Key policies with wildcards in the principal, action or resource position. The pattern below is common in environments where a key was created quickly to unblock a deployment:

Over-permissive — sanitised

{
  "Sid": "AllowAccountUse",
  "Effect": "Allow",
  "Principal": { "AWS": "arn:aws:iam::<account-id>:root" },
  "Action": "kms:*",
  "Resource": "*"
}

This grants every KMS action to the entire account, delegating authorisation wholly to IAM. It is not automatically a breach — but it means the key policy provides no independent constraint, so any IAM principal with permissive KMS permissions can decrypt.

Constrained — sanitised

{
  "Sid": "AllowServiceRoleDecryptOnly",
  "Effect": "Allow",
  "Principal": { "AWS": "arn:aws:iam::<account-id>:role/<service-role>" },
  "Action": ["kms:Decrypt", "kms:DescribeKey"],
  "Resource": "*",
  "Condition": {
    "StringEquals": { "kms:ViaService": "s3.<region>.amazonaws.com" }
  }
}

Why encryption alone is not the control. Encryption at rest defends against a specific threat: someone obtaining the underlying storage. It does not defend against an authorised call. If a compromised principal can invoke kms:Decrypt, the data is returned in plaintext through a legitimate API path, and the encryption is transparent to the attacker. Encryption at rest satisfies a control requirement under most frameworks; whether it provides meaningful protection depends entirely on the authorisation around the key.

Remediation and prevention. Enumerate policies with wildcard actions, scope principals to specific roles, constrain actions to those genuinely required, and add kms:ViaService or encryption-context conditions so a key usable for S3 cannot be used arbitrarily. Separate duties so key administrators and key users are distinct — a role that can schedule key deletion should not also be a routine data consumer. Review policies on a defined cycle rather than only at creation, since drift accumulates.

How These Combine: The Path That Matters

Individually, three of the four findings above are arguable. Chained, they are not. The realistic sequence:

Composite attack path
  • 01Internet-exposed administrative service is discovered by routine scanning — no targeting required.
  • 02Credential compromise or service exploitation yields shell access to the host.
  • 03Static IAM credentials are discovered on disk — in a profile, an environment file, a deployment script, or CI configuration.
  • 04Excessive permissions on that identity extend access well beyond the compromised host.
  • 05Permissive KMS policy allows decryption of data the attacker can now reach.
  • 06Absent Flow Logs mean the scope of access and volume of egress cannot be reconstructed afterwards.

Note what the sixth step does. It does not help the attacker — it damages the defender's ability to bound the incident. A finding that is genuinely unexploitable can still determine whether you notify ten thousand customers or a hundred.

The risk changes significantly when these appear together, and a per-finding severity model cannot express that. The practical fix is to ask a different question during triage: what does this finding enable, and what is one step away from it?

Why This Lands Harder in BFSI

The technical mechanics are identical in any sector. The consequences are not.

BFSI environments concentrate sensitive customer and financial data, operate large and fast-changing cloud estates, and carry heavy third-party and supply-chain dependency through payment processors, KYC providers and core banking integrations — each of which is typically granted programmatic access, and therefore an identity worth compromising.

The regulatory dimension deserves care rather than alarm. RBI expectations for regulated entities address security operations, access control and incident response; CERT-In directions set incident reporting and log retention obligations; ISO 27001 treats access control and cryptographic key management as controls requiring evidence; and PCI DSS applies where cardholder data is in scope. None of these should be read as meaning that a single Security Hub finding is automatically a regulatory violation. An open security group is a technical weakness; whether it constitutes non-compliance depends on scope, applicability, compensating controls and how the requirement is actually written. Conflating the two damages credibility with auditors and with engineering teams, and we would rather teams argue severity on technical grounds than on a compliance claim that does not survive scrutiny.

What is defensible is narrower and stronger: these four patterns weaken the evidence base that regulated entities are expected to maintain, and the visibility gap in particular directly undermines the ability to meet a six-hour reporting obligation with facts rather than estimates.

Remediation Matrix

FindingTypical riskImmediate actionStrategic control
SSH/RDP exposed publiclyHigh to Critical, depending on contextRestrict source ranges; remove public accessSSM Session Manager; bastion architecture
Stale IAM keysHighDisable and investigate unused credentialsIAM roles and temporary credentials
Missing VPC Flow LogsMediumEnable loggingCentralised detection and SIEM integration
KMS wildcard permissionsHighRestrict principals and actionsLeast-privilege key governance

The "typical risk" column is a starting point, not a verdict. Severity should be derived from the actual resource, its reachability, the permissions attached, the sensitivity of the data behind it and the compensating controls present — not assigned from the name of the control that produced the finding. Two identical EC2.13 findings can differ by an order of magnitude in real risk.

Seven Actions Worth Taking This Quarter

Practical next steps
  • 01Enumerate every internet-reachable administrative port across all accounts and regions, and verify reachability rather than reading the rule.
  • 02Generate a credential report and disable every key unused for 90 days, starting with those on privileged identities.
  • 03Run service-last-accessed analysis on your ten most privileged principals and remove permissions never exercised.
  • 04Enable VPC Flow Logs on every VPC, ship to an isolated logging account, and confirm at least one detection actually fires.
  • 05Audit KMS key policies for wildcards and add kms:ViaService or encryption-context conditions to keys guarding regulated data.
  • 06Replace CI/CD static keys with OIDC federation, removing long-lived credentials from build systems.
  • 07Re-triage your Security Hub backlog by attack path rather than by severity label, and fix whole chains instead of individual findings.

The Underlying Point

Every finding discussed here is well documented and none is novel. They persist not because they are hard to fix but because, examined individually, each looks tolerable — and a per-finding severity model never surfaces the combination that makes them dangerous.

AWS Security Hub is most valuable when organisations stop treating findings as an isolated compliance checklist and start analysing how multiple configuration weaknesses can form real attack paths. A backlog sorted by severity closes the most findings. A backlog sorted by attack path closes the most risk — and those are rarely the same list.

How Adayptus Helps

Related reading: top cloud security risks for CISOs, CSPM vs CWPP vs CNAPP, and cloud security for fintech and NBFCs in India.

Frequently Asked Questions

Click any question to expand the answer.

QIs every Security Hub finding a vulnerability?

No. Findings fall into distinct categories: configuration weaknesses that deviate from a baseline without being reachable, control gaps where a preventive measure is absent, visibility gaps that are not exploitable at all, directly exploitable exposures, and conditionally critical items that only matter when chained. A security group allowing SSH from anywhere with no running instance behind it is not the same risk as the identical rule on an internet-facing production host, though both produce the same finding.

QWe use key-based SSH authentication. Is an open port still a problem?

Yes. Key-based authentication addresses password guessing and nothing else. It does not protect against a vulnerability in the SSH daemon itself, which is reachable before authentication completes; it does not protect against a stolen or leaked private key; and it does not protect against a compromised developer or vendor endpoint that legitimately holds the key. Authentication governs who gets in. Exposure governs who may attempt entry at all, and those are separate decisions.

QWhy prioritise VPC Flow Logs if they prevent nothing?

Because their value is realised during an incident and cannot be retrofitted at that point. CloudTrail records API calls and GuardDuty flags known-bad patterns, but neither answers what communicated with what, when, and how much data moved. Without that, the scope of a compromise cannot be bounded, which forces worst-case assumptions in customer and regulatory notification. A control that prevents nothing can still determine whether you notify a hundred people or a hundred thousand.

QOur data is encrypted with KMS. Does a permissive key policy still matter?

It matters more, not less. Encryption at rest defends against someone obtaining the underlying storage. It does not defend against an authorised API call: if a compromised principal can invoke kms:Decrypt, plaintext is returned through a legitimate path and the encryption is transparent to the attacker. Encryption satisfies a control requirement under most frameworks, but whether it provides meaningful protection depends entirely on the authorisation around the key.

QDoes an open security group mean we are non-compliant with RBI or PCI DSS?

Not automatically, and treating it that way is counterproductive. A technical weakness and a regulatory violation are different claims. Whether a given configuration constitutes non-compliance depends on the scope of the requirement, whether it applies to that environment, what compensating controls exist and how the obligation is actually worded. Argue severity on technical grounds — reachability, permissions, data sensitivity — because a compliance claim that does not survive scrutiny costs credibility with both auditors and engineering teams.

QHow should we prioritise a large Security Hub backlog?

Re-triage by attack path rather than severity label. For each finding ask what it enables and what sits one step away from it, then fix whole chains rather than individual items. Start with anything internet-reachable, follow with the credentials and permissions reachable from there, and treat visibility gaps as prerequisites for being able to respond at all. A backlog sorted by severity closes the most findings; a backlog sorted by attack path closes the most risk.


Share this Insight
CybersecurityCloud SecurityAdayptus Intelligence
A

Adayptus Security Research

Strategic Intelligence Division

Adayptus Consulting is a premier provider of enterprise cybersecurity solutions, specializing in Managed SOC, Penetration Testing, and GRC strategy. Our intelligence division regularly publishes research to help CISOs navigate the evolving threat landscape.

Cloud Security

Find Out What Your Cloud Actually Exposes

Misconfigurations rarely announce themselves. Tell us about your AWS, Azure, or GCP environment and we will come back with scope, timeline, and an indicative quote — usually within one business day.

  • Manual, expert-led review beyond automated posture scans
  • Findings mapped to real exploitability, not raw severity
  • Free retest once you have remediated
  • Covered by NDA from the first conversation

Prefer email? [email protected]

Request a scoping call

No obligation. A senior consultant replies — not a sales sequence.

Your details stay confidential. No spam — a consultant replies, not a sales sequence.