
Исследователь по безопасности Саймон Йозефссон сообщил, что в коде открытого сетевого компонента telnetd (входит в состав GNU InetUtils) с мая 2015 года находилась критическая уязвимость, позволяющая выполнить удалённый обход аутентификации в системе. Эта проблема затрагивает все версии GNU InetUtils, начиная с версии 1.9.3 и заканчивая версией 2.7 включительно.
Сервер telnetd вызывает /usr/bin/login (обычно запускаемый от имени пользователя root), передавая значение переменной пользовательской среды, полученной от клиента, в качестве последнего параметра.
«Если клиент предоставляет значение пользовательской среды, представляющее собой строку „‑f root“, и передает параметр telnet(1) ‑a или ‑login, чтобы отправить эту пользовательскую среду на сервер, клиент будет автоматически авторизован как пользователь root, минуя обычные процессы аутентификации. Это происходит потому, что сервер telnetd не выполняет очистку переменной пользовательской среды перед передачей её в login(1), а login(1) использует параметр ‑f в обход обычной аутентификации. Таким образом, если добиться подстановки опции „‑f“ в имени пользователя, можно подключиться без проверки пароля», — пояснил Йозефссон.
При обычном подключении использовать имя пользователя вида "-f root" не получится, но в telnet имеется режим автоматического подключения, активируемый опцией "-a". В данном режиме имя пользователя берётся не из командной строки, а передаётся через переменную окружения USER. При вызове утилиты login значение данной переменной окружения подставлялось без дополнительной проверки и ��ез экранирования спецсимволов. Таким образом, для подключения под пользователем root достаточно выставить в переменную окружения USER значение "-f root" и подключиться к telnet-серверу, указав опцию "-a":
## Example On a Trisquel GNU/Linux 11 aramo laptop: root@kaka:~ sudo apt-get install inetutils-telnetd telnet root@kaka:~ sudo sed -i 's/#<off># telnet/telnet/' /etc/inetd.conf root@kaka:~ sudo /etc/init.d/inetutils-inetd start root@kaka:~ USER='-f root' telnet -a localhost ... root@kaka:~#
Ошибка была в коммите, сделанном 19 марта 2015 года, и оказалась включена в выпуск GNU InetUtils версии 1.9.3 от 12 мая 2015 года. Этот коммит был связан с устранением проблемы, не позволявшей определить имя пользователя в режиме autologin без аутентификации в Kerberos. В качестве решения была добавлена поддержка передачи имени пользователя для режима autologin через переменную окружения, но проверку корректности имени пользователя из переменной окружения добавить забыли.
«Ограничьте сетевой доступ к порту telnet для доверенных клиентов. Установите исправление или обновите его до более новой версии, в которую включено исправление», — предупредил Йозефссон.
