
CVE-2023-44452, CVE-2023-51698: Внедрение аргументов при разборе CBT-файлов, затронувшее популярные дистрибутивы Linux
Критическая уязвимость RCE/инъекции команд в один клик, затрагивающая популярные операционные системы Linux с рабочими окружениями MATE, Cinnamon и некоторыми Xfce.
Затронутые операционные системы:
Linux Mint Kali Linux (популярная ОС среди специалистов по безопасности, исследователей) Parrot OS (популярная ОС среди специалистов по безопасности, исследователей) Ubuntu-Mate Xubuntu Fedora Cinnamon Fedora Mate Manjaro Mate Manjaro Cinnamon Ubuntu Kylin (официальный китайский Ubuntu) Kylin OS V10 (ОС, которая, как говорят, используется в китайских государственных структурах)
А также другие рабочие окружения MATE, Cinnamon и некоторые Xfce.
Затронутый программный компонент: все версии, включая последние версии Atril Document Viewer (программа просмотра документов по умолчанию для окружения MATE, один из популярных просмотрщиков документов) и Xreader Document Viewer (программа просмотра документов по умолчанию в Linux Mint)
Краткое описание уязвимости:
Эта уязвимость позволяет удалённым злоумышленникам выполнять произвольный код на затронутых установках Linux Mint Xreader. Для эксплуатации этой уязвимости требуется взаимодействие с пользователем, а именно: цель должна посетить вредоносную страницу или открыть вредоносный файл.
Конкретный дефект возникает при разборе CBT-файлов. Проблема связана с отсутствием надлежащей проверки предоставленной пользователем строки перед её использованием для выполнения системного вызова. Злоумышленник может использовать эту уязвимость для выполнения кода в контексте текущего пользователя.
Эта уязвимость вызвана некорректным фрагментом кода в Atril и Xreader, отвечающим за обработку документов комиксов (.cbr, .cbz, .cbt, .cb7). Документы комиксов — это просто архивы, содержащие изображения. Уязвимость здесь может быть использована с помощью специально созданного CBT-документа, который представляет собой TAR-архив.
Корневая причина — уязвимый фрагмент кода в обоих просмотрщиках документов (comics-document.c):
static const ComicBookDecompressCommand command_usage_def[] = {
/* RARLABS unrar */
{"%s p -c- -ierr --", "%s vb -c- -- %s", NULL , FALSE, NO_OFFSET},
/* GNA! unrar */
{NULL , "%s t %s" , "%s -xf %s %s" , FALSE, NO_OFFSET},
/* unzip */
{"%s -p -C --" , "%s %s" , NULL , TRUE , OFFSET_ZIP},
/* 7zip */
{NULL , "%s l -- %s" , "%s x -y %s -o%s", FALSE, OFFSET_7Z},
/* tar */
{"%s -xOf" , "%s -tf %s" , NULL , FALSE, NO_OFFSET},
/* UNARCHIVER */
{"unar -o -" , "%s %s" , NULL , FALSE, NO_OFFSET}
};
Глядя на приведённый выше код, мы видим, что для распаковки используются shell-команды. Обратите внимание на раздел /* tar */: он фактически вызывает следующую shell-команду: "tar -xOf <имя_файла> -tf <изображение_внутри_tar_архива>". Это делается для просмотра/загрузки каждого изображения внутри CBT-документа. Это поведение можно использовать, применив опцию программы tar '--checkpoint-action' для выполнения произвольных команд на целевой системе, назвав одно из изображений внутри CBT-документа, например, '--checkpoint-action=EXEC=bash -c "whoami>/tmp/who.txt";.jpg'.
Эта уязвимость уже была обнаружена в Evince Document Viewer (программа просмотра документов по умолчанию в GNOME) ещё в 2017 году. Поскольку Atril и Xreader являются форками Evince, эта уязвимость присутствовала как в Atril, так и в Xreader. Команда Atril исправила уязвимость в то время, добавив фрагмент кода, который завершает процесс Atril, если в имени CBT-файла встречается "--checkpoint-action=". Вот этот патч (comics-document.c) (строка 983):
extract_argv (EvDocument *document, gint page)
{
ComicsDocument *comics_document = COMICS_DOCUMENT (document);
char **argv;
char *command_line, *quoted_archive, *quoted_filename;
GError *err = NULL;
if (g_strrstr (comics_document->page_names->pdata[page], "--checkpoint-action="))
{
g_warning ("File unsupported\n");
gtk_main_quit ();
}
Как вы можете видеть, он выводит сообщение "File Unsupported" в консоль и завершает работу при обнаружении "--checkpoint-action=" в имени страницы/файла. Я заметил, что это работает только с пустым файлом или действительно маленьким файлом изображения, а если предоставить файл большего размера с большим количеством байтов, функция "gtk_main_quit ();" не срабатывает, поэтому программа продолжает работу, выполняя тем самым внедрённую произвольную команду.
В рабочем окружении MATE, многих XFCE и облегчённых рабочих окружениях (включая такие ОС, как Kali, Parrot, Xubuntu, Ubuntu Mate, Kylin, Fedora Mate, Manjaro Mate), эту уязвимость можно использовать, просто отправив ссылку/URL, потому что в этих операционных системах/окружениях установлен Atril, а Atril имеет дополнительный компонент под названием atril-previewer, который запускает эксплойт даже без открытия или клика по документу. Злоумышленник может создать веб-страницу, которая мгновенно загружает специально созданный CBT-файл в целевую систему, когда целевой пользователь посещает веб-страницу, а современный браузер Firefox в наши дни по умолчанию загружает файлы автоматически без подтверждения пользователя; когда пользователь переходит в свой каталог Downloads, полезная нагрузка будет выполнена, что даст злоумышленнику shell.
В Linux Mint (рабочее окружение Cinnamon) целевой пользователь должен открыть документ, чтобы запустить полезную нагрузку, потому что Linux Mint использует Xreader, а Xreader не имеет предпросмотрщика.
Я приложил полностью рабочий эксплойт вместе с демонстрационным видео в zip-архиве (doctTar-inject_exploit.zip) к этой заявке.
В демонстрационном видео сценарий следующий: Машина атакующего — Kali Linux Машина жертвы — Kali Linux последней версии (2023.3) Жертва посещает вредоносный URL/ссылку, сгенерированную моим скриптом эксплойта
Зависимости эксплойта: poppler-utils Пожалуйста, установите poppler-utils перед запуском скрипта эксплойта на вашей Linux-машине (предпочтительно Kali). Установка: apt install poppler-utils.