В современных версиях Microsoft Office документы по умолчанию сохраняются в формате, основанном на Office Open XML, однако Microsoft не во всем следует открытому стандарту. Вариант Microsoft часто называют MOX, Microsoft Open XML. Он содержит некоторые вольности, создающие угрозы безопасности. Сегодня мы подробно разберем одну из них — так и не закрытую на момент написания статьи.

Почти сразу после публикации чернового варианта OOXML началась битва за его стандартизацию. Вот краткая хронология версий.

  • 2006 год — ЕСМА-376, первая версия;
  • 2008 год — ISO/IEC 29500:2008 Transitional, переходная вторая версия;
  • 2008 год — ЕСМА-376, part 2, и ISO/IEC 29500:2008 Strict, финальная вторая версия;
  • 2011 год — ЕСМА-376, part 3, и ISO/IEC 29500:2011, третья версия;
  • 2012 год — ЕСМА-376, part 4, и ISO/IEC 29500:2012, четвертая версия;
  • 2015 год — ЕСМА-376, part 5, и ISO/IEC 29500-3:2015, пятая версия OOXML.

В 2016 году появились дополнения к пятой версии: ISO/IEC 29500-1:2016 и ISO/IEC 29500-4:2016. Работа над стандартом продолжается, а Microsoft допускает все больше проприетарных особенностей его реализации в новых версиях Office. Хуже того: компания не признает старые уязвимости, оставляя их в новых продуктах. Описываемая в статье дыра появилась в Microsoft Office 2013 и сохранилась вплоть до Office 2019.

INFO

ECMA-376 включает в себя три различные спецификации для каждого из трех основных типов документов Office — WordprocessingML для текстовых документов, SpreadsheetML для электронных таблиц и PresentationML для презентаций. Мы будем использовать WordprocessingML.

Я возьму на себя смелость указать на два критичных с точки зрения безопасности недостатка MOX, унаследованных от OOXML:

  • возможность легкого редактирования внутренней структуры документов;
  • отсутствие проверок на злонамеренную модификацию.

По сути, MOX и OOXML — это XML в ZIP. Это отличный hacker-friendly-формат, поскольку найти и заменить свойства объектов в нем исключительно просто даже без использования HEX-редакторов и прочих специфических утилит. Достаточно встроенной в Windows поддержки ZIP и «Блокнота». Весь код легко читается глазами и правится, как текст. Ни сверки контрольных сумм, ни каких-то иных специфических проверок при этом не выполняется. Word лишь проверяет целостность документа, которая не нарушается при подменах с соблюдением правил синтаксиса.

Если в документ вставлен объект, загружаемый с внешнего ресурса (например, ссылка на видео), то в соответствующей секции создается легко читаемая (и так же просто изменяемая) гиперссылка. Это прямая дорога к фишингу или запуску троянов в один клик.

WARNING

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

 

Описание уязвимости

В базе уязвимостей MITRE есть много однотипных записей вида: «Microsoft Office... do not properly validate record information during parsing of (Excel spreadsheets / Word documents, Power Point presentations)... which allows remote attackers to execute arbitrary code or cause a denial of service (memory corruption) via a crafted file)». Проще говоря, проблемы парсинга XML в MS Office неисчерпаемы, как атом.

Я уже рассматривал одну из них в статье «Pass the Hash через Open XML». Сейчас мы реализуем другую атаку, также слегка поковыряв недра файла Word.

Начиная с Office 2013 в OOXML стал доступен класс WebVideoProperty. Он появляется в разметке при вставке в документ онлайн-видео и описывает параметры его воспроизведения через набор атрибутов.

Нас будет интересовать атрибут embeddedHtml. Он нужен для вставки внешних объектов и содержит ссылку на них (например, на видеоролик YouTube). Из-за того что этот параметр «знает», из какого закоулка интернета тянуть картинку видеозаписи, его нельзя опустить при парсинге.

 

Ищем объект подмены

Давай выполним простую атаку подмены и пощупаем уязвимость своими руками. Запускаем Word (требуется версия 2013 или выше, так как нам нужна полная поддержка ISO/IEC 29500 Strict) и идем в меню «Вставка».

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии