信息提供: | 安全公告(或线索)提供热线:51cto.editor@gmail.com |
漏洞类别: | 溢出错误 |
攻击类型: | 拒绝服务攻击 |
发布日期: | 2003-01-06 |
更新日期: | 2003-01-10 |
受影响系统: | FreeBSD FreeBSD 5.0 FreeBSD FreeBSD 4.7 FreeBSD FreeBSD 4.6.2-RELEASE FreeBSD FreeBSD 4.6-RELEASE FreeBSD FreeBSD 4.5-RELEASE FreeBSD FreeBSD 4.4 FreeBSD FreeBSD 4.3-RELEASE |
安全系统: | 无 |
漏洞报告人: | Pine Digital Security Advisory |
漏洞描述: | FreeBSD是一款免费开放源代码的UNIX操作系统。 FreeBSD中的fpathconf系统调用存在整数溢出问题,本地攻击者可以利用这个漏洞进行拒绝服务攻击或权限提升。 fpathconf系统调用可以使应用程序确定一个已经打开的文件描述符相关选项设定及能力限制情况。 在FreeBSD内核中每个文件(socket,设备或常规文件)由一个文件结构(sys/file.h)代表打开,这个结构包含一个引用计数器(int f_count),此引用计数器由fhold()函数进行增加操作,由fdrop()函数进行减少操作。如当一个文件被打开open(2)或dup(2)时,引用计数器就会增加,而当文件关闭close(2)时,引用计数器值就会减少。 多数系统调用在文件上执行操作时会调用fhold()系统调用来防止文件在中间操作过程中关闭,一旦操作结束,会发布fdrop()调用使引用释放。而fpathconf(2)系统调用没有使用fdrop()函数进行引用释放,因此不断的在某一文件描述符上调用fpathconf,如在某一引用的套接口文件描述符上请求2^31个调用,可使引用计数器(int f_count)产生一个负值,然后调用close(2)调用时使系统崩溃。 此漏洞也可以利用来获得ROOT权限,如某个文件描述符引用未分配的合法的内核内存,如果新的文件随后被打开,内核分配这个新的文件结构与原来按个文件描述符指向同一个地点,攻击者就可以对后来打开的文件进行读写访问,造成权限提升。 |
测试方法: | 无 |
解决方法: | 厂商补丁: FreeBSD ------- FreeBSD已经为此发布了一个安全公告(FreeBSD-SA-02:44)以及相应补丁: FreeBSD-SA-02:44:file descriptor leak in fpathconf 链接:ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/FreeBSD-SA-02:44.filedesc.asc a)下载如下补丁,并使用PGP工具进行验证: # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:44/filedesc.patch # fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:44/filedesc.patch.asc b)安装此补丁: # cd /usr/src # patch < /path/to/patch c)根据如下地址重新编译内核并重新启动: http://www.freebsd.org/handbook/kernelconfig.html |