首页 -> 安全研究

安全研究

安全漏洞
多个ftpd setproctitle()格式化字符串远程安全漏洞

发布日期:2000-07-07
更新日期:2000-07-11

受影响系统:

ProFTPD 1.2 pre<=10的版本
opieftpd ftp 1.3

Debian Linux 2.2
Debian Linux 2.1
FreeBSD 2.x
FreeBSD 1.1.5.1
NetBSD 1.0
NetBSD 1.1
NetBSD 1.2.x
NetBSD 1.3.x
NetBSD 1.4.x
OpenBSD 2.x
不受影响系统:

FreeBSD >=2.2
ProFTPD proftpd 1.2
描述:

proftpd 1.2.0pre10以及更低版本存在一个安全漏洞。set_proc_title()函数接收到用户输入
数据后,将调用setproctitle(char *fmt,...)来设置进程标题。由于错误的将用户的提供的数
据作为setproctitle()函数的格式化串,如果用户输入一些特殊的格式化字符,可能覆盖函数返
回地址,并可能远程执行任意命令。

这个问题影响所有错误使用setproctitile()函数的系统中,包括很多*BSD系统,目前已知OpenBSD
系统自带的Ftpd受此问题影响(必须开放匿名ftp服务)。

<* 来源:  lamagra@digibel.org *>


建议:
1. 更新到proftpd 1.2.0版,您可以在下列地址下载:
http://www.proftpd.net/

2. OPENBSD也提供了自己的补丁程序:
ftp://ftp.openbsd.org/pub/OpenBSD/patches/2.7/common/019_ftpd.patch


然后按照下列步骤操作:
    cd /usr/src
    patch -p0 < 019_ftpd.patch
    cd libexec/ftpd
    make obj && make depend && make && make install

3. opieftpd ftp 1.3:
  
for FreeBSD的补丁:
Index: opieftpd.c
===================================================================
RCS file: /home/ncvs/src/contrib/opie/opieftpd.c,v
retrieving revision 1.3
diff -u -r1.3 opieftpd.c
--- opieftpd.c    2000/04/10 11:18:47    1.3
+++ opieftpd.c    2000/07/10 07:23:02
@@ -633,7 +633,7 @@
#if DOTITLE
     snprintf(proctitle, sizeof(proctitle), "%s: anonymous/%s", remotehost,
     passwd);
-    setproctitle(proctitle);
+    setproctitle("%s", proctitle);
#endif    /* DOTITLE */
     syslog(LOG_NOTICE, "ANONYMOUS FTP login from %s with ID %s",
             remotehost, passwd);
@@ -644,7 +644,7 @@

#if DOTITLE
     snprintf(proctitle, sizeof(proctitle), "%s: %s", remotehost, pw->pw_name);
-    setproctitle(proctitle);
+    setproctitle("%s", proctitle);
#endif    /* DOTITLE */
     syslog(LOG_INFO, "FTP login from %s with user name %s", remotehost, pw->pw_name);
   }
@@ -1262,7 +1262,7 @@
   remotehost[sizeof(remotehost) - 1] = '\0';
#if DOTITLE
   snprintf(proctitle, sizeof(proctitle), "%s: connected", remotehost);
-  setproctitle(proctitle);
+  setproctitle("%s", proctitle);
#endif    /* DOTITLE */

   t = time((time_t *) 0);

4. NetBSD提供了对1.4.x的补丁,下载地址:

ftp://ftp.NetBSD.ORG/pub/NetBSD/misc/security/patches/20000708-ftpd



浏览次数:9691
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障