CVE-2026-39983basic-ftp 是一个用于 Node.js 的 FTP 客户端库。在 5.2.1 版本之前,该组件存在安全漏洞,允许攻击者通过文件路径参数中的 CRLF 序列(\r\n)注入恶意 FTP 命令。由于库中的 protectWhitespace() 辅助函数仅处理前导空格,且 FtpContext.send() 直接将命令字符串写入控制套接字,攻击者可利用此特性分割 FTP 命令。该漏洞在 5.2.1 版本中已修复。
该漏洞源于 basic-ftp 库在处理用户输入的文件路径时缺乏对 CRLF 字符(\r\n)的严格过滤。虽然库提供了 protectWhitespace() 辅助函数,但它仅去除前导空格,无法检测或拦截 CRLF 序列。当攻击者控制传入高级 API(如 cd()、remove()、uploadFrom() 等)的路径参数时,可以在其中插入 \r\n。由于 FtpContext.send() 将处理后的路径直接追加到 FTP 命令末尾并发送到控制套接字,攻击者可以利用 CRLF 字符将原本单一的 FTP 命令拆分为多条命令,从而在未授权的情况下执行任意 FTP 操作,如窃取文件或执行未经授权的传输。