Файлы Macromedia Flash имеют собственный встроеный язык скриптов. ActionScript[6] (язык сценариев) может показаться очень простым для программиста знающего JavaScript, т.к. имеет синтаксис схожий с Javascript, Си и PERL. Однако, этот простой язык может быть использован для программирования сложных сцен анимации, моделирования, создания игр и т.д. Для нас представляет интерес функция getURL()[7]. Эта функция позволяет нам переадресовать конечного пользователя к другой странице. В качестве входного параметра обычно используется URL; например «http://eyeonsecurity.net», в скрипте это выглядит так: getURL("http://eyeonsecurity.net") Попробуем передать JavaScript, вместо значения URL: getURL("javascript:alert(document.cookie)") Результатом выполнения этой функции будет вывод окна со значениями cookies пользователя, установленными браузером для сервера со страницы которого был показан Flash файл. Это означает, что мы успешно внедрили JavaScript код используя возможности браузера и Flash. Уязвимые ресурсы и примеры программ: Ezboard (http://ezboard.com/) является, вероятно, одной из самых лучших бесплатных скриптов досок объявления. В этой системе досок объявлений взамодействие с пользователями происходит через web интерфейс и позволяет вставлять в подписи пользователей Flash (используя тег EMBED). В наших испытаниях мы отредактируем настройки подписи следующим образом: HTML: <embed src="http://eyeonsecurity.net/download/example.swf" pluginspage= "http://www.macromedia.com/shockwave/download/ index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="0" height="0" > </embed> Этот код будет добавлен к каждому посту атакующего. Любой из посетителей сайта просмотревший этот пост будет подвержен атаке, в результате которой будут похищены cookies. Упомянутый выше deviantART позволяет пользователям размещать Flash файлы для всеобщего обозрения. Конечно же, атакующий может зарегистрировать новый акаунт, разместить злонамеренный Flash файл и захватить акаунты других пользователей и даже акаунт администратора. Не будем приводить конкретные примеры реализации атаки. Сообщество MSN[8] — это сайт который позволяет пользователям загружать файлы на сервер. SWF файлы (содержащие JavaScript код) — один из форматов фалов разрешенных к загрузке. Это очень серьезный недостаток в безопасности. В предыдущей статье[9] EyeonSecurity, которая называется «Атака на аккаунт Microsoft Passport», мы акцентируем внимание на том, как единственная уязвимость в технологии Passport создаёт существенную проблему в безопасности. Анонимные сервисы типа Anonymizer[10] и The-Cloack[11], также уязвимы к этой атаке. Эти сервисы фильтруют любой JavaScript код на HTML страницах, но не в состояние противостоять атакам описанным в этой статье. Популярные движки форумов Ikonboard и YaBB[12] особенно уязвимы к этой атаке. Эти форумы позволяют использовать специфические теги [flash], преобразуемые приложением в корректные теги <Object>. Пример: HTML: [flash]http://eyeonsecurity.net/download/example.swf[/flash] Эта строка преобразуется приложением в следующий код: <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width=200 height=200> <param name=movie value=http://eyeonsecurity.net/download/example.swf> <param name=play value=true> <param name=loop value=true> <param name=quality value=high> <embed src=http://eyeonsecurity.net/download/example.swf width=200 height=200 play=true loop=true quality=high> </embed> </object> Конечно же число уязвимых приложений не ограничивается этими примерами. Любой онлайн сервис позволяющий размещать Flash анимацию уязвим к XSS атакам. Представители сайтов описанных в этой секции были уведомлены относительно этой уязвимости прежде, чем этот документ был опубликован. Это означает, что многие примеры в настоящий момент уже не работают. Способы предотвращения: Хорошим решением было бы «пропарсить» flash анимацию и отфильтровать опасные параметры в getURL(). Это касается случая, когда web-приложения позволяют закачивать SWF файлы на сервер. Web-мастера всегда особенно стараются проанализировать и отфильтровать Flash-контент, если они разрешают пользователям закачку. Web-мастера могут блокировать любой Flash-контент, содержащий getURL(). Другое решение — сделать так, чтобы все действия getURL() выполнялись в новом окне. Это может быть достигнуто, если в качестве параметра target задать значение «_blank». Если применить вышеописанные изменения, то JavaScript URLы не будут исполняться с привилегиями домена. Однако, как замечено Bertrand Saint-Guillain[15], это решение не является безупречным в связи с тем фактом, что ActionScript — это мощьный скриптовый язык и в нем есть функция eval(). Эта функция позволяет более искушенным перцам игнорировать «парсинг» ActionScript. Пример: Code: a="get"; b="URL"; c="javascript:"; d="alert('bypassed');void(0);"; eval(a+b)(c+d); Код этого примера обойдет любую защиту, предлагаемую выше, т.к. нет getURL('javascipt:whatever'). Кроме того, есть еще одно, пожалуй более подходящее, решение — использовать разные домены для хранения и отображения Flash-роликов. Этот способ также может быть использован, чтобы сделать доступным активный контент и в других документах, таких как файлы HTML. Это значит, что если ваш домен securewebapplication.com, то вы могли бы хранить потенциально опасный контент на securewebapplication.net. Конечно это означает, что контент securewebapplication.net не требут аутентификации при помощи сессий, таким образом он доступен анонимным пользователям. Важно, чтобы потенциально опасный контент отображался только из «обезвреженного домена», это значит, что если флэш документ включен в файл HTML, то и этот HTML файл также должен быть отображен из «обезвреженного» домена. Web-разработчики также могут воспользоваться IFRAME, который ссылается непосредственно на Flash-анимацию, находящуюся на ином домене вместо использования тегов EMBED или OBJECT. В таком случае Flash-анимация работает точно так же, но подгружается из дочернего фрейма, исключая таким образом возможность использования JavaScript для кражи cookies и других XSS-атак. Впервые этот способ описали на форуме Neworder[16], а потом об этом распространилась[17] и Macromedia. Хотя это решение и является качественным, оно, тем не менее, ведет к меньшей совместимости с браузерами, которые не поддерживают IFRAME[18]. securitylab.ru
Ахтунг автор чудит: "Хорошим решением было бы «пропарсить» flash анимацию и отфильтровать опасные параметры в getURL(). Это касается случая, когда web-приложения позволяют закачивать SWF файлы на сервер. Web-мастера всегда особенно стараются проанализировать и отфильтровать Flash-контент, если они разрешают пользователям закачку. Web-мастера могут блокировать любой Flash-контент, содержащий getURL(). Другое решение — сделать так, чтобы все действия getURL() выполнялись в новом окне." Интересно как это будет он осуществлять )
при закачке на сайт, можно отфильтровать getURL(*,_self) -менять на getURL(*,_blank) или просто приписывать (*,_blank);, Хотя этот метод уязвим опять же с этими переменными=(