
proof-of-concept скрипты для двух неаутентифицированных RCE-уязвимостей в Samba (CVE-2026-4408 и CVE-2026-4480) и локального повышения привилегий в TelnetD (CVE-2026-28372)
В этом репозитории содержатся proof-of-concept скрипты для уязвимостей, представленных в докладе «Forgotten but Not Gone: Unauthenticated RCEs and LPEs in Legacy Linux Services» на Black Hat USA 2026 и DEF CON 34.
Локальное повышение привилегий в TelnetD: непривилегированные атакующие могут использовать функцию переменных окружения TelnetD для получения shell с правами root. Согласно проектной документации и RFC, протокол Telnet позволяет клиентам задавать переменные окружения для shell-сессии. С точки зрения безопасности эта функция была спроектирована плохо. Сервис позволял неаутентифицированным клиентам задавать переменные окружения как для самого процесса telnetd, так и для всех его дочерних процессов. Один из дочерних процессов — /usr/bin/login. Установка переменных окружения удалённым telnet-клиентом позволила нам запустить /usr/bin/login с переменной окружения «CREDENTIALS_DIRECTORY». Это заставляет процесс login искать файл с именем «login.noauth» в каталоге, указанном в «CREDENTIALS_DIRECTORY». Если файл содержит строку «yes», процесс login пропускает аутентификацию и предоставляет shell клиенту, работающий от имени пользователя, указанного клиентом. Это может быть любой пользователь, даже root.
Неаутентифицированное удалённое выполнение кода в Samba через SAMR: Samba полагается на shell-команды, заданные в её конфигурационном файле (smb.conf), для выполнения различных операций по запросам клиентов, таких как добавление новой сетевой шары, добавление нового принтера и т.д. Некоторые из этих shell-команд получают параметры на основе запроса, отправленного клиентом. В большинстве случаев параметры санитизируются, а специальные символы экранируются перед выполнением команды для предотвращения внедрения в shell.
Уязвимость находится в функции «check_password_complexity», которая форматирует строку, заданную клиентом, в shell-команду без санитизации. Для возникновения уязвимости требуются два условия:
Чтобы настроить RPC-демон Samba (samba-dcerpcd) на использование NCACN_IP_TCP, его необходимо запускать как отдельную системную службу, а не как часть основной службы Samba. Кроме того, параметр «rpc start on demand helpers» в конфигурационном файле должен быть установлен в «no».
Неаутентифицированное удалённое выполнение кода в Samba через SPOOLSS: функция generic_job_submit также форматирует управляемую клиентом строку в shell-команду без санитизации. Комбинация следующих настроек приводит к этой уязвимости:
Неаутентифицированный клиент может запросить доступ к принтеру через RPC-интерфейс spoolss. Затем можно отправить задание печати через функцию RpcStartDocPrinter. Имя документа, указанное в запросе, будет использовано как имя задания, подставляемое в параметр «%J» команды. Вызов hRpcEndDocPrinter запускает generic_job_submit, которая выполнит «print command» из конфигурации после подстановки имени задания без санитизации. Код, отправленный эксплойтом, будет выполнен от имени пользователя «nobody». Если в секцию общего доступа к принтеру добавлена конфигурация «valid users = @users», эксплуатация по-прежнему возможна, но требуются действительные учётные данные. Если была выполнена аутентификация, код, отправленный эксплойтом, будет выполнен от имени аутентифицированного пользователя, а не «nobody».