SMS MFA Is Not MFA
Identity · intro · 7 min read · last reviewed 2026-08-15
NIST restricted SMS as an authenticator in 2017. SIM swaps and real-time phishing are why. What to rip out, and what to put in.
TL;DR
- SMS proves control of a phone number, not possession of a device. Carriers and SS7 can reroute it.
- A code typed into a fake page is phishable. Only WebAuthn binds the response to the real origin.
- Keep SMS, if at all, as a delayed recovery hint, never as a sufficient login factor.
- Kill SMS immediately for founders, billing, and production. Demote it for customers after you enroll a better factor.
- Push MFA is better than SMS and still not phishing-resistant.
NIST Special Publication 800-63B restricted SMS as an out-of-band authenticator in 2017. Eight years later, most consumer banks and a depressing number of B2B apps still call a text message "two-factor authentication." It is a second channel. It is not a second factor you should bet an account on.
I have watched SIM-swap takeovers hit founders, and I have watched support teams treat "we sent a code to the phone" as if that sentence were a security control. The phone number is not something you have. It is something a carrier employee or an SS7 path can reroute. The longer cultural version is in SMS-Based MFA on Tech Graveyard. This page is what to rip out, and what to put in.
Why a text message fails as a factor
MFA is supposed to combine independent factors: something you know, have, or are. SMS claims to be "have the phone." In practice it is "control the number," and control of the number lives at the carrier.
SIM swap. An attacker social-engineers the carrier, ports the number, and receives your codes. High-profile cases at Coinbase and against public figures made this visible. The pattern is ordinary.
SS7 and redirect. The signaling system that routes texts was not designed to be a security boundary. Messages can be intercepted without touching the handset.
Phishing in real time. The user types the code into a fake login page. The attacker relays it. SMS has no origin binding. Neither does TOTP typed into the same form. Only WebAuthn binds the response to the real site.
Support override. The help desk that will "just send a new code" or reset to SMS after a sob story is the actual second factor. Attackers know this.
A one-time code to email has the same shape. It is slightly harder to port and slightly easier to phish. Do not treat it as a promotion from SMS. Treat it as the same class.
What still uses it, and why
Banks, ride-share, and a long tail of SaaS keep SMS because it works without an app install and because the cost of a swap falls on the user. That is inertia plus misaligned cost, not a security argument.
There is one honest remaining use: a low-assurance recovery hint when every stronger factor is gone, with step-up, delay, and a human review. It is not a login factor. If your admin console, production cloud, or customer identity accepts SMS as sufficient MFA, you do not have MFA on that path.
What to put in its place
| Instead of SMS | Use | Notes |
|---|---|---|
| Customer login | Passkeys first, TOTP or push as backup | Conditional UI, no extra app for most users |
| Your own team | Hardware key or platform passkey, TOTP allowed | Never SMS for cloud consoles |
| Enterprise customers | SSO plus IdP-enforced MFA | You should not be the SMS vendor for their employees |
| Recovery | Second passkey, hardware key, or delayed voucher | Documented, logged, not a chat reset |
Push notifications (Duo, Authy-style) are better than SMS and still phishable if the user approves a prompt they did not start. Number matching helps. It is not phishing-resistant. Save that word for FIDO.
If you are on a managed CIAM, this is configuration: disable SMS as a sufficient factor, offer passkeys, keep TOTP for a transition year. If you rolled your own, you are on the hook for the recovery design the passkeys guide spends half its length on.
How to migrate off SMS without a revolt
- Measure. How many accounts have SMS as their only second factor. That is your blast radius.
- Enroll a better factor first. Prompt passkey or TOTP on the next successful SMS login. Do not announce a cutoff before the prompt exists.
- Demote SMS. After 30 to 90 days, SMS can start a recovery, not a session. Say that in the UI.
- Kill it for privileged roles immediately. Founders, billing admins, production. This week, not the project plan.
- Tell customers the reason. "NIST deprecated this in 2017 and SIM swaps are routine" is clearer than "we are enhancing your experience."
The solo-founder stack already says turn MFA on for your own team before you worry about customer-facing fashion. That MFA is not SMS.
Failure modes
- Calling SMS "2FA" in a SOC 2 narrative. Auditors are catching up. Buyers already have.
- SMS as the passkey recovery. You rebuilt the hole behind a modern front door.
- Cutoff with no enrolled alternative. You will flood support and then turn SMS back on.
- Push-without-number-matching as the end state. Better than SMS. Not the destination.
- Leaving founder and root accounts on SMS because "we know our numbers." Those are the accounts that get swapped.
Key takeaways
- Calling SMS '2FA' in a SOC 2 narrative is a credibility problem with buyers, not just auditors.
- Email OTP is the same class as SMS, not a promotion.
- Do not use SMS as passkey recovery. You rebuilt the hole.
- Enroll the better factor on the next successful SMS login before you announce a cutoff.
- Privileged roles move this week, not on the project plan.
- Tell customers the reason. NIST and SIM swaps are clearer than 'enhancing your experience.'
Frequently asked questions
- Did NIST really ban SMS MFA?
- NIST SP 800-63B restricted SMS as an out-of-band authenticator in 2017 because the phone number is not a secure channel. It is not a law, but it is the baseline serious buyers now cite.
- Is authenticator-app TOTP good enough?
- It stops password stuffing. It does not stop a real-time phish where the user types the code into a fake site. Use it as a backup. Use passkeys as the default.
- Can I keep SMS for users who will not install an app?
- Passkeys use the platform authenticator most people already have. For the remainder, TOTP or a delayed recovery path beats SMS-as-login.
- What about push notifications?
- Better than SMS, especially with number matching. Still phishable if the user approves a prompt they did not start. Do not call it phishing-resistant.
- How do I migrate without locking people out?
- Measure who has SMS as their only second factor, enroll a better factor on the next login, then demote SMS to recovery. Cut privileged roles first.
Related
Research pillars
Vendor comparisons
Go deeper
Sibling guides