✳ Field lesson S3 / 10 min

Investigate, respond, and verify: why HTTP 200 or 504 is not containment proof

NIST SP 800-61 Rev. 3 (April 2025) maps incident response to the six CSF 2.0 Functions. Govern, Identify, and Protect prepare the organization. Detect, Respond, and Recover are the incident response itself. A containment command is not proof. A fresh read of live state shows if the command worked.

socincident-responseverificationcontainmentCISSP D7Security+ (SY0-701) D4CySA+ (CS0-003) D3

Helpful first: Identity alert triage: reconstructing who, what, and how across logs · Logs, alerts, and evidence: why an alert title is a hypothesis, not proof

Key points

  • SP 800-61 Rev. 3 uses the six CSF 2.0 Functions in place of the four Rev. 2 phases.
  • Explain why an action request (such as an API call returning 504 Gateway Timeout or asynchronous 202 Accepted) is not proof that containment succeeded
  • Verify eradication and recovery by querying active session tables, persistence mechanisms, and downstream audit logs

From confirmed triage to active containment

Threat Hunter Nyx confirms that an attacker hijacked the session token of dax.mercer@chronos.orbital. The attacker used it to enroll a rogue authenticator at Meridian Space & Robotics (chronos.orbital). The work then moves from Detect to Respond and Recover. NIST SP 800-61 Rev. 3 (April 2025) is a CSF 2.0 Community Profile.

NIST SP 800-61 Rev. 3 (April 2025) is a CSF 2.0 Community Profile. Govern, Identify and Protect prepare the organization. Detect, Respond and Recover are the incident response. Improvement (ID.IM) is the feedback loop.

In the heat of an incident, speed matters, but unverified speed is dangerous. If an analyst clicks "Suspend User" in the dashboard, pastes "User disabled" into the Slack war room, and moves on without checking whether active bearer tokens were actually revoked across downstream APIs, the attacker stays inside the environment while the responders think the fire is out.

NIST SP 800-61 Rev. 3: each CSF 2.0 Function, the phase of NIST SP 800-61 Rev. 2 (withdrawn April 2025) that maps to it, and the verification proof
CSF 2.0 Function (Rev. 2 phase)Primary Operational GoalMeridian Action on Compromised IdentityRequired Verification Proof
1. Govern, Identify, Protect (Rev. 2: Preparation)Build playbooks, centralize UTC logs, pre-stage containment APIs, and run tabletop drillsConfigure short JWT lifetimes, FIDO2 policies, and one-click session revocation runbooksPurple-team drill confirms revocation propagates within 60 seconds
2. Detect (Rev. 2: Detection & Analysis)Correlate logs, determine scope/blast radius, and preserve forensic evidenceTrace every API call, repo clone, and IAM change made by the hijacked sessionIdComplete timeline of affected assets and persistence artifacts
3. Respond and Recover (Rev. 2: Containment, Eradication & Recovery)Stop active bleeding (short-term containment), remove attacker persistence (eradication), and restore clean access (recovery)Revoke all refresh/access tokens, delete the rogue MFA device, rotate exposed secrets, and re-enroll Dax on FIDO2Fresh GET readback shows 0 active sessions, rogue MFA deleted, and subsequent attacker requests returning 401
4. Improvement, ID.IM in Identify (Rev. 2: Post-Incident Activity)Conduct blameless root-cause review and harden controls so the class of attack cannot repeatDeprecate push MFA in favor of mandatory FIDO2/WebAuthn across all engineering rolesUpdated IdP policy verified in production config

Containment is not eradication: hunting for persistence

Disabling a compromised user password or revoking the initial login session is short-term containment, not eradication. In the three minutes before containment, an attacker routinely plants secondary persistence: registering a second MFA device, minting a long-lived Personal Access Token (PAT), adding an SSH key, or creating a backdoor OAuth application grant.

Revoking the first session is short-term containment. Eradication removes each persistence artifact left during the dwell window: a second MFA device, a long-lived Personal Access Token (PAT), an SSH key, and a backdoor OAuth application grant.

Eradication requires auditing every resource the compromised session touched during its dwell window and removing every unauthorized artifact before restoring the user’s account.

When the revoke API returns 504 - or why "sent" never equals "applied"

Suppose Nyx’s automated SOAR playbook calls POST /admin/v1/users/dax.mercer/revoke-sessions, and the upstream Identity Provider returns 504 Gateway Timeout (or 202 Accepted for an eventual-consistency queue). Did the revocation happen or not? You cannot know from the command attempt alone.

A result of 504 Gateway Timeout, 202 Accepted, or 200 OK on POST /admin/v1/users/dax.mercer/revoke-sessions is not proof. Closed-loop checks read GET /users/dax.mercer/sessions and /factors, and then look for a 401 Unauthorized on the next replay.

Even when an IdP returns 200 OK, stateless JWT access tokens with a 60-minute expiration might continue working against downstream microservices that only validate cryptographic signatures locally without checking a revocation list. True verification requires two closed-loop checks: querying the authoritative state (GET /users/dax.mercer/sessions and /factors to confirm empty state) AND watching the API gateway logs to confirm the attacker’s next replay attempt is actively rejected with 401 Unauthorized.

Blameless post-incident improvement

Every incident ends with a structured lessons-learned review. Rather than blaming Dax for approving a push prompt, Meridian uses the incident evidence to eliminate the vulnerable control class - removing phishable push notifications and enforcing origin-bound WebAuthn fleet-wide.

The lessons-learned review removes a control class. It retires phishable push notifications and enforces origin-bound WebAuthn.

CHECK YOUR JUDGMENT

During an active credential-compromise incident at Meridian Space & Robotics (chronos.orbital), a SOAR playbook sends a POST /revoke-tokens request to the Identity Provider, which returns 504 Gateway Timeout. Meanwhile, the attacker had already registered a new Personal Access Token (PAT) two minutes earlier. What must Threat Hunter Nyx do before declaring the account contained and eradicated?

NEXT FIELD LESSON

Agentic SOC architecture: autonomous triage vs human-gated containment

↗

Find your next idea.

Tip: press / to open search. Escape closes this window.