Слідом за виявленою наприкінці січня вразливістю, що дозволяла підключитися під користувачем root без перевірки пароля, на сервері telnetd з набору GNU InetUtils виявлено кілька способів підвищення своїх привілеїв, що стали наслідком неповного усунення вразливості в 1999 році (CVE-1999-0073).
Вразливості викликані наявністю в telnetd можливості передачі клієнтом змінних оточення на сервер за допомогою опції ENVIRON. Подібні змінні оточення виставляються і обробляються в контексті процесу telnetd і передаються в запущені ним дочірні процеси, включаючи процес, що запускається з правами root /bin/login. Вразливість CVE-1999-0073 дозволяла telnet-клієнту передати змінну оточення LD_LIBRARY_PATH, виставлення якої призводить до завантаження вказаної користувачем бібліотеки під час запуску процесу login. За можливості завантаження файлів у систему, що підтримує підключення за протоколом telnet, атакуючий може завантажити спеціально оформлену бібліотеку та організувати її завантаження з правами root.
У telnetd з набору GNU InetUtils уразливість була усунена шляхом заборони небезпечних змінних оточення через фільтрацію за масками "LD_", "LIBPATH", "ENV", "IFS" та "_RLD_". При цьому незаблокованою стала змінна оточення «CREDENTIALS_DIRECTORY», що обробляється при запуску /usr/bin/login. За допомогою цієї змінної оточення користувач міг змінити каталог з налаштуваннями облікових даних та розмістити в новому каталозі файл login.noauth зі значенням «yes», що активує вхід без пароля (аналог передачі процесу login прапора «-f»). Налаштування діє всім користувачам, включаючи root.
Атака зводиться до створення непривілейованим користувачем підкаталогу в своєму домашньому каталозі, завантаження в нього файлу login.noauth і спроби входу з виставленням змінної оточення «CREDENTIALS_DIRECTORY=створений каталог» і передачею змінної оточення «USER=root» (в telnet має командного рядка, а передається через змінну оточення USER). Приклад експлоїту.
Слідом виявлено ще один спосіб отримання root-доступу через telnetd, пов'язаний з маніпуляцією змінними оточення OUTPUT_CHARSET і LANGUAGE, оброблюваними бібліотекою GNU gettext, та змінною оточення GCONV_PATH, яка використовується в glibc. Через виставлення змінних оточення OUTPUT_CHARSET і LANGUAGE атакуючий може активувати в gettext функціональність перетворення кодування символів, що викликає функцію iconv_open(). У свою чергу, при виконанні функції iconv_open() при завантаженні конфігураційного файлу gconv-modules шлях обчислюється з урахуванням змінної оточення GCONV_PATH. Через підстановку файлу gconv-modules можна організувати завантаження власної бібліотеки, що розділяється під час виведення локалізованого рядка процесом login.
CVE-ідентифікатори зазначеним уразливості поки не присвоєно. Як метод захисту розглядається задіяння білого списку допустимих значень («TERM», «DISPLAY», «USER», «LOGNAME» і «POSIXLY_CORRECT») з блокуванням решти змінних оточення, за аналогією з тим як здійснюється робота зі змінними оточення в OpenSSH. Вразливості підтверджено в пакеті GNU InetUtils, реалізація сервера telnetd з якого поставляється в Debian, Ubuntu та похідних дистрибутивах. Виправлення для GNU InetUtils поки що відсутні. У Rocky Linux 9 поставляється не схильний до вразливості модифікований telnetd, в якому замість фільтрації небезпечних змінних оточення включена перевірка за білим списком. Фільтрація за білим списком також реалізована в telnetd зі складу FreeBSD. В OpenBSD telnetd виключено із системи в 2005 році.
Джерело: opennet.ru
