2 Сентября, 2013

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

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

§ 11. Другие встроенные форматы документов

Современные средства визуализации браузера, как правило, поддерживают дополнительный набор мультимедийных форматов, которые могут отображаться на странице в виде отдельных документов. Их можно разделить на две группы:

- Простые форматы данных.Они включают в себя простые текстовые данные или изображения (JPEG, GIF, BMP и т.д.),  для которой браузер выделяет основную визуализацию холста (область рисунка)и заполняет её статическими данными. В принципе последствия для безопасности не возникают с этими типами данных, поскольку никакие вредоносные полезные нагрузки не могут быть встроены в сообщение (за исключением крупных и довольно редких ошибок реализации). Помимо распространенных графических форматов, некоторые браузеры могут также поддерживать другие нетипичные или устаревшие медиа-форматы, например, воспроизведение MIDI -файлов, указанных в теге <BGSOUND>.

- Обогащенные форматы данных.К данной категории в основном относятся XML-форматы ( SVG , RSS , Atom ); помимо исходных данных , эти форматы документов содержат различные инструкции визуализатора, подсказки или условные выражения.

Из-за принципа работы XML, каждый основанный на нем формат имеет два важных последствия для безопасности:

- Во-первых, вложенные пространства имен XML могут быть определены, и, как правило, не сверяться с MIME-типом, позволяя встраивать их в HTML, например, в image/svg+xml.
- Во-вторых, эти форматы могут, фактически, поступать с условиями для нестандартного внедрения в HTML или полезными нагрузками Javascript или встроенным сценарием, допуская HTML-инъекцию, даже если у атакующего нет прямого управления структурой документов XML.

Один из примеров документа, с MIME-типом image/svg+xml, который будет по-прежнему выполнять сценарии для большинства современных браузеров, выглядит следующим образом:

<?xml version="1.0"?>
<container>
  <svgxmlns="http://www.w3.org/2000/svg">
    [...]
  </svg>
  <htmlxmlns="http://www.w3.org/1999/xhtml">
    <script>alert('Hello world!')</script>
  </html>
</container>

Кроме того, SVG изначально допускает встроенные сценарии и обработчики событий; во всех браузерах, поддерживающих SVG, эти сценарии выполняются призагрузке изображенияв качестведокумента верхнего уровня, иигнорируются, когда представлены через тег <IMG>.
Работа некоторых встроенных типов документов,  не являющихся HTML, описаны в таблице № 12:
 Таблица №12
Описание теста
MSIE6
MSIE7
MSIE8
FF2
FF3
Safari
Opera
Chrome
Android
Поддержка растровых форматов (кроме JPG, GIF, PNG)
BMP, ICO, WMF
BMP, ICO, WMF
BMP, ICO, WMF
BMP, ICO TGA*
BMP, ICO TGA*
BMP TIF
BMP*
BMP, ICO
BMP, ICO
Поддержка XML
ДА
ДА
ДА
ДА
ДА
ДА
ДА
ДА
ДА
Поддержку RSS-канала
НЕТ
ДА
ДА
ДА
ДА
ДА
ДА
НЕТ
НЕТ
Поддержка Atom-канала
НЕТ
ДА
ДА
ДА
ДА
ДА
ДА
НЕТ
НЕТ
Выполнение javascript в каналах
(ДА)
НЕТ
НЕТ
НЕТ
НЕТ
НЕТ
НЕТ
(ДА)
(ДА)
javascript: или data: URL разрешены в каналах?
n/a
НЕТ
НЕТ
НЕТ
НЕТ
НЕТ
НЕТ
n/a
n/a
Спецификации CSS разрешены в каналах?
n/a
НЕТ
ДА
ДА
ДА
НЕТ
ДА
n/a
n/a
Поддержка SVG
НЕТ
НЕТ
НЕТ
ДА
ДА
ДА
ДА
ДА
НЕТ
Может image/svg+xmlдокумент содержать HTML xmlnsполезную нагрузку?
(ДА)
(ДА)
(ДА)
ДА
ДА
ДА
ДА
ДА
(ДА)
*Поддержка формата ограничена или нарушена.

Любопытно, что VectorMarkupLanguage (VML) , основанный  на XML, изначально не поддерживается в визуализации, и реализован в виде плагина, в то время как Scalable Vector Graphics (SVG) реализован в качестве основного компонента виртуализации во всех браузерах, которые его поддерживают.