telnetd 参数注入漏洞分析 CVE-2026-24061

· 约 4 分钟 · 旧博客导入

之前看到了这个

【已复现】多款 Linux telnetd服务中招,仅需一个参数即可远程获取 Root 权限,GNU Inetutils telnetd 远程认证绕过漏洞(CVE-2026-24061)

然后在openwall找到了poc

oss-security - GNU InetUtils Security Advisory: remote authentication by-pass in telnetd

image
image

但是我在ubuntu24上面不知道怎么装telnetd,按照上面复现步骤,/etc/init.d/inetutils-inetd这个文件找不到,用busybox的telnetd复现失败,不知道是不是版本太新

接下来看看代码,在gnu官网上可以找到下载地址

Inetutils - Network utilities - GNU Project - Free Software Foundation

Index of /gnu/inetutils

这个源代码一打开就能看到跟登录有关的像参数表一样的东西

image
image

这是何意味?结合telnetd的–help可以推测,这大概是/bin/login的参数

image
image

而我们的/bin/login是用来登录的,登录成功之后就会给你个shell

image
image

经常装ubuntu-server的大伙一定很熟悉,开着vnc装完系统之后就会跳出上面这行登录提示

这个/bin/login支持-f参数,发现这个-f是用来免密登录的

image
image
image
image

到这里漏洞大概是怎么回事已经心里有数了,但是细节还是要研究一下

查找login_invocation的使用位置,发现telnetd/pty.c里用到了,而且下面还有execv,估计这里就是sink点

image
image

顺着调用链一路回溯,发现调用顺序是这样的:telnetd/telnetd.c:209 main->telnetd/telnetd.c:321 telnetd_setup->telnetd/pty.c:39 startslave->telnetd/pty.c:110 start_login

跟着调用顺序一路看代码,发现telnetd_setup这里把USER环境变量删了,然后紧接着调用了getterminaltype

image
image

我没看太懂getterminaltype是干嘛用的,下面是一大堆宏,结合AI分析得知,这里是在向客户端发指令,然后等待客户端返回指令结果,其中也有获取环境变量的指令

image
image

ttloop就是等待结果的宏,这个宏循环调用io_drain

image
image

io_drain接收客户端返回的网络数据,把数据放到静态变量里,然后调用telrcv,这个telrcv根据备注所说,是一个自动机,应该是用来把接收到的数据解析,然后执行相应动作的函数

image
image

大伙也知道自动机算法通常都是很复杂的,这个telrcv我也没看懂,直接让ai看,ai找到了设置环境变量的位置是在suboption方法这里,这个suboption也是被telrcv调用的

image
image
image
image

getterminaltype返回之后,调用startslave

image
image

startslave把自己fork了,然后调用start_login

image
image

start_login调用expand_line之后执行了命令,看一下expand_line是什么东西

image
image

从上面注释可以看到是用来展开格式化串的,也就是一开始看到的那几行

image
image

直接搜索相关的标记,可以知道%?是条件表达式,如果用户没有指定user参数,则获取USER环境变量

image
image
image
image

到这里,攻击者构造的恶意参数就成功注入调用login的命令里面了,后面execv的时候就会直接跳过认证环节

image
image

查找文章

↑↓ 选择 · Enter 打开 · Esc 关闭 查看全部结果