Turn on GuardDuty in any AWS account with real traffic and you get findings within hours: aRecon:EC2/PortProbeUnprotectedPorthere, an UnauthorizedAccess:IAMUser/InstanceCredentialExfiltrationthere, a wide-open security group flagged by Security Hub's CIS AWS Foundations checks. The detection side of cloud security has been solved for years. What almost nobody has solved is what happens next.
The industry-average MTTR is 128 days
Ponemon/IBM's cost-of-a-breach research puts the average time to identify and contain a cloud misconfiguration-driven incident at roughly 128 days. That number isn't a detection problem — GuardDuty and Security Hub both surface findings in minutes. It's a remediation problem: someone has to read the finding, understand the blast radius of a fix, get a change approved, and ship it, usually by hand, usually behind three other priorities.
The typical lifecycle looks like this: GuardDuty finding fires → SNS/EventBridge routes it to a Slack channel or a Jira ticket → the ticket sits in a backlog, tagged "security," behind feature work → three weeks later, if it hasn't been closed as "won't fix, low risk" by someone who never actually verified that, an engineer finally opens the console, looks at the security group or IAM policy, and manually edits it — hoping they didn't just break the one dependency they didn't know about.
Why teams don't auto-remediate today
AWS Config rules with Lambda auto-remediation have existed for years, and most teams still don't use them for anything beyond tagging enforcement. The reason isn't tooling — it's trust. A Lambda that revokes a security group ingress rule doesn't know whether that rule is also the one thing keeping a partner integration alive. Auto-remediation without a safety proof is just moving the risk from "finding sits open" to "finding gets closed by breaking prod," and most security engineers (correctly) won't sign off on that trade.
What a closed-loop architecture actually needs
Closing the loop from finding to fix — safely, without a human re-deriving the blast radius by hand every time — needs four pieces working together, not just a webhook and a Lambda:
- Ingestion that keeps state, not just events. A GuardDuty finding on its own is a point-in-time signal. Deciding whether a fix is safe requires knowing the current state of the resource it points at — the full security group rule set, the full IAM policy document — not just the delta GuardDuty reported.
- A safety gate that proves the fix, not just generates it. This is the step most tools skip. PosturaNet runs the proposed patch through a Z3 SMT solver against the resource's actual current state before it ever touches the account. For a security-group revoke, that means asserting: after this patch, can any external (non-10.0.0.0/8) source still reach a protected port through some other rule the patch didn't touch? Z3 answers UNSAT (safe) or SAT (unsafe, don't apply) — it's a decision procedure, not a heuristic score.
- Fail-closed behavior. If the solver times out or can't reach a verdict, the fix doesn't apply. It routes to human review instead. A closed loop that fails open on uncertainty isn't actually safe, it's just automation with extra steps.
- A remediation path that matches how the team actually ships changes. For teams managing infrastructure by hand, that's a direct API call with instant rollback. For teams on Terraform, applying a live patch out-of-band just creates drift — the fix needs to land as a real pull request against the HCL that manages the resource, so the next
terraform plandoesn't immediately propose reverting it.
What this looks like end to end
In PosturaNet, a GuardDuty or Security Hub finding for a supported class (IAM wildcard grants, S3 public exposure, security-group reachability) triggers a pipeline: discovery pulls the resource's current live state → a remediation candidate is generated → the Z3 gate proves the resulting state is safe against the account's actual current configuration, not a template → the fix either applies directly with rollback tracked, or opens a GitHub pull request with a real unified diff against the Terraform file that manages the resource, depending on how the team is set up.
For the specific finding classes this pipeline covers today, that collapses detection-to-fix latency from the 128-day industry average to low-double-digit seconds — call it a ~237,000x reduction in MTTR for those finding types specifically. (Footnote, because this stat gets misused: this is a detection-to-fix latency comparison for the specific remediation classes PosturaNet automates today — IAM wildcards, S3 public exposure, security-group reachability — not a claim that every misconfiguration in an account gets found and fixed in seconds. Coverage is expanding, not universal yet.)
The backlog isn't a people problem
Teams don't leave GuardDuty findings unfixed because they don't care about security. They leave them unfixed because every fix is a small, unverified risk decision competing against a sprint full of verified, understood work. Closing that loop doesn't mean hiring more security engineers to churn through tickets faster — it means giving the fix itself a proof, so the risk decision isn't manual anymore.