32位和64位 Xlight 版本 <= 3.9.4.2
未认证的攻击者可访问 Xlight SFTP,从而实现代码执行或引发拒绝服务。
SFTP 协议中通过线路发送的字符串前面带有四个字节的长度前缀。Xlight 用于从网络数据包读取这些字符串的函数,在验证长度和分配所需内存时存在整数溢出。通过构造字符串的四个字节长度,我们可以触发一次从攻击者控制的缓冲区向堆外进行的大规模 memmove(约4GB)。
该易受攻击的函数用于 SSH 握手过程中的字符串接收,包括预认证阶段接收客户端支持的算法、加密套件、用户名和密码。我们可以针对这些字符串中的任意一个构造长度,从而触发漏洞。
该漏洞易于触发,但利用的难易程度取决于 Xlight 二进制文件的位数。
在32位系统上,复制操作会溢出堆的末端,破坏进程中的所有内容,然后导致崩溃。有可能通过破坏堆上相邻的结构,并利用该服务器的多线程特性访问被破坏的数据,随后野复制导致进程崩溃。
在64位系统上,我们无法获得越界写入,因为内存分配调用的大小参数是 size_t(即编译为64位时宽度为64位),这意味着我们无法通过两个32位整数的加法溢出该值,而只能分配一个约4GB的大缓冲区。此漏洞反而导致越界读取,进而使进程崩溃。