ProFTPD堆缓冲区溢出CVE-2026-5399
ProFTPD 是一款开源、稳定的 Linux/Unix 平台 FTP 文件服务程序,以配置语法类似Apache闻名,轻量化小主机、云服务器均可部署。
一、基本情况
ProFTPD 是一款开源的 FTP/SFTP 服务器软件,适用于企业内部文件服务器、网站源码上传服务器、多用户资源分发站点等诸多场景。
ProFTPD 安全机制完善,可禁止匿名上传、屏蔽危险指令;模块化扩展,可对接MySQL、LDAP 管理账号,适合长期高并发文件传输。

ProFTPD 支持虚拟FTP主机、虚拟用户、目录权限精细管控,单进程架构稳定性强,相比 vsftpd 功能更丰富,适合多用户文件服务器。
栋科技漏洞库关注到ProFTPD的 mod_sftp 模块存在堆缓冲区溢出漏洞,漏洞现在已经被追踪为CVE-2026-53994,CVSS 4.0评分7.7。
二、漏洞分析
CVE-2026-53994漏洞是 ProFTPD 相关版本中的 mod_sftp 模块存在堆缓冲区溢出漏洞,已通过身份认证的SFTP用户即可触发该漏洞。
该漏洞源于其 mod_sftp 模块的 fxp_packet_read() 函数直接接收攻击者传入的 32 位大端序SFTP数据包长度,没有做基础合法性校验。
因此其直接读取客户端提交的32位大端 SFTP packet_len,认证 SFTP 用户可通过 packet_len=0 的单条报文触发堆缓冲区溢出并稳定。
该零值在后续无符号减法中下溢为接近 4 GB 的伪长度,
并被传入核心内存分配器的 new_block()(此处 size_t 经四舍五入后的尺寸被截断为 32 位 int,低 32 位为 0),
导致分配得到约 544 字节的小块而调用方被告知得到约 4 GB 缓冲区;
随后按伪长度执行的填充循环将攻击者控制的数据写入小块边界之外,形成堆缓冲区溢出,认证用户可借此稳定制造远程拒绝服务。
由于未对零值做拦截,若传入长度值为0,读取逻辑中一处无符号减法运算会发生下溢,得到约4GB超大数值,就会造成进程崩溃情况。
该超大数值传入内存分配器时:内存大小以size_t类型计算,但传给`new_block()`函数时转为32位整型。
0x100000000低32位数值为0,因此`new_block()`仅分配一小块内存(约512字节),但上层调用逻辑会认为分配到了4GB内存。
后续填充循环会持续写入攻击者可控数据,超出544字节实际分配内存边界,引发攻击者完全可控的堆溢出。
已认证用户仅需发送单个畸形SFTP数据包(数据包长度设为0,后续携带超过544字节的数据体),
即可稳定销毁ProFTPD独立连接子进程,实现可靠的认证后远程拒绝服务攻击。
根据堆内存布局与相邻内存块分配情况,溢出还可能破坏堆元数据,产生拒绝服务之外的危害;但配套验证脚本仅复现拒绝服务效果。
三、影响范围
ProFTPD<1.3.10rc3
四、解决建议
ProFTPD ≥ 1.3.10rc3
五、参考链接
管理员已设置登录后刷新可查看