Содержание статьи
Общие сведения
Впервые проблемы были обнаружены исследователями Стивеном Сили (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. Версии до нее тоже уязвимы.

Для отладки я буду использовать Immunity Debugger, а для дизассемблирования — IDA 6.6 Pro. Но это мой личный выбор, ты можешь взять любые инструменты, к которым лежит сердце.
Также нам нужно чем-то генерировать PDF. Для этих целей я прихватил питоновскую утилиту make-pdf производства Didier Stevens Labs.
Сразу оговорюсь, что в Foxit Reader используется режим безопасного просмотра (Safe Reading). Он создан как раз для предотвращения подобного типа атак и включен по умолчанию после установки.

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

Как по мне, так это окно не внушает особого страха пользователю и не доносит всей опасности выключения режима Safe Reading. К тому же галочки услужливо установлены в нужные атакующему позиции. Если нажать на OK, то безопасный просмотр отключится не только для текущей сессии, но и глобально, для всех последующих запусков приложения.
Ну и конечно, никто не отменял социальную инженерию. 😉
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»