“MFA Protects You From Everything.” — No, It Doesn’t.
4 ways pentesters bypass Multi-Factor Authentication in real engagements
“MFA Protects You From Everything.” — No, It Doesn’t.
4 ways pentesters bypass Multi-Factor Authentication in real engagements

Common Myth
There’s a dangerous belief spreading through boardrooms and dev teams alike:
“We have MFA enabled. We’re safe.”
I’ve heard it on almost every engagement. And almost every time, I’ve been able to prove it wrong.
MFA is not a wall. It’s a layer — and layers have gaps. In this post, I’m breaking down the four most common MFA bypasses I encounter during penetration tests, pulled directly from my Auth Attack Playbook.
No theory. Just techniques that work in production.
1. OTP Brute Force — The Math Problem Nobody Fixed
A standard 6-digit OTP has exactly 1,000,000 possible combinations.
That sounds like a lot. It isn’t — if there’s no rate limiting.
Here’s what I check on every engagement using Burp Suite Intruder:
# Attack type: Sniper
# Payload: Numbers 000000 → 999999 (zero-padded)
# Throttle: 50ms between requests (avoid lockout)
# Mark OTP field: {"otp": "§000000§"}
# Grep match: "success":true OR redirect to /dashboard
What I’m really testing:
- Does the endpoint lock out after N failed attempts?
- Does rotating
X-Forwarded-Forbypass rate limiting? - Does changing
User-Agentreset the attempt counter? - Can the same OTP be reused within its validity window?
I’ve found apps with no lockout at all. At 50ms per request, you can exhaust all 1 million combinations in under 14 hours — or faster if you parallelize.
The fix: Lock after 5 failed attempts. OTPs expire in 30–60 seconds. Never allow reuse. Ever.
2. Response Manipulation — The One-Liner Bypass
This is my favorite to demonstrate to clients because it makes jaws drop.
The vulnerability: the app checks MFA success on the client side based on the server’s JSON response. Intercept that response in Burp, flip one value, and you’re in.
# Send wrong OTP — intercept the failure response:
HTTP/1.1 400 Bad Request
{"success": false, "message": "Invalid OTP"}
# In Burp's "Match and Replace" — change false → true:
{"success": true, "message": "OTP verified"}
# Result: App proceeds to dashboard. MFA completely bypassed.
It sounds too simple to be real. It isn’t. I’ve seen this in fintech apps, SaaS platforms, and internal enterprise tools.
Why does this happen? The front-end trusts the response body to gate access. The server never re-validates that MFA was genuinely completed before issuing the final session token.
The fix: MFA state must live server-side. Issue a full authenticated session token only after confirmed OTP validation on the backend. Never trust the client.
3. Skipping the MFA Step Entirely — Direct API Access
After a user enters their password correctly, many apps issue a partial auth token — a temporary credential that’s supposed to expire after MFA completion.
The question I always ask: what can this partial token actually access?
# Step 1: Complete password auth, receive partial token
# Step 2: Skip the MFA screen — directly call protected endpoints
GET /api/user/profile HTTP/1.1
Authorization: Bearer PARTIAL_AUTH_TOKEN
# If this returns 200 → MFA step is entirely optional
The MFA UI exists, but the API doesn’t enforce it. An attacker who has stolen a password never needs to see an OTP prompt — they just call the API directly.
Why does this happen? The MFA enforcement lives in the front-end routing, not the back-end middleware. API endpoints accept partial tokens without checking whether MFA was completed.
The fix: Every protected endpoint’s middleware must verify MFA completion status from the server-side session, not just token presence.
4. Push Notification Bombing (MFA Fatigue)
This one doesn’t require any technical exploit. It’s pure social engineering — and it’s devastatingly effective.
The attack: An attacker with a stolen password triggers MFA push notification requests repeatedly — sometimes dozens in a row — at odd hours (2am, during a commute, mid-meeting). The goal is to exhaust the victim into tapping “Approve” just to make it stop.
This is exactly how the Uber breach in 2022 worked. A contractor received repeated Duo push notifications until they approved one, handing the attacker full internal access.
Variants I test for:
- No cap on how many push notifications can be sent per hour
- No alerting on repeated denials
- No “number matching” or context shown in the push request
- Backup SMS fallback that can be triggered without the user’s consent
The fix: Implement number matching in push notifications, cap notification frequency, alert on repeated denials, and consider phishing-resistant MFA (FIDO2/passkeys) for high-value accounts.
Bonus: MFA Enrollment Takeover
One more that’s easy to miss: what happens when a user enrolls a new MFA device?
I check:
- Can you enroll a new authenticator app without re-authenticating?
- Is there a race condition between enrollment and the existing session?
- Can backup codes be brute-forced (usually 8–10 alphanumeric chars)?
- Does “remember this device” generate a forgeable token?
If enrollment doesn’t require re-auth, an attacker with a brief session (stolen laptop, XSS) can register their own MFA device and lock the victim out permanently.
The Testing Checklist
Every MFA implementation I test gets checked against these:
- [ ] OTP brute force without lockout
- [ ] Response manipulation bypass
- [ ] Skip MFA step via direct API endpoint
- [ ] OTP reuse within validity window
- [ ] Backup code brute force
- [ ] MFA enrollment without re-authentication
- [ ] Parallel session MFA skip
- [ ] “Remember this device” token forgery
- [ ] Push notification rate limiting
- [ ] Number matching implemented
Final Thought
MFA raises the bar significantly — don’t get me wrong. Against opportunistic attackers and credential stuffing bots, it works. But against a targeted attacker doing actual penetration testing, it’s often the second thing I break, right after the login form.
The goal of this post isn’t to scare people away from MFA. It’s to push teams toward implementing it correctly — server-side enforcement, proper rate limiting, phishing-resistant factors where it matters.
Enable MFA. Then test it like an attacker would.
This article is based on my Auth Attack Playbook(https://cyberplaybooks.netlify.app/) — a comprehensive reference covering 19 categories of authentication and authorization vulnerabilities. Check it out if you want the full methodology, code samples, and testing checklists.
Tags: penetration-testing cybersecurity mfa appsec ethical-hacking web-security owasp bugbounty
메타데이터
- post_id
- 9dfdfb353828
- slug
- mfa-protects-you-from-everything-no-it-doesnt-9dfdfb353828
- url
- https://medium.com/@midgetpool/mfa-protects-you-from-everything-no-it-doesnt-9dfdfb353828
- canonical_url
- https://medium.com/@midgetpool/mfa-protects-you-from-everything-no-it-doesnt-9dfdfb353828
- author_url
- https://medium.com/@midgetpool
- status
- ok
- fetched_at
- 2026-06-09 15:37:30