В пакете Apport, применяемом в Ubuntu Linux для автоматизации обработки крахов приложений, выявлена критическая уязвимоcть (CVE-2016-9949), позволяющая организовать выполнение кода от имени текущего пользователя, а при определённых условиях под пользователем root. Проблема проявляется в Desktop-редакциях дистрибутива Ubuntu начиная с выпуска 12.10 и исправлена в недавно опубликованном обновлении пакета Apport.

В Ubuntu система Apport обрабатывает сведения о крахе приложения, в том числе автоматически вызывается при возникновении исключительных ситуаций в скриптах на языке Python и отслеживает сбои во время установки пакетов. Отчёт о крахе сохраняется в текстовых файлах с расширением «.crash», при наличии которых вызывается специальная утилита, выводящая на экран диалог с предложением отправить отчёт разработчикам Ubuntu.

Ошибка в коде разбора файлов crash позволяет осуществить выполнение произвольного кода на языке python, присутствующего в crash-отчете. Для генерации произвольных эксплоитов подготовлен специальный инструментарий. В простейшем случае для проверки наличия уязвимости можно записать нижеприведённый текст в файл c расширением .crash, при обработке которого будет выполнен запуск калькулятора:


   ProblemType: Bug
   ExecutablePath: /usr/bin/file-roller
   Stacktrace:
    None
   CrashDB: {'impl': 'memory', 'crash_config': exec("""
    import subprocess
    payload_cmd = "pkill -9 apport; gnome-calculator"
    subprocess.Popen(payload_cmd, shell=True)
    """, {}) }

Для эксплуатации уязвимости необходимо добиться открытия данного файла в обработчике Apport, что можно сделать несколькими путями. Например, так как apport-gtk зарегистрирован для обработки MIME-типа «text/x-apport», достаточно открыть файл с расширением .crash в файловом менеджере. Кроме того, обработчик вызывается для всех файлов не имеющих MIME-привязки к расширению, начинающихся со строки «ProblemType: «, т.е. можно записать эксплоит в файл с любым неизвестным системе расширением, например zip. Попытка просмотра такого файла также приведёт к эксплуатации уязвимости. Разместить файл на сайте и применив методы социальной инженерии, можно добиться загрузки этого файла пользователем. Как только файл будет сохранён и пользователь попытается просмотреть его содержимое — будет активирован обработчик Apport и запущен код атакующего.

Второй вариант атаки позволяет добиться локальным пользователем выполнения кода с правами root. Если сохранить файл с расширением .crash в директории /var/crash (доступна на запись всем пользователям), он будет автоматически обработан. При этом если файл сохранён под идентификатором пользователя меньше 500, то обработка будет выполнена с правами root. В качестве одного из методов записи файла с uid меньше 500 предлагается использовать доступную в mysql возможность сохранения таблицы в произвольной директории («SELECT INTO … OUTFILE») или организовать запись чрез web-скрипт, выполняемый от пользователя www-data.

При входе пользователя в систему, для crash-файлов из директории /var/crash вызывается процесс apport-crashreports, который запрашивает через PolicyKit выполнение действий с правами root. Выводимый диалог лишь уведомляет о возникновении проблемы в системном приложении и предлагает отправить разработчикам отчёт, не детализируя о каком приложении идёт речь. Если пользователь согласится с предложением отправить отчёт, то эксплоит будет выполнен в системе с правами root.

Уязвимость была обнаружена исландским исследователем безопасности Donncha O’Cearbhaill под впечатлением от недавних исследований Криса Эванса (Chris Evans), показавших большой пласт проблем в обработчиках контента, применяемых на рабочих столах популярных дистрибутивов Linux. Изучив предлагаемый по умолчанию список привязки обработчиков MIME-типов исследователь заметил Apport и сразу обратил внимание на небезопасность использования привязок к Python-коду в файлах с отчётами о крахах.

Примечательно, что скупщиками эксплоитов автору было предложено 10 тысяч долларов за то, чтобы он передал им технологию атаки и сохранил информацию об уязвимости в тайне. Но автор исследования, который не раз получал вознаграждения за выявление уязвимостей от компании Google, отказался и предпочёл сообщить о проблеме разработчикам. Разработчики Ubuntu достаточно оперативно отреагировали на сообщение о проблеме и за несколько дней подготовили обновление пакета.

opennet.ru