Step-up auth for transfers/wires/payments
Why it matters
A session token that grants access to wire transfers and payments is the highest-value credential in a financial application. If that token is stolen — via XSS, network interception, or session fixation — the attacker can execute high-value transactions without any additional authentication barrier. Step-up authentication requires a second proof-of-identity at the moment the sensitive operation is initiated, so a stolen token alone is insufficient. CWE-306 (Missing Authentication for Critical Function), OWASP A07, PCI-DSS Req 8.4, and NIST 800-63B IA-11 all address this gap. Without server-side step-up enforcement, client-side UI guards are trivially bypassed with a direct API call.
Severity rationale
High because an absent server-side step-up on financial endpoints means any actor possessing a valid session token — regardless of how it was obtained — can initiate transfers, wires, and payments with no additional authentication challenge.
Remediation
Enforce step-up via server-side middleware, not client state, in src/middleware/requireStepUp.ts:
export async function requireStepUp(req: Request): Promise<Response | null> {
const session = await getSession(req);
const verified = await checkStepUpStatus(session.id);
if (!verified) {
return Response.json(
{ error: 'Step-up authentication required' },
{ status: 403 }
);
}
return null; // proceed
}
// src/app/api/transfer/route.ts
export async function POST(req: Request) {
const block = await requireStepUp(req);
if (block) return block;
// safe to process transfer
}
Apply requireStepUp to every sensitive route: transfers, wires, payments, account changes, and password resets. Do not rely on a client-side flag or cookie indicating that step-up was completed — verify the server-side step-up record on every request.
DetectionPro
The detection method for this pattern is part of AuditBuffet Pro.
The full method (what to look for, pass and fail conditions, and how results get reported) ships inside the Session Security Audit. The pattern definition, severity rationale, and remediation remain openly licensed under CC-BY-4.0.
External references
- cwe · CWE-306 — Missing Authentication for Critical Function
- owasp:2021 · A07
- nist:rev5 · IA-11 — Re-Authentication
- pci-dss:4.0 · Req 8.4 — Multi-factor authentication for CDE access
Taxons
History
- 2026-04-18·v1.0.0·Initial import from finserv-session-security·automated