Уязвимость и ошибка логического разделения поселились в плеере gstreamer версий 0.10.x для музыкальных файлов Nintendo Entertainment System, сообщил Крис Эванс в своем блоге о кибербезопасности. Уязвимость системы позволяет получить стабильный доступ к использованию и обхождению 64-битных ASLR, DEP и так далее. Такое стало возможным благодаря наличию поддержки тьюринг-полного скриптования музыкальных файлов внутри плеера. Уязвимость кроется в поддержке обратной совместимости.
Уязвимости подвержена Ubuntu старой, все еще поддерживаемой LTS-версии 12.04.5. В последующих версиях используется новый glibc, и эксплойт в системе уже не работает.
Что собой представляет
Автор анализа приводит скриншот вызова эксплойта.
Процесс активации происходит без инициализации зараженного файла, для этого достаточно зайти в папку с ним.
Находится баг в файле звукового декодера libgstnsf.so
из дистрибутива gstreamer-0.10
, который используется в системе по умолчанию для всех задач, связанных со звуком. В Ubuntu 14.04 тоже есть этот декодер, но по умолчанию в большинстве случаев используется gstreamer-1.0
.
В процессе инсталляции Ubuntu система как бы между прочим задает вопрос, хочет ли пользователь работать с mp3-файлами. Множество дополнительных пакетов устанавливаются после положительного ответа, включая плагины из пакета Bad — те, которые не всегда радуют качеством: у них нет ревью кода, мейнтейнера, документации и так далее.
Как выглядит атака
Эксплойт злоупотребляет уязвимостью плагина для воспроизведения музыкальных файлов NSF. Эти аудиотреки не похожи на обычные дорожки, которые воспроизводит персональный компьютер.
Файлы формата NSF проигрывает эмулятор процессора консоли NES и звуковое аппаратное обеспечение в реальном времени. Кроме этого внутри NSF-файла может быть набор инструкций. Чтобы проиграть его, уязвимый аудиоплеер эмулировал процессор сорокалетней давности. В подверженной уязвимости версии Ubuntu два плеера, но во втором libgme
ошибки нет.
Плагин gstreamer
создает виртуальное аппаратное окружение процессора 6502 и проигрывает музыку, запуская часть кода на эмуляторе. Затем он считывает результирующие значения из виртуальных звуковых регистрах и рендерит звуковые сэмплы на их основе.
Формат звука NES — стандарт музыкального файла, который сжимает музыку к игре NES для воспроизведения. Он содержит язык скрипта, который используется для запуска уязвимости. Когда вы открываете файл NSF на зараженной системе Ubuntu, он находит свой путь к файлу libgstnsf.so
через музыкальный плеер и мультимедийный фреймворк gstreamer.
Интересующиеся примером могут скачать файл аудио из Castlevania 2 cv2.nsf. Если ваша Linux поддерживает данный формат, звук проиграется командой вроде totem cv2.nsf
. Это крохотный файл в 17264 байта содержит небольшую программу — сэмплы в таком на поместятся. Если система не распознает такой формат, она предложит скачать недостающий плагин.
Плагин работает в процессе эмуляции реального 6502, как в NES для получения музыки на выходе и где-то здесь и находится уязвимость. Так что дело не только в многослойной обратной совместимости для проигрывания непонятных форматов музыкальных файлов, но и эмуляции программы для «восьмибитки» из 1970-х годов.
Какими способами можно использовать такую уязвимость:
- Переслать эксплойт как приложение к письму. Если жертва загружает и открывает файлы, ее система под угрозой. Многие конфигурации Linux не знают, как работать с файлом NSF — так что вы можете переименовать его в mp3. Большинство медиа-плееров на основе
gstreamer
проигнорируют расширение файла и применят автоматическое определение формата для загрузки соответствующего декодера к нему. - Частичная drive-by download. Используя, в некотором смысле рискованную, загрузку файлов через Google Chrome, возможно свалить файлы в папку загрузок системы жертвы, когда пользователь посещает «неправильные» веб-страницы. Когда позже директория загрузок открывается файловым менеджером, то ПО пытается показать иконки к файлам с понятными системе расширениями.
- Полная drive-by download. При аналогичной небезопасной загрузке через браузер Google Chrome существует путь возможной полной попутной загрузки. Крис обещал рассказать об этом в следующей статье своего блога.
- Атака на основе USB-накопителя. Если открыть флешку в файловом менеджере, он опять же попытается отрисовать иконки файлов.
Дополнительные объяснения
Этот эксплойт работает одинаково хорошо при запуске в следующих программах:
- Totem
- Rhythmbox
- gst-launch-0.10
- Nautilus (может запустить подпроцесс)
Подробности описаны в соответствующих разделах поста Криса: обзор самого эксплойта, возможные варианты уязвимостей, детали эксплойта.
Также он пишет о том, что найденная ошибка формально относится к 0-day уязвимостям, но поражает только старую Ubuntu 12.04, которая вышла в апреле 2012 года и является long-term support-версией. Ее будут поддерживать до 26 апреля 2017 года. Проблема скорее minor, чем major. Факт того, что она пришла через процессор 1975 года, остается забавным.
P.S. Уязвимость уже была исправлена членами команды Ubuntu.
Автор: Nuteralie