Хакеры обошли защиту telnetd и почти 10 лет давали root-доступ

Специалист по информационной безопасности Саймон Йозефссон обнаружил опасную уязвимость в компоненте telnetd, входящем в пакет GNU InetUtils. Проблема оставалась незамеченной почти 10 лет и позволяла удаленно получать полный контроль над системой.

Специалист по информационной безопасности Саймон Йозефссон обнаружил опасную уязвимость в компоненте telnetd, входящем в пакет GNU InetUtils. Проблема оставалась незамеченной почти 10 лет и позволяла удаленно получать полный контроль над системой.

Под угрозой оказались версии GNU InetUtils с 1.9.3 по 2.7 включительно, где хакеры могли входить в систему сразу с правами root, минуя процедуру аутентификации. Как выяснилось, алгоритм атаки был предельно простым: сервер telnetd запускал системную утилиту /usr/bin/login и передавал ей имя пользователя.

В уязвимой реализации это значение берется из переменной окружения, которую клиент мог задать самостоятельно. Если хакер подставлял в переменную USER значение -f root и подключается в режиме автологина с помощью параметра telnet -a, то сервер без каких-либо проверок передавал его в login(1). Параметр -f интерпретировался как команда входа без запроса пароля, из-за чего соединение автоматически оформляется как вход под пользователем root.

Интересно то, что обычное подключение по Telnet не позволяет указать имя пользователя подобным образом, но режим автологина берет его именно из переменной окружения. Telnetd доверял ее содержимому полностью, не выполняя фильтрацию или экранирование. В результате достаточно было подставить одно значение, и система сама открывала доступ.

Примечательно то, что эта уязвимость появилась еще 19 марта 2015 года и вошла в релиз GNU InetUtils 1.9.3, опубликованный 12 мая того же года.  Изначально изменение создавалось для устранения проблем с автологином в средах с Kerberos, а разработчики добавили передачу имени пользователя через переменную окружения, но не предусмотрели проверку ее содержимого, что и стало причиной бреши.

Эксперт советует срочно принять меры защиты, а именно ограничить доступ к Telnet-порту только доверенными хостами, установить исправления или обновить GNU InetUtils до версии без уязвимости, а также всерьез задуматься, нужен ли Telnet в инфраструктуре вообще, пишет Anti-Malware.ru.