В сентябре 2011 года я обнаружил уязвимость, позволяющую злоумышленнику
частично взять под контроль учетную запись жертвы в Facebook . Уязвимость позволила злоумышленнику, среди прочего, отправлять обновления статуса от имени пользователя и отправлять запросы на добавление в друзья в контролируемую злоумышленником учетную запись Facebook. Уязвимость была ответственно раскрыта в рамках программы
Facebook Security Bug Bounty и теперь исправлена.
подробности
http [s]: //www.facebook.com/plugins/serverfbml.php использовал только JavaScript для удаления фреймов и не использовалзаголовок X-Frame-Options . Можно было создатьатаку извлечения контента с восстановлением пользовательского интерфейса, чтобы заставить пользователя перетаскивать исходный HTML-код этой страницы на страницу злоумышленника. Это основывалось на способности Firefox отображать источник просмотра: страницы протокола в iframes И возможность выполнять действия перетаскивания из разных источников (таким образом, затрагивались только пользователи Firefox).
На указанной странице отображается FBML, указанный в параметре $ _GET . В этом случае <form> <fb: captcha> </ form>был использован в качестве примера полезной нагрузки FBML. В ответе сервера был объект Javascript Env с несколькими чувствительными пользовательскими значениями:
{ user:100001652298988, locale:"en_US", method:"GET", start:(new Date()).getTime(), ps_limit:5, ps_ratio:4, svn_rev:441515, static_base:"https:\/\/s-static.ak.facebook.com\/", www_base:"http:\/\/www.facebook.com\/", rep_lag:2, post_form_id:"eecde0da0dc4bc800d385dde5dd37608", fb_dtsg:"AQAUh3Jx", lhsh:"0AQAQVvsl", error_uri:".....", retry_ajax_on_network_error:"1", ajaxpipe_enabled:"1", theater_ver:"2" };
В приведенном выше источнике, кроме идентификатора пользователя (конфиденциальность!), Есть также два интересных значения: fb_dtsg и post_form_id . Эти значения сами по себе являются формой токена анти- CSRF, используемого в Facebook, и, зная их, злоумышленник может публиковать обновления статуса от имени вошедшего в систему пользователя. В Firefox можно было обмануть пользователя, чтобы выбрать и перетащить эти значения на контролируемую страницу злоумышленника. Таким образом, если какой-либо пользователь, прошедший проверку подлинности на Facebook, перешел по URL-адресу злоумышленника (например, по ссылке, которой поделился его друг) и сыграл в игру, злоумышленник получил доступ к HTML-источнику уязвимой страницы Facebook и получил идентификатор пользователя и токены CSRF. Имея это, он мог выполнять несколько запросов CSRF, используя тот факт, что браузер жертвы имел соответствующие куки FB.
демонстрация
В демонстрации, которую я использую, представлена модифицированная версия технологии
перенаправления двойного перетаскивания пользовательского интерфейса, разработанная Нафиезом Ахамедом (@skeptic_fx) . В качестве примера использования публикуется обновление статуса для пользователя-жертвы, а запрос на добавление в друзья отправляется другому пользователю (возможно, злоумышленником). Конечно, с этими токенами есть больше возможностей, таких как обмен и лайк по заданному URL, но я этого не исследовал.
Некоторые исправления происходят быстро, другие …
Предложенное исправление было следующим: Используйте
X-Frame-Options на указанной странице. Уязвимость в Facebook была исправлена, протестирована и развернута до 14 октября 2011 года. Однако соответствующая ошибка Firefox № 605991 (
перетаскивание может использоваться для кражи контента между доменами ) подождала
2 года, а исправление только что было развернуто в Firefox 14. Начиная с Firefox 14,
вы больше не можете перетаскивать контент между доменами . Так что — обновляйте свои Firefox и оставайтесь в безопасности!