CVE-2026-32746CVE-2026-32746是GNU inetutils中telnetd组件的一个严重缓冲区溢出漏洞,CVSS评分高达9.8分(满分10分)。该漏洞存在于telnetd的LINEMODE子选项处理程序中,具体位于SLC(Set Local Characters)子选项处理器中。漏洞的根本原因是在处理用户输入的SLC命令时,add_slc函数未能正确检查缓冲区容量就直接进行数据写入操作,导致攻击者可以通过精心构造的恶意请求触发缓冲区溢出。当攻击者发送超长的SLC命令数据时,超出缓冲区容量的数据将被写入相邻内存区域,可能覆盖关键系统数据或函数返回地址,从而实现远程代码执行。由于该漏洞可通过网络远程利用,且无需任何认证和用户交互,因此对所有运行受影响版本GNU inetutils的系统构成严重威胁。
该漏洞的技术根源在于GNU inetutils 2.7及之前版本中的telnetd守护进程在处理TELNET协议LINEMODE选项的SLC(Set Local Characters)子选项时存在边界检查缺陷。在telnet协议中,LINEMODE选项允许客户端和服务器协商行编辑模式,其中SLC子选项用于设置本地特殊字符。问题出在add_slc函数实现中,该函数负责解析和存储SLC命令参数,但在将数据写入内部缓冲区前未进行充分的边界检查。具体来说,当接收到包含大量SLC参数的TELNET选项协商请求时,add_slc函数会持续向固定大小的缓冲区写入数据而不会验证是否超出缓冲区容量。攻击者可以通过发送精心构造的TELNET选项包,在SLC子选项中包含超长的参数列表,触发缓冲区边界写入。溢出的数据可能覆盖栈上的返回地址、函数指针或其他关键数据结构,为后续的代码执行提供条件。由于telnetd通常以root权限运行,成功利用此漏洞可获得系统最高权限。