欢迎光临
我们一直在努力

proftp 1.2.0 存在安全漏洞-网管专栏,安全与管理

建站超值云服务器,限时71元/月

bug1:
void set_proc_title(char *fmt,…) in src/main.c

memset(statbuf, 0, sizeof(statbuf));
vsnprintf(statbuf, sizeof(statbuf), fmt, msg);

#ifdef have_setproctitle
setproctitle(statbuf);
#endif /* have_setproctitle */

setproctitle, defined setproctitle(char *fmt,…);, calls vsnprintf().
这存在格式化攻击的漏洞。通过攻击缓冲区可能获得 root 权限。

bug2:
modret pam_auth(cmd_rec *cmd) in modules/mod_pam.c

/* allocate our entries…we dont free this because pam does this for
us.
*/
pam_user = malloc(strlen(cmd->argv[0]) + 1);
if(pam_user == (char *)0)
return pam_return_type ? error(cmd) : declined(cmd);
sstrncpy(pam_user, cmd->argv[0], strlen(cmd->argv[0]) + 1);

pam_pass = malloc(strlen(cmd->argv[1]) + 1);
if(pam_pass == (char *)0)
return pam_return_type ? error(cmd) : declined(cmd);
sstrncpy(pam_pass, cmd->argv[1], strlen(cmd->argv[1]) + 1);

这不能造成拒绝服务攻击,除非管理员设置了更高的界限。

bug3:
void logformat(char *nickname, char *fmts) 没有在本地变量 format 进行边界检查。结果登录格式将溢出缓冲区。

bug3:
int dolist(cmd_rec *cmd, const char *opt, int clearflags) in
modules/mod_ls.c

char pbuffer[maxpathlen];

if(*arg == ~) {
struct passwd *pw;
int i;
const char *p;

i = 0;
p = arg;
p++;

while(*p && *p != /)
pbuffer[i++] = *p++;
pbuffer[i] = \0;

这个函数通过 cmd_stat 调用与 arg存在于静态堆栈,看上去是有问题但不能只通过输入 1024 字节造成溢出,不过仍然是不安全的设计。
解决方法:
1。使用 setproctitle(“%s”,statbuf);
2。pstrdup() 或只使用 cmd->argv[0] and cmd->argv[1].

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » proftp 1.2.0 存在安全漏洞-网管专栏,安全与管理
分享到: 更多 (0)