telnetd 参数注入GNU InetUtils Telnet 守护进程 (telnetd) 存在一个参数注入漏洞。在 NEW_ENVIRON 协商过程中,telnetd 对客户端提供的环境变量缺乏充分清理,导致攻击者可以将命令行标志注入到本地登录进程中,可能造成身份验证绕过。
telnetd → /usr/bin/loginGNU InetUtils telnetd 1.9.3 – 2.7 (未修补)。
在会话协商期间,telnetd 处理 NEW_ENVIRON Telnet 选项,该选项允许客户端向服务器传递 USER 等环境变量。守护进程直接将这些值插入到用于调用 /usr/bin/login 的参数列表中。
由于未验证该值是否仅包含合法的用户名字符,客户端可以提供以连字符 (-) 开头的字符串。该字符串不会被当作用户名,而是被 login 解析为命令行标志。根据 login 的实现方式,这可能会启用某些行为,例如跳过密码认证 (例如通过 -f "已认证" 标志),从而导致未授权访问。
在连接前将 USER 环境变量设置为包含选项标志的值:
USER="-f root" telnet -a <target_ip>
如果目标存在漏洞,login 会将 -f root 解释为无需密码以 root 身份认证的指令,而不是将其视为字面用户名 -f root。
检查已安装的软件包版本:
Debian / Ubuntu:
dpkg -l | grep inetutils-telnetd
RHEL / CentOS:
rpm -qa | grep inetutils
telnetd 会在将 USER 值传递给 login 之前拒绝或去除任何以 - 开头的值。