USER="-f root" telnet -a 104.16.149.244 23
вот эта штука сверху, которой уже назначен CVE-2026-24061, дает подключиться по telnet сразу как root, без пароля.
что? 🐱
Давным давно в 2015 году, почему-то в нашей мировой линии, telnet был неуязвим, но в нём не работал автологин если на машине нет Kerberos.
Суть автологина - автоматически передать юзернейм для логина. Как когда по ssh коннектишься не указав логин, машина автоматически коннектится с именем текущего юзера.
Без Kerberos, этот юзернейм попросту не детектился.
Поэтому разработчики обновили шаблон логина, добавив динамический аргумент %U, что как раз подставляет юзернейм.
Новый шаблон:
/usr/bin/login " -p -h %h %?u{-f %u}{%U}"и вот тут происходит кабум бабах ракета взрыв 🤯
1. В бинаре
login есть флаг -f, нужный для "этот юзер уже был аутентифицирован где-то ещё, не надо его проверять снова"2. По RFC 1572, подключаясь по telnet, ты можешь сдать переменные окружения, в том числе
$USER с целевым логином3. содержимое
$USER переменной никак не санитизируется. . .
Теперь перечитай эксплойт
USER="-f root" telnet -a 104.16.149.244 23
Да это же уязвимость на argument injection!
Повторим флоу атаки 🃏
0. выставляем переменную
$USER="-f root" и включаем автологин -a1. переменная
$USER не проверяется, но учитывается сервером2.
$USER подставляется в шаблон логина вместо {%U}3. сервер получает команду
/usr/bin/login -p -f root4. бинарь
login скипает аутентификацию из-за -f5. поздравляю,
ты root
———Dockerfile для тестовой лабы
FROM debian:11-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y --no-install-recommends \
inetutils-telnetd=2:2.0-1+deb11u2 \
telnet && \
rm -rf /var/lib/apt/lists/*
RUN useradd user1 && \
sed -i 's/#<off># telnet/telnet/' /etc/inetd.conf
COPY docker-entrypoint.sh /docker-entrypoint.sh
EXPOSE 23
CMD ["/usr/sbin/inetutils-inetd", "-d"]
Если хочешь кишки кода и ветви логики, то читай этот подробный ресерч