BSD ftpd glob() 函数远程缓冲区溢出漏洞

/ns/ld/unix/data/20010524050836.htm

日期:2001-5-23

受影响的系统:
FreeBSD 4.x
FreeBSD 3.x
NetBSD 1.5以及更低版本
OpenBSD 2.8以及更低版本
SGI IRIX 6.5.x

描述:
-------------------------------------------------------------------------------
BUGTRAQ ID: 2548

很多系统的FTPD守护程序包含一个glob()函数,它实现文件名的模式匹配,它遵循与Unix shell同样的原则。

某些BSD系统的glob()实现其内部处理函数中包含一些缓冲区溢出漏洞。这些溢出通常可以通过请求一个可以扩展为超长路径名的模板来触发,也可以设法使FTP守护程序将用户输入的模板通过glob()两次来触发。

允许本地和远程攻击者在受影响的系统上获取root权限。对于远程用户,如果他们可以在服务器上创建目录,就可以利用这些漏洞;在某些例外情况下,远程用户可以不需要有创建目录的权限。


测试程序:
-------------------------------------------------------------------------------
http://www.20cn.net/ns/hk/hacker/data/20010524045644.htm

警 告

以上程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

-------------------------------------------------------------------------------
建议:

临时解决方法:

如果您不需要FTP服务,就暂时关闭FTP服务。
或者禁止匿名用户拥有可写目录。

厂商补丁:

NetBSD已经提供了相关的补丁,可以通过CVS或者FTP下载:

Release CVS branch SUP collection FTP directory
-------------------------------------------------------------------
1.4 netbsd-1-4 release-1-4 /pub/NetBSD/NetBSD-release-1-4
1.5 netbsd-1-5 release-1-5 /pub/NetBSD/NetBSD-release-1-5
current HEAD current /pub/NetBSD/NetBSD-current

FreeBSD 已经提供了相应的补丁程序:

FreeBSD 4.x的补丁:

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:33/glob.4.x.patch
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:33/glob.4.x.patch.asc

FreeBSD 3.x的补丁:

# fetch ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:33/glob.3.x.patch
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:33/glob.3.x.patch.asc

以root身份执行下列命令:
# cd /usr/src
# patch -p < /path/to/patch
# cd /usr/src/lib/libc
# make all install
# cd /usr/src/libexec/ftpd
# make all install

OPENBSD也提供了针对2.8的补丁程序:
ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.8/common/025_glob.patch