Почти сразу после публикации чернового варианта 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»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»