В середине июня в модуле ядра Linux rkvdec была выявлена уязвимость (CVE-2023-35829), приводящая к обращению к области памяти после её освобождения (use-after-free) из-за состояния гонки в процедуре выгрузки драйвера. Предполагалось, что проблема ограничивается вызовом отказа в обслуживании. Недавно в некоторых сообществах в Telegram и Twitter появилась информация, что уязвимость может быть использована для получения root-прав непривилегированным пользователем и в качестве доказательства на GitHub были опубликованы два рабочих прототипа эксплоитов apkc/CVE-2023-35829-poc и ChriSanders22/CVE-2023-35829-poc (уже удалены администрацией GitHub, копия).
Разбор опубликованных эксплоитов показал, что они содержат вредоносный код, устанавливающий в Linux-системы вредоносное ПО, настраивающее бэкдор для удалённого входа и отправляющее злоумышленникам некоторые файлы. Дополнительно был выявлен ещё один аналогичный вредоносный эксплоит (ChriSanders22/CVE-2023-20871-poc), прикрывающийся уязвимостью в VMware Fusion. Начинка вредоносных эксплоитов не имела отношения к уязвимостям в rkvdec и VMware Fusion, и базировалась на коде старого эксплоита, созданного для эксплуатации прошлогодней уязвимости в nftables (CVE-2022-34918).
Вредоносный эксплоит лишь симулировал получение root-доступа, выводя диагностические сообщения о ходе атаки, создавая отдельное пространство идентификаторов пользователей (user namespace) со своим пользователем root и запуская в изолированном от основной системы окружении оболочку /bin/bash, что создавало впечатление наличия root-доступа при запуске утилит, подобных whoami.
Активация вредоносного кода производилась через вызов исполняемого файла aclocal.m4 из сборочного сценария Makefile (исследователей, обнаруживших вредоносный код, насторожил тот факт, что при сборке эксплоита по видом autoconf-сценария вызывается исполняемый файл в формате ELF). После запуска aclocal.m4 создавал в системе файл “~/.local/kworker” и прописывал его в файле “~/.bashrc” для автоматического запуска.
После запуска имя процесса менялось на “[kworker/8:3]”, предполагая, что пользователь не заметит его в списке процессов на фоне обилия kworker-процессов ядра Linux. Затем процесс kworker загружал с внешнего сервера bash-скрипт и запускал его в системе. В свою очередь загруженный скрипт добавлял в файл “~/.ssh/authorized_keys” ключ для подключения злоумышленников по SSH, сохранял в сервисе хранения transfer.sh архив с содержимым домашнего каталога пользователя и некоторыми системными файлами, такими как /etc/passwd, после чего отправлял на сервер атакующих ссылку на сохранённый архив.