Leaking Meta FXAuth Token leading to 2 click Account Takeover
Introduction
FXAuth is Meta’s shared authentication system used across Facebook, Instagram, and Meta (Horizon / VR). It is used by Accounts Center for account linking, re-authentication, and sensitive action confirmation.
This write-up documents a redirect flaw in the FXAuth flow that allows the token to be exfiltrated and reused, enabling account linking and takeover in as little as two interactions.
Description
The FXAuth Redirect Model
The FXAuth flow endpoint for meta.com is:
https://auth.meta.com/fxauth/
This endpoint asks for user approval and redirects the browser back to the requestor website ( facebook.com/ instagram.com) with siged token and blob. It accepts multiple parameters, including base_uri:
Originally, base_uri accepted any arbitrary domain, making token exfiltration trivial. Meta fixed this by restricting the parameter to Meta-owned domains.
However, the fix relied on an incorrect assumption: that restricting the domain alone is sufficient if the attacker cannot directly control the redirect path.
Why the Fix Was Insufficient
While base_uri was restricted to Meta domains, not all Meta domains are safe.
Legacy surfaces still exist where attackers can execute JavaScript under controlled paths. One such surface is apps.facebook.com.
Developers can register applications with a namespace that becomes part of the URL:
https://apps.facebook.com/{app_namespace}
If the attacker owns an application (notably older ones), they regain the ability to read parameters from the URL despite not controlling the base path directly.
This effectively reintroduces the original vulnerability under a different trust boundary.
The Exploitable FXAuth Flow
A valid FXAuth request accepts:
app_idbelonging to Facebook or Instagramflowsuch asfrlcometorfrlreauthetokengenerated earlier in an Accounts Center flownextrestricted to internal pathsbase_urirestricted to Meta-owned domains
Example:
https://auth.meta.com/fxauth/
?app_id=2220391788200892
&etoken=ATTACKER_ETOKEN
&next=%2Fpersonal_info
&flow=frlcomet
&base_uri=https://apps.facebook.com
The etoken can be obtained by initiating a standard Accounts Center linking flow:
https://accountscenter.facebook.com/add/?auth_flow=frl_linking&background_page=%2F
Token Exfiltration
When the victim opens the crafted FXAuth URL and approves the request, the browser is redirected to:
https://apps.facebook.com/personal_info
The redirect includes sensitive parameters such as blob and token.
Because the attacker controls execution within their application namespace personal_info, both values can be trivially extracted. At this point, the attacker holds a valid FXAuth token bound to the victim account, he can finalize privileged flows without further user confirmation:
Account linking:
https://accountscenter.facebook.com/add/
?auth_flow=frl_linking
&background_page=%2F
&blob=BLOB
&token=TOKEN
Action re-authentication bypass:
https://accountscenter.facebook.com/profiles/VICTIM_PROFILE_ID/name/
?auth_flow=reauth
&blob=BLOB
&token=TOKEN
These flows normally require explicit confirmation. Possession of a valid FXAuth token bypasses that requirement entirely.
Impact
This vulnerability enables linking attacker-controlled accounts, bypassing Accounts Center confirmations, and achieving full account takeover with minimal interaction.
Timeline
Jun 27, 2023 — Bug reported
Jun 28, 2023 — Bug Acknowledged by Meta
Jun 29, 2023 — $32,500 bounty awarded by Meta
Dec 29, 2024 Bypass repoted
Apr 28, 2025 — $32,500 bounty awarded by Meta
Jan 15, 2026 — Bug fixed by Meta