← Back to list

How I Bypassed 2FA by Mutating My Profile Phone Number in Graphql Request

How a simple phone number update in Graphql request compeletly bypassed 2fa protection and gave full account control.

Mohamed Elmorsy · 2026-05-19 16:30 · 0 claps · 3.1 min read
#2fa-bypass #bug-bounty #cybersecurity #hacking #bug-bounty-tips
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity 🔧 · Data Engineering

How I Bypassed 2FA by Mutating My Profile Phone Number in Graphql Request

How a simple phone number update in Graphql request compeletly bypassed 2fa protection and gave full account control.

| وَكَانَ فَضْلُ اللَّهِ عَلَيْكَ عَظِيمًا

The story

2FA protection was impelemented as the secondary shield if your credientials were compromised.!. 2FA is that you have ex. sms otp , email otp , fingerprint , masterkey , …etc. so being vulnerable put your account and sensitive data into danger.

That’s the underlying 2fa flow , if 2fa enabled then an OTP (one time password) will be prompted and wait for entering the code received , That’s the normal flow, and that exactly was impelemented by the app. But a misconfiguration and a gap between authentication provider and application graphql api lead to full bypass.

Discovery

while i was hunting on a target let’s call app.example.com ( respecting it’s disclosure policy) , as i prefer the manual hunting , i started surfing the application , looking for functionalities , mapping the structure and understand the busniess flow , after hours of zero summation , i came to the profile update page , notice that the request send via graphql , i tried some known exploits , misconfiguration ex. introspection, … etc ended with no thing , that’s was properly configured.

Then i came across the 2fa i enabled it and logged out , then logged in , 2fa triggered and asked for code enter

i tried response manipulation but not worked as another tokens was required to be valid session. so i say that let’s check burp history to approach the flow , i noticed the primary session was issued by third-party integrated service, so I thought what if there a misconfiguration into integration between two different services , so i came to the factor that 2fa relies on that was phone number. How can i change the phone number to my own , remember graphql profile update request ?!

i gave it a try i used pre-2fa issued JWT and craft the request to /graphql and my surprise , response 200 OK and the phone were changed.

i updated with phone number under my control , and it was accepted , i then returned to 2fa page require code then clicked resend code and that was send to my new updated phone number, i then used the code to enter.

i entered the application , 2fa compeletly bypassed…

The problem

  • A misconfigured / forgotten sensitive function like graphql , that was able to update phone number at which the otp code will be sent. That accept non-compeleted authentication token ( primary/preauth token ).
  • In addition to non restriction of phone update , no another security layer or verification caused the phone changed easily.

Both lead to attacker ability bypass 2fa.

Impact

  • 2FA is rendered entirely ineffective as a security control
  • phone number can be replaced before MFA is verified, giving the attacker persistent access even after the victim attempts recovery
  • No victim interaction required attacker needs only valid credentials
  • Target stores highly sensitive business data including employee schedules, payroll information, and HR records — all exposed upon account takeover

Responsible Disclosure & reward

I wrote the report and recorded the POC , and send to them via their reporting portal. It was classified as High (P2)

Thanks for your reading … Have a nice day.


메타데이터
post_id
b8d23efa0a95
slug
how-i-bypassed-2fa-by-mutating-my-profile-phone-number-in-graphql-request-b8d23efa0a95
url
https://medium.com/@anamorsyai/how-i-bypassed-2fa-by-mutating-my-profile-phone-number-in-graphql-request-b8d23efa0a95
canonical_url
https://medium.com/@anamorsyai/how-i-bypassed-2fa-by-mutating-my-profile-phone-number-in-graphql-request-b8d23efa0a95
author_url
https://medium.com/@anamorsyai
status
ok
fetched_at
2026-06-09 15:37:30