Foxit Reader — популярная программа для просмотра PDF. Занимает мало, работает быстро и для многих пользователей полностью заменяет неповоротливый Adobe Acrobat. Одна беда — вот уже четыре месяца его разработчики не могут закрыть дыру, которая позволяет исполнять произвольный код из вредоносного PDF. Сейчас я покажу, что это за дыра и как ее эксплуатировать.
 

Общие сведения

Впервые проблемы были обнаружены исследователями Стивеном Сили (Steven Seeley) и Арьеле Кальтабиано (Ariele Caltabiano). Найдя уязвимость, они отправили репорты вендору через платформу Zero Day Initiative (ZDI) еще в мае этого года. Однако разработчики из Foxit до сих пор не внесли исправлений, и, когда дедлайн в 120 дней истек, детали отчетов были опубликованы в блоге ZDI.

Красота уязвимостей в их простоте — это не повреждение памяти и не переполнения, которые обычно встречаются в проприетарном ПО. Причиной проблем стал встроенный в просмотрщик PDF-документов JavaScript API.

Сам формат PDF позволяет создавать документы с динамическим контентом, и один из вариантов — делать это при помощи JavaScript. Чаще всего эта возможность применяется в том случае, если содержимое документа должно меняться в зависимости от каких-либо событий, либо для ограничения действий пользователя при заполнении форм.

Изначально спецификация JavaScript API была разработана компанией Adobe для расширения возможностей своего просмотрщика. Затем поддержка большей части функций перекочевала и в сторонние редакторы, такие как Foxit Reader.

Однако некоторые особенности реализации JavaScript API в Foxit вызывают вопросы. Так, из-за некорректной или отсутствующей фильтрации пользовательских данных в функциях API атакующему открывается возможность сгенерировать такой PDF, при открытии которого просмотрщик выполнит произвольный код или запишет файл с произвольным содержимым в любое место на диске.

Давай посмотрим на практике, как это можно проэксплуатировать.

WARNING

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

 

Тестовый стенд

В качестве хостовой ОС я буду использовать Windows 10 х64. Однако уязвимости платформонезависимы, так что все операции с минимальными изменениями будут успешно работать и на машинах с Linux.

Разумеется, нам понадобится Foxit Reader. На момент написания статьи последняя и по совместительству уязвимая версия была 8.3.1.21155. Версии до нее тоже уязвимы.

Уязвимая версия Foxit Reader
Уязвимая версия Foxit Reader

Для отладки я буду использовать Immunity Debugger, а для дизассемблирования — IDA 6.6 Pro. Но это мой личный выбор, ты можешь взять любые инструменты, к которым лежит сердце.

Также нам нужно чем-то генерировать PDF. Для этих целей я прихватил питоновскую утилиту make-pdf производства Didier Stevens Labs.

Сразу оговорюсь, что в Foxit Reader используется режим безопасного просмотра (Safe Reading). Он создан как раз для предотвращения подобного типа атак и включен по умолчанию после установки.

Safe Reading по дефолту включен после установки
Safe Reading по дефолту включен после установки

Однако при открытии файла, который содержит JavaScript, программа спросит, отключить ли режим безопасного просмотра документа.

Почти безобидное окно с запросом на отключение режима безопасного просмотра документов
Почти безобидное окно с запросом на отключение режима безопасного просмотра документов

Как по мне, так это окно не внушает особого страха пользователю и не доносит всей опасности выключения режима Safe Reading. К тому же галочки услужливо установлены в нужные атакующему позиции. Если нажать на OK, то безопасный просмотр отключится не только для текущей сессии, но и глобально, для всех последующих запусков приложения.

Ну и конечно, никто не отменял социальную инженерию. 😉

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

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

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

Вариант 2. Купи одну статью

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


7 комментариев

Подпишитесь на ][, чтобы участвовать в обсуждении

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

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …