Sun Solaris 2.5.1、2.6、7和8 缺省自带和安装了cachefsd程序,它用来对通过NFS mount的远程文件系统的操作请求进行缓存。在Solaris系统下,cachefsd服务以RPC服务形式被安装,号码为100235。 Solaris cachefsd程序中存在一个可远程利用的堆缓冲区溢出漏洞。远程或本地攻击者可以向cachefsd程序发送一个畸形RPC请求来获取root权限。 cachefsd的第五个RCP服务函数:cachefsd_fs_mounted_1_svc()需要客户端提供两个字符串参数,一个是cache dir(这个表示要mount的目录名),一个是cache name(cache名)。cachefsd_fs_mounted_1_svc()会调用subr_add_mount()来增加远程mount点,subr_add_mount()又调用cfsd_fscache_create()函数来将这两个参数保存在一个fscache结构中(这个结构由函数cfsd_calloc()动态分配),然而,在保存参数时程序没有进行边界检查,而是直接调用strcpy()函数进行拷贝操作。如果攻击者提供超长的参数,就可能发生堆溢出,动态内存边界处的内存分配管理结构就会被覆盖,攻击者可能改变程序流程执行任意代码。
Sun Solaris 2.5.1、2.6、7和8 缺省自带和安装了cachefsd程序,它用来对通过NFS mount的远程文件系统的操作请求进行缓存。在Solaris系统下,cachefsd服务以RPC服务形式被安装,号码为100235。 Solaris cachefsd程序中存在一个可远程利用的堆缓冲区溢出漏洞。远程或本地攻击者可以向cachefsd程序发送一个畸形RPC请求来获取root权限。 cachefsd的第五个RCP服务函数:cachefsd_fs_mounted_1_svc()需要客户端提供两个字符串参数,一个是cache dir(这个表示要mount的目录名),一个是cache name(cache名)。cachefsd_fs_mounted_1_svc()会调用subr_add_mount()来增加远程mount点,subr_add_mount()又调用cfsd_fscache_create()函数来将这两个参数保存在一个fscache结构中(这个结构由函数cfsd_calloc()动态分配),然而,在保存参数时程序没有进行边界检查,而是直接调用strcpy()函数进行拷贝操作。如果攻击者提供超长的参数,就可能发生堆溢出,动态内存边界处的内存分配管理结构就会被覆盖,攻击者可能改变程序流程执行任意代码。