Post-incident review

Credential stuffing, nine hours in the dark

What the attackers did, how we found them, and the four controls we are shipping.

Security EngineeringFictional company, sample deckOctober 2026

Impact

412 accounts

Logged in from attacker infrastructure. 37 had saved payment methods; none were charged.

Source: auth logs, reviewed by two engineers

Timeline (UTC)

From first request to containment

  1. Spray begins

    Login attempts from 3,000 residential IPs.

  2. Alert fires

    Failure ratio crosses 40 percent.

  3. Page acknowledged

    On-call opens the incident channel.

  4. Contained

    Rate limits and forced resets live.

Failed logins per minute, peak window

Low and slow: the attack stayed under our per-IP limit all night.

HourFailed logins
0240
04120
06380
08910
10240
Fictional data, UTC hours

Root cause

Threat, gap, consequence

  1. Reused passwords from unrelated breaches, tried at scale.

  2. Limits were per IP, no check against known-breached passwords, MFA optional.

  3. 412 sessions, 37 with stored payment methods, no card data exposed.

  4. Detect on the target, not the source

    Rate and anomaly rules keyed on accounts and on the failure ratio.

Controls: before and after

BeforeAfter
Rate limitPer IPPer account and per device
Breached passwordsNot checkedBlocked at sign-in
MFAOptionalRequired for stored payments
Alert latency6.5 hoursUnder 15 minutes

Response plan

Four steps, in this order

  1. Contain

    Force resets on the 412 accounts.

  2. Detect

    Ship account-level anomaly alert.

  3. Prevent

    Breached-password check and MFA.

  4. Verify

    Replay the attack monthly.

Decisions we need today

Questions

Blameless, specific, tested

Owner Security Engineeringsecurity@example.com