Найдена новая уязвимость в Ubuntu, позволяющая выполнить произвольный код на машине жертвы

23-летний исследователь и разработчик ПО Donncha O’Cearbhaill обнаружил уязвимость в Ubuntu Desktop, позволяющую выполнить любой код на удалённой машине, если пользователь просто откроет скачанный файл (который может выглядеть и вести себя как обычный zip-архив, например). Уязвимы все версии выше 12.10, установленные с настройками по умолчанию.

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

Атака стала возможна благодаря системе краш-репортов Ubuntu:

Код сначала проверяет, начинается ли поле CrashDB с символа «{», что считается обозначением Python-выражения. Если это так, то Apport вызовет функцию eval(), передав ей значение поля CrashDB. Эта функция пытается вычислить все переданные ей данные, как Python-выражение, что и приводит по сути, к выполнению произвольного кода.

Небольшое изменение позволяет выполнить код и с правами root. Дело в том, что любой краш-репорт в папке /var/crash, созданный пользователем с uid < 500, будет считаться системным, а значит, для его открытия будет запрошен пароль суперпользователя через PolicyKit, который не будет сообщать, что именно он пытается открыть. Пользователь скорее всего введёт пароль, так как точно такое же окно возникает и при любых других случайных падениях приложений.

Donncha уже сообщил разработчикам Ubuntu о найденной уязвимости, и она была исправлена во всех свежих дистрибутивах. Рекомендуем вам обновиться через стандартный механизм получения обновлений.