本周二,NetBSD开源工作组在使用FTP传输协议的客户端程序tnftp中发现一个高危漏洞。Tnftp是一个老牌FTP客户端,在许多*NIX操作系统中使用。包括Red Hat’s Fedora, Debian, NetBSD, FreeBSD, OpenBSD, 甚至是苹果的OS X。
该漏洞编号为CVE-2014-8517,可以通过恶意网页服务器让tnftp执行任意命令。比如“ftp http://server/path/file.txt”,不要用-o参数指定任何输出文件名,程序就会被欺骗执行任意命令。原因在于,tnftp将跟随HTTP的重定向,并使用其访问路径的最后一个“/”之后的部分路径做输出文件名,如果你不加-o参数指定输出文件名的话。
当它决定文件名之后,会检查该文件名是否以“|”开头,如果是则把剩下的字符交给popen()函数执行。该漏洞影响的操作系统包括,Debian, Red Hat, Gentoo, Novell (SuSE Linux), DragonFly, FreeBSD,OpenBSD, 和苹果。Debian, Red Hat, Gnetoo and Novell已经发布了解决方案。
有意思的是,该问题早在5年前就被OpenBSD解决。OpenBSD的开发者Stuart Henderson在网上写道:“我很早就改变了OpenBSD的FTP,只使用原始请求的文件名部分,而不是从重定向目标那里获得文件名。在一些情况下,这样做的确有些不便,但总好过让远程主机来控制输出文件名。”