В сервере telnetd, входящем в пакет GNU InetUtils, обнаружена серьёзная уязвимость. Она позволяет удалённому злоумышленнику аутентифицироваться на сервере под любым пользователем, включая суперпользователя root, без знания пароля. Проблема существует с 2015 года, затрагивая все версии начиная с InetUtils 1.9.3 и вплоть до актуального релиза 2.7.0. На данный момент CVE-идентификатор ещё не присвоен, однако разработчики уже выпустили исправления в виде патчей.
Детали уязвимости
Уязвимость возникает из-за ошибки в логике аутентификации. Процесс telnetd для проверки учётных данных вызывает системную утилиту "/usr/bin/login", передавая ей имя пользователя, полученное от клиента. Утилита "login" поддерживает опцию "-f", которая позволяет пропустить стандартную процедуру проверки пароля. Обычно эта опция используется, когда пользователь уже прошёл аутентификацию на другом уровне.
Ключевая проблема заключается в том, что имя пользователя для режима автоматического входа (autologin) передаётся через переменную окружения "USER". Сервер telnetd некорректно обрабатывает значение этой переменной, подставляя его в командную строку для вызова "login" без должной проверки и экранирования специальных символов. Следовательно, злоумышленник может задать значение переменной "USER" как "-f root". После этого, подключившись к серверу с использованием опции клиента "-a" (которая активирует режим autologin), он получит доступ к оболочке с правами root, минуя этап запроса пароля.
Эксплуатация уязвимости проста. Например, атаку можно осуществить с помощью команды: "USER='-f root' telnet -a имя_сервера". Данная команда устанавливает переменную окружения и инициирует подключение в режиме autologin. В результате злоумышленник получает полный контроль над системой.
Ошибка была внесена в код проекта в марте 2015 года при исправлении другой проблемы, связанной с определением имени пользователя в режиме autologin при использовании Kerberos. В качестве решения разработчики добавили поддержку передачи имени через переменную окружения "USER", однако забыли реализовать проверку корректности её значения. Это изменение вошло в релиз версии 1.9.3 от 12 мая 2015 года и с тех пор оставалось незамеченным.
Серьёзность уязвимости оценивается как высокая. Telnet - это нешифрованный протокол, который до сих пор используется в некоторых legacy-системах и IoT-устройствах. Успешная эксплуатация позволяет злоумышленнику получить максимальные привилегии на целевой системе, что может привести к полной компрометации, установке вредоносного ПО (malware) или созданию backdoor.
Разработчики GNU InetUtils уже выпустили два патча для устранения проблемы. Первый патч исправляет непосредственно обработку переменной "USER". Второй патч расширяет исправление, добавляя санитизацию (проверку и очистку) и других переменных, которые подставляются в командную строку при вызове "login", например, имени удалённого хоста. Это предотвращает потенциально схожие векторы атак через подставные данные.
В качестве временного решения администраторам рекомендуется полностью отключить сервис telnetd, если его использование не является критически необходимым. В качестве более безопасной альтернативы следует использовать SSH. Если отключение невозможно, необходимо ограничить сетевой доступ к порту telnet (обычно TCP/23) только с доверенных IP-адресов с помощью межсетевого экрана. Другой workaround - замена стандартной утилиты "login" на кастомную версию, в которой отключена или переопределена опция "-f".
Исследование кода показало, что шаблон для вызова "login" в telnetd изначально содержит конструкцию "%?u{-f %u}{%U}", которая подставляет опцию "-f" вместе с именем пользователя при определённых условиях. Именно эта логика, в сочетании с неочищенными данными из переменной окружения, и привела к уязвимости. Анализ также выявил, что аналогичные риски могли существовать и для других подставляемых параметров, таких как "remote_hostname", данные для которого получаются из сетевых запросов и не являются доверенными.
Уязвимость была независимо обнаружена и сообщена исследователем Карлосом Кортесом Альваресом (Kyu Neushwaistein) 19 января 2026 года. Первоначальный патч подготовил Пол Эггерт, а затем Саймон Йозефссон доработал его для более полного покрытия потенциальных векторов атаки. В настоящее время пользователям настоятельно рекомендуется как можно скорее применить официальные патчи или обновить пакет InetUtils до будущей версии, которая будет включать эти исправления. Данный инцидент служит напоминанием о рисках, связанных с использованием устаревших и нешифрованных протоколов, даже в их современных реализациях.
Ссылки
- https://www.openwall.com/lists/oss-security/2026/01/20/2
- https://codeberg.org/inetutils/inetutils/commit/fd702c02497b2f398e739e3119bed0b23dd7aa7b
- https://codeberg.org/inetutils/inetutils/commit/ccba9f748aa8d50a38d7748e2e60362edd6a32cc
- https://advisories.ncsc.nl/2026/ncsc-2026-0033.html