Wu-ftpd是一个基于BSD ftpd的FTP服务器程序,由华盛顿大学维护。 Wu-ftpd包含的SockPrintf()函数在处理输入时缺少正确的边界缓冲区检查,远程攻击者可以通过这个漏洞对服务器进行缓冲区溢出攻击,可能以root用户权限在系统上执行任意指令。 问题存在于SockPrintf()函数使用vsprintf()时: \"in file src/ftpd.c\" int SockPrintf(FILE *sockfp, char *format,...) { va_list ap; char buf[32768]; va_start(ap, format); vsprintf(buf, format, ap); va_end(ap); return SockWrite(buf, 1, strlen(buf), sockfp); } buf是字符数组(32768),vsprintf使用参数*format,然后在store()函数中: \"in file src/ftpd.c\" void store(char *name, char *mode, int unique) { ... ... #ifdef MAIL_ADMIN ... ... SockPrintf(sck, \"From: wu-ftpd <\\%s>\r\n\", mailfrom); SockPrintf(sck, \"Subject: New file uploaded: \\%s\r\n\r\n\", name); ... SockPrintf(sck, \"\\%s uploaded \\%s from \\%s.\r\nFile size is \\%d.\r\n Please move the file where it belongs.\r\n\",guestpw, pathname, remotehost, byte_count); ... #endif /* MAIL_ADMIN */ ... ... } 这个函数攻击者可以控制参数名,因此可以远程调用: SockPrintf(sck, \"Subject: New file uploaded: \\%s\r\n\r\n\", name);...
Wu-ftpd是一个基于BSD ftpd的FTP服务器程序,由华盛顿大学维护。 Wu-ftpd包含的SockPrintf()函数在处理输入时缺少正确的边界缓冲区检查,远程攻击者可以通过这个漏洞对服务器进行缓冲区溢出攻击,可能以root用户权限在系统上执行任意指令。 问题存在于SockPrintf()函数使用vsprintf()时: \"in file src/ftpd.c\" int SockPrintf(FILE *sockfp, char *format,...) { va_list ap; char buf[32768]; va_start(ap, format); vsprintf(buf, format, ap); va_end(ap); return SockWrite(buf, 1, strlen(buf), sockfp); } buf是字符数组(32768),vsprintf使用参数*format,然后在store()函数中: \"in file src/ftpd.c\" void store(char *name, char *mode, int unique) { ... ... #ifdef MAIL_ADMIN ... ... SockPrintf(sck, \"From: wu-ftpd <\\%s>\r\n\", mailfrom); SockPrintf(sck, \"Subject: New file uploaded: \\%s\r\n\r\n\", name); ... SockPrintf(sck, \"\\%s uploaded \\%s from \\%s.\r\nFile size is \\%d.\r\n Please move the file where it belongs.\r\n\",guestpw, pathname, remotehost, byte_count); ... #endif /* MAIL_ADMIN */ ... ... } 这个函数攻击者可以控制参数名,因此可以远程调用: SockPrintf(sck, \"Subject: New file uploaded: \\%s\r\n\r\n\", name); 并触发溢出,攻击者可以通过精心构建超长的文件路径,可能以root用户权限在系统上执行任意指令。 不过此漏洞不存在默认安装Wu-Ftpd服务程序中,服务器必须以\'\'MAIL_ADMIN\'\'选项配置才存在此漏洞。