A researcher discovered a critical Account takeover vulnerability in Facebook’s Authorization feature “Login with Facebook” and, it allowed attackers to steal the Access_Token and completely take over the victim’s Facebook account.
Facebook using OAuth 2.0 as an Authorization protocol that helps to exchange the token from Facebook and other third party websites.
The vulnerability resides in the “Login with Facebook” feature that allowed attackers to set up a malicious website, and steak the Access token for several apps including Instagram, Oculus, Netflix, Tinder, Spotify, etc along with Facebook accounts.
Once the attacker compromised the targeted accounts using the stolen tokens, he/she could able to gain full read/write privileges such as messages, photos, videos even if privacy control is set to the “only me”.
Indian Security Researcher Amol Baikar who found this Vulnerability told GBHackers on Security ” This critical Facebook Vulnerability could allow to takeover accounts including Facebook, Instagram, Oculus and more Facebook services. at the same time attack can gain access to all third-party websites such as Netflix, Tinder, Spotify. (where Facebook login is implemented) “
The vulnerability was reported to Facebook last year December and Facebook issues a quick fix for this critical bug, also issued a reward of $55,000 under responsible disclosure bug bounty program.
This is highest bounty awarded for any client site account takes over a vulnerability that ever finds on Facebook.
Stealing The Access Token & Account Takeover
There are two different points that were importantly notified in this vulnerability flow.
- Missing the
“X-Frame-Options”
header. (completely framable flow) - Additionally
“window.parent”
which itself saves the user interaction to zero. Wasn’t needed to bother with window.open or any button onClick event.
In results, following cross-domain communication were exposed and access_token could leak to any origin without victim knowledge and the entire account will be compromised.
var app_id = '124024574287414',
app_domain = 'www.instagram.com';
var exploit_url = 'https://www.facebook.com/connect/ping?client_id=' + app_id + '&redirect_uri=https%3A%2F%2Fstaticxx.facebook.com%2Fconnect%2Fxd_arbiter%2Fr%2F7SWBAvHenEn.js%3Fversion%3D44%23origin%3Dhttps%253A%252F%252F' + app_domain;
var i = document.createElement('iframe');
i.setAttribute('id', 'i');
i.setAttribute('style', 'display:none;');
i.setAttribute('src', exploit_url);
document.body.appendChild(i);
window.addEventListener('OAuth', function(FB) {
alert(FB.data.name);
}, !1);
During the research, Amol observed that the vulnerability leaking the 1st party graphql tokens which help to query a mutation calls to add and confirm a new phone number for account recovery.
“Since they are whitelisted for GraphQL queries and they don’t need to bother with any permission checks. They have full read/write privileges such as messages, photos, videos even if privacy control is set to the “only me”, ” Amol said.
GBHackers learned some important points that need to be noted in this Facebook vulnerability.
1. All Facebook apps and third-party apps access token could be a leak at the same time. (within Seconds).
2. Leakage of the first party token has full read/write/update/delete permission for the Facebook account. (the attacker can fo anything with Facebook accounts, including adding, phone email which can use later for forgot password) (also tokens can query to read each and each private msgs, photos, videos even if they are set to “only me” privacy control)”.
3. Due to an incorrect post message configuration, someone visiting an attacker-controlled website could have had their first party access tokens stolen for vulnerable apps using Facebook’s OAuth flow.
4.First party tokens are non-expirable. (never expires).
5. First party token remains valid even user changes there Facebook Account password. The attacker still has control over the user’s account. They can harvest the data even user changes his password.
Since the Vulnerability existing in the “Login with Facebook” feature for nearly 10 years, it’s unclear that the bug is exploited or not. So Facebook users are advised to change the password and make sure to log out in all the devices once.