Фишинговые кампании — классическое начало многих хакерских атак. Они направлены на доставку вредоносного файла потенциальной жертве и обычно ведутся по электронной почте. Чаще всего оболочкой для боевой нагрузки служит офисный документ, при открытии которого выполняются нестандартные действия. Мы рассмотрим, как выполнить произвольный код с помощью модифицированного файла OpenDocument Text.

Большинство фишинговых приемов направлены на эксплуатацию уязвимостей в Microsoft Office, так как это самый популярный офисный пакет. Однако сейчас многие фирмы переходят на LibreOffice и OpenOffice, в том числе ошибочно считая их неуязвимыми.

С ростом популярности этих программных пакетов они тоже стали привлекать внимание хакеров и независимых исследователей. Просто, в отличие от набивших оскомину багов MS Office, информации об уязвимостях в опенсорсных пакетах пока накопилось не так уж много. Целью моего исследования будет не столько рассмотреть уязвимость какой-то конкретной версии программы, сколько разобрать формат ODT и особенности его обработки.

WARNING

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

 

Эксплуатируем CVE-2018-16858

 

Теория

Найденная уязвимость позволяет выполнить несанкционированный доступ к файловой системе, используя атаку обхода пути (path traversal attack). Это одна из самых часто встречающихся уязвимостей и канонический тип атаки. В данном случае злонамеренно модифицированный файл ODT может загрузить за пределами родительского каталога скрипт на Python, который получит доступ к файловой системе и выполнит любые указанные действия с правами текущего пользователя.

Первым данную уязвимость обнаружил старший пентестер немецкой фирмы Cure53 Алекс Инфур (Alex Infuhr). Он предал свою находку огласке, и LibreOffice пропатчили, однако все версии до 6.0.7 (крайне популярные сейчас) по-прежнему уязвимы.

Немного размытой остается ситуация с Apache OpenOffice. Отдельного патча нет, и текущая версия 4.1.6 уязвима до сих пор. Сторонняя компания ACROS Security включила в свой агент 0patch заплатку для данной уязвимости, но только в версиях OpenOffice и LibreOffice для Windows. Более подробно см. на их сайте.

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

Ответ разработчиков агента
Ответ разработчиков агента

Наш микропатч для LibreOffice и OpenOffice просто проверяет, что [в документе] нет типичных шаблонов для выполнения атаки «обход пути», таких как «../», «..\» или «..|».

Интересно, что некоторые антивирусы также ищут признаки эксплоита по всему документу, включая его текстовые поля и игнорируя формат. Например, «Антивирус Касперского» ругается даже на эту статью, если попытаться открыть ее черновик в OpenOffice как .odt или в MS Office как .docx.

Ложноположительный детект
Ложноположительный детект
 

Практика

Разберем суть уязвимости. Во время инсталляции LibreOffice в Windows также устанавливается интерпретатор Python 3. Он находится по известному адресу C:\Program Files\LibreOffice\program\python-core-3.5.5\bin. Офисный пакет может исполнить Python-скрипт, если указать ссылку на него внутри документа и правильно сослаться на него.

Документы .odt основаны на XML (как и .docx), поэтому их внутреннюю структуру легко изучать и модифицировать. Здесь открывается большой простор для разных вариантов атак, но в общем случае нам необходимо создать в документе какую-либо задачу, которая запустит скрипт на Python.

Вот тут и наступает самое интересное. Если подменить путь к исполняемому коду и он будет соответствовать правилам исполнения, то LibreOffice выполнит его, не проверяя путь к скрипту. Например, мы можем выйти за рамки рабочей директории, и ничего нам за это не будет… а вот жертве — будет!

Все описанное выше справедливо и для OpenOffice, просто в нем используется Python 2, поэтому местоположение некоторых скриптов будет другое. Это нужно учесть, если ты захочешь написать универсальный файл, эксплуатирующий уязвимость в обоих офисных пакетах.

INFO

Все тесты проведены на Windows 10 версия 1803 сборка 17134.523. За основу взят пакет LibreOffice последней уязвимой версии 6.0.6.2.

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

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

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

Оставить мнение

Check Also

Cisco исправила критическую уязвимость в маршрутизаторах ASR 9000

На этой неделе разработчики Cisco исправили более 30 багов в своих продуктах, включая крит…