2 Октября, 2013

Browser Security Handbook. Глава 1, пункт 12

Сергей Сторчак
Руководство по безопасности браузеров (Browser Security Handbook). Глава I 
§ 11. Другие встроенные форматы документов  

§12. Контентные плагины  

В отличие от небольшого и вполне определенного набора изначально поддерживаемых форматов документов, сфера применения браузерных плагинов очень разнообразна и быстро расширяется. Большинство распространенных плагинов для отображения контента вызываются с помощью тегов <OBJECT> или <EMBED> (или <APPLET> для Java), но могут использоваться и другие типы интеграции.
Распространенные плагины, встраиваемые в страницу сайта, можно разделить на несколько основных категорий:

- Языки веб-программирования. Включает такие технологии, как Adobe Flash , Java или Microsoft Silverlight , присутствующие на подавляющем большинстве настольных компьютерах. Эти языки, как правило, позволяют выполнять множество сценариев (скриптов), включая доступ к документу верхнего уровня и другой DOM-информации, или способны отправить сетевые запросы на некоторые объекты. Модели безопасности, реализованные этими плагинами обычно отличаются от моделей самого браузера нелогичными или непредусмотренными особенностями. Такие технологии веб-разработки становятся главной целью для проведения атак.  Они также представляют потенциальную угрозу безопасности из-за недостаточной обработки входных данных в популярных плагинах.
- Интегрированные форматы документов, отличные от HTML. Некоторые популярные редакторы документов или средства просмотра, включая Acrobat Reader и Microsoft Office , устанавливают плагины для поддержки собственных форматов на HTML-странице или для просмотра содержимого в полноэкранном режиме прямо в браузере. Интересной особенностью этого механизма является то, что многие такие форматы документов позволяют создавать сценарии или предлагают интерактивные функции (например, интерактивные ссылки), что может привести к передаче данных браузеру необычным или непредсказуемым способом. Например, существуют методы для перемещения окна браузера с помощью JavaScript в Url-адресах встроенных в PDF-документы - и этот код будет выполняться в контексте безопасности сайта.
- Языки разметки,  интегрированные в HTML. Языки разметки, такие как VRML , VML или MathML , также поддерживаются в некоторых браузерах с помощью плагинов, и могут быть встроены в стандартные HTML-документы; они имеют такой же вектор атаки, что и формат XML (см. предыдущий параграф).
- Мультимедийные форматы, обладающие широкими возможностями. Различные плагины  позволяют воспроизводить видео и аудио непосредственно в браузере без открытия окна мультимедийного проигрывателя. Интеграцию плагина в браузер, расширяющие его возможности, предлагают большинство современных медиаплееров, в частности, Windows Media Player , QuickTime , RealPlayer или VLC . Большинство таких форматов не влияют на безопасность для принимающей стороны, хотя на практике, этот тип интеграции подвержен определенным ошибкам.
- Специализированные виджеты для манипулирования данным. Они включают в себя функции, такие как DHTML Editing Control с CLSID 2D360201-FFF5-11D1-8D03-00A0C959BC0A. Некоторые такие плагины поставляются вместе с Windows и помечаются как безопасные, хотя безопасности уделяется мало внимания.

Общая информация: в некоторых азиатских странах применяются плагины на основе модуля шифрования , реализованные в виде управляющих элементов ActiveX.

Одним из наиболее важных свойств безопасности объектов, вложенных в теги, является возможность встраивания произвольных типов файлов, манипулируя заголовками Content-Typeи Content-Disposition.
Приоритеты входящих данны х для того, чтобы решить, как интерпретировать содержание в различных браузерах, описаны с таблице 13.

Таблица №13


Входной сигнал
MSIE6
MSIE7
MSIE8
FF2
FF3
Safari
Opera
Chrome
Android
Тип тега и TYPE= / CLASSID=значение
#1
#1
#1
#1
#1
#1
#1
#1
n/a
Content-Type=значение, если TYPE=не определен
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
n/a
Content-Type=значение, если TYPE= отсутствует
#2
#2
#2
#2
#2
#2
#2
#2
n/a
Сниффинг контента, если TYPE=не определен
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
n/a
Сниффинг контента, если TYPE=отсутствует
игнорировать
игнорировать
игнорировать
игнорировать
игнорировать
(#3)
игнорировать
(#3)
n/a

Подход по определению обрабатываемых входных данных является проблематичным, поскольку он лишает сервер выбирать определенные ресурсы, которые рассматриваются как интерпретируемый плагином документ в ответ на действия вредоносного стороннего сайта. В сочетании со слабым синтаксическим анализатором в браузерных плагинах это приводит к старым уязвимостям .  

Примечание: К сожалению, на сегодняшний день нельзя полностью проконтролировать как будет отображаться управляемый плагином документ . 


 Другое интересное свойство, которое стоит отметить - это наличие во многих модулях собственных HTTP-стеков и кэширование системы, что позволяет обойти настройки конфиденциальности браузера.