Проблема вызвана тем, что для проверки пароля процесс telnetd вызывает утилиту «/usr/bin/login», передавая в качестве аргумента имя пользователя, указанного клиентом при подключении к серверу. Утилита «login» поддерживает опцию «-f», позволяющую осуществить вход без выполнения аутентификации (подразумевается, что эта опция используется, когда пользователь уже прошёл проверку). Таким образом, если добиться подстановки опции «-f» в имени пользователя, можно подключиться без проверки пароля.
При обычном подключении использовать имя пользователя вида «-f root» не получится, но в telnet имеется режим автоматического подключения, активируемый опцией «-a». В данном режиме имя пользователя берётся не из командной строки, а передаётся через переменную окружения USER. При вызове утилиты login значение данной переменной окружения подставлялось без дополнительной проверки и без экранирования спецсимволов. Таким образом, для подключения под пользователем root достаточно выставить в переменную окружения USER значение «-f root» и подключиться к telnet-серверу, указав опцию «-a»:
$ USER='-f root' telnet -a имя_сервера
Приведшее к уязвимости изменение было добавлено в код telnetd в марте 2015 года и было связано с устранением проблемы, не позволявшей определить имя пользователя в режиме autologin без аутентификации в Kerberos. В качестве решения была добавлена поддержка передачи имени пользователя для режима autologin через переменную окружения, но проверку корректности имени пользователя из переменной окружения добавить забыли.
Источник: http://www.opennet.ru/opennews/art.shtml?num=64649
