GNU InetUtils telnetd 的 LINEMODE SLC(Set Local Characters)处理器中存在预认证缓冲区溢出。
CVSS 3.1: 9.8(严重)| CWE: CWE-120, CWE-787
telnetd/slc.c 中的 add_slc() 函数在未进行边界检查的情况下,将每个 SLC 三元组的 3 字节数据附加到固定的 108 字节缓冲区(slcbuf)中。未经认证的攻击者可以在选项协商期间(在任何登录提示符之前)发送包含 40 多个三元组(功能码 > 18/NSLC)的特制 SLC 子选项,从而溢出缓冲区并破坏 BSS 中的 slcptr 指针及相邻数据。
# Build the vulnerable lab environment
docker compose up -d
# Detect (non-destructive)
python3 detect.py 127.0.0.1 2323
# Exploit (triggers overflow, verifies via response)
python3 exploit.py 127.0.0.1 2323
# Clean up
docker compose down
Docker 环境运行一个 Debian 容器,其中 inetutils-telnetd 2.4 运行在 xinetd 下,暴露于 2323 端口。完全隔离——不会触及你的主机。
WILL LINEMODE 以触发 LINEMODE 协商DO LINEMODE 并进入 SLC 子选项处理add_slc() 将每个三元组的“不支持”回复(3 字节)放入 104 字节缓冲区slcptr 及相邻 BSS 数据end_slc() 将从 slcbuf 到被破坏的 slcptr 位置的所有内容发送出去,包括响应中泄露的 BSS 内存有关深入的漏洞利用分析,包括字节约束、对齐技术以及 32 位系统上的 def_slcbuf/free() 原语,请参阅 WatchTowr 的分析文章。
本工具仅用于授权安全测试和教育目的。请勿对您不拥有或未经明确许可测试的系统使用。作者对滥用行为不承担任何责任。
漏洞发现者:Adiel Sol、Arad Inbar、Erez Cohen、Nir Somech、Ben Grinberg、Daniel Lubel(DREAM 安全研究团队)
MIT
| 文件 | 描述 |
|---|
exploit.py | 基于响应验证的 PoC 溢出利用 |
Dockerfile | 易受攻击的 telnetd 实验环境 |
docker-compose.yml | 一键实验环境搭建 |
xinetd-telnet.conf | xinetd 服务配置 |
detect.py | 非破坏性版本检测脚本 |