Reading Time: 2 minutes
Falha CSRF no Facebook permitia o takeover de uma conta de utilizador.

Este bug poderia permitir que utilizadores mal-intencionados enviassem solicitações com tokens CSRF para endpoints arbitrários no Facebook e que poderia levar à aquisição das contas das vítimas.

Para que esse ataque fosse efetivo, um atacante teria que enganar a vítima a clicar num link especialmente criado.

Um especialista em segurança @Samm0uda, descobriu uma vulnerabilidade de CSRF no Facebook e que permita explorar um endpoint vulnerável junto com parametros que permitia executar uma solicitação POST para outro endpoint do Facebook depois da adição do parâmetro: db_dtsg.

Para além disso, este endpoint vulnerável está localizado sob o domínio principal da rede social (www.facebook.com) o que tornava o ataque mais fácil de explorar pelos atacantes, e consequentemente enganar também as vítimas porque o domínio apresentado era o “normal”.

O endoint vulnerável era o seguinte:

https://www.facebook.com/comet/dialog_DONOTUSE/?url=XXXX, onde XXXX é o endpoint target que iria ser executado numa solicitação POST (o token CSRF fg_dtsg é automaticamente adicionado ao request body).

Esta vulnerabilidade permitia executar uma série de ações maliciosas, p.ex:

Make a post on timeline:

https://www.facebook.com/comet/dialog_DONOTUSE/?url=
/api/graphql/%3fdoc_id=1740513229408093%26variables={"input":{"actor_id":{TARGET_ID},"client_mutation_id":"1","source":"WWW","audience":{"web_privacyx":"REDECATED"},"message":{"text":"TEXT","ranges":[]}}}

 

Delete Profile Picture:

https://www.facebook.com/comet/dialog_DONOTUSE/?
url=/profile/picture/remove_picture/%3fdelete_from_album=1%26profile_id={TARGET_ID}

 

Trick user to delete their account (After changing language with “locale” parameter)

https://www.facebook.com/comet/dialog_DONOTUSE/?
url=/help/delete_account/dialog/%3f__asyncDialog=0%26locale=fr_FR

Esta ação abria uma caixa de diálogo de confirmação de palavra-passe. Se a vítima digitasse a sua palavra-passe de acesso à rede social, a sua conta seria totalmente eliminada (takeover).

O investigador reportou a falha ao Facebook no dia 26 de janeiro. O Facebook confirmou a vulnerabilidade no próprio dia, e mitigou-a passado alguns dias, a 31 de janeiro.

O investigador recebeu no dia 12 de fevereiro uma remuneração bug bounty (reward) do Facebook no valor de $25.000 pelos seus findings.

 

Timeline
Jan 26, 2019 — Report Sent
Jan 26, 2019— Acknowledged by Facebook
Jan 28, 2019 — More details sent
Jan 31, 2019— Fixed by Facebook
Feb 12, 2019 — $25,000 Bounty Awarded by Facebook