← marwandiallo.comlabs

Phishing-resistant MFA, on the wire

Most "MFA" is replayable. A modern reverse-proxy phishing kit (Evilginx, EvilProxy, Tycoon 2FA) is just a pipe — it takes whatever your user types, including the OTP and the session cookie, and hands it to the attacker. FIDO2 / WebAuthn is the one factor it cannot forward.

The four MFA archetypes, ranked

FactorPhishable?Why
SMS / voice OTPYes, triviallySIM swap, SS7, plain interception. NIST has been deprecating this since 2016.
TOTP (Google Authenticator, Authy)Yes — replayed in real timeThe 6 digits are valid for 30 seconds. The proxy types them into the real site faster than the user does.
Push notificationsYes — push fatigue / number matching helps but doesn't solveIf the user approves the push, the attacker is in. Number- matching reduces but doesn't eliminate.
FIDO2 / WebAuthn passkeyNoThe signed assertion is bound to the origin the browser is actually talking to. The phishing site has the wrong origin, so the signature is invalid for the real site. Period.

What makes WebAuthn unphishable

Three properties, in order of importance:

  1. Origin binding. The authenticator signs over the origin the browser sees (login.example.com), not what the user thinks they're on. A reverse-proxy at login-examp1e.com will produce a signature for that domain, which the real server rejects.
  2. No shared secret. The server stores only the public key. There is nothing to steal from the database, nothing to exfiltrate from a memory dump, nothing to forward.
  3. User presence + verification. The signature is only produced after a local gesture (Touch ID, Face ID, PIN, button press). The credential is non-exportable from the secure enclave on single-device passkeys, and end-to-end encrypted for synced passkeys.

What "passwordless" actually means

Three deployment patterns, ordered by maturity:

Passkey + password fallback
Cheapest way to add phishing-resistance, but the password remains as a phishable backdoor. Most consumer rollouts (Apple, Google) started here.
Passwordless primary, recovery via secondary device
The password is removed from the account. Recovery is another passkey on a backup device, an admin-recovery flow, or attested re-enrollment from a trusted endpoint.
Phishing-resistant only, no exceptions
AAL3 / OMB M-22-09 territory. No SMS recovery, no helpdesk reset without identity-proofing. The bar U.S. federal agencies have to meet by mandate, and what mature enterprises are heading toward.

Where it goes wrong in the wild

What you can do today

  1. Walk through the passkey demo. It's the same WebAuthn ceremony enterprise IdPs run.
  2. Read about agent identity — the same primitives, applied to AI agents instead of humans.
  3. For your own org: enable passkeys on the IdP, gate sensitive admin roles to passkey-only (no fallback), and add token-binding / DPoP on the highest-risk APIs.