Vpopmail 3.4.11 中的问题 |
|
| 2004-05-25 |
| |
Vpopmail 软件包是Qmail软件的扩展。用户使用Vpopmail可以方便的管理虚拟域名,Vpopmail使用SQL数据库来保存用户账号。这个软件包中vchkpw程序在注册进程中存在一个缺陷。
Vchkpw程序为Qmail的服务包括后台进程pop3处理用户名/密码/域的认证。攻击者通过传递某种格式的字符串作为用户名/密码,他就能使用调用进程的权利而在系统中执行任意的代码。
4.8版本以前的Vpopmail软件包都容易受到攻击,因为都使用--enable-logging=y选项进行编译。如果你使用Vchkpw程序认证加入网络服务(例如qmail-popup)的用户,那么你的系统就可能受到远程攻击。
下面的代码说明Qmail pop3后台进程(qmail-popup)中存在着bug
hdm@atrophy:~ > telnet mail.myhost.com 110
Trying A.B.C.D...
Connected to mail.myhost.com.
Escape character is '^]'.
+OK <2334.961909661@mail.myhost.com>
user %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
+OK
pass %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
-ERR aack, child crashed Connection closed by foreign host.
hdm@atrophy:~ >
最新版本的vpopmail (4.8 - June/27/2000)可以从http://www.inter7.com/vpopmail站点下载。为了保护已经使用的易受攻击版本,Vpopmail的早期版本已经从该站点上全部删除。我听说任何程序都可以利用该类型的格式bug,所以请把ASAP进行升级。
问题出在系统日志函数上,系统日志函数有两个参数,其中第二个参数包括用户输入的数据。这个系统日志函数把第二个参数以格式字符串的形式进行传递,作为传递给vsprintf()函数的参数。这样一来,如果用户以包含打印格式序列但没有打印数据的字符串作为参数调用vsprintf()函数,将会发生什么呢?系统将会把堆栈中后面的数据作为调用参数的一部分,那么,从改变内部变量的值到执行shell命令,系统将允许执行各种各样的操作。举例代码如下:
<----[ log_exit() in vchkpw.c ]---->
<---------------------------------->
void log_exit( int syslog_level, int exit_code, char *fmt, ... )
{
char tmpbuf[300];
va_list ap;
if ( ENABLE_LOGGING > 0 ) {
va_start(ap,fmt);
vsprintf(tmpbuf, fmt, ap );
syslog(syslog_level, tmpbuf );
}
#ifdef DEBUG
vfprintf(stderr, fmt, ap);
fprintf(stderr, " ");
#endif
if ( ENABLE_LOGGING > 0 ) {
va_end(ap);
}
exit(exit_code);
}
<---------------------------------->
|
|
| |
|
发表评论
推荐文章
关闭窗口
|
|
|
|