Middleman net_dns()帧指针覆盖漏洞发布时间:2003-01-10 更新时间:2003-01-10 严重程度:中 威胁程度:远程拒绝服务 错误类型:边界检查错误 利用方式:服务器模式 BUGTRAQ ID:6584 受影响系统 Middleman Middleman 0.9.9详细描述 Middleman是多个功能代理服务程序。 Middleman在对请求消息中执行主机名DNS查询时存在漏洞,由于strncpy函数的实现错误,如果攻击者控制服务器提供的主机名长度超过128字节,可发生单字节缓冲溢出,可能以ROOT权限在系统上执行任意代码。 测试代码 尚无 解决方案 补丁下载: - --- middleman/src/misc.c 2002-10-19 19:07:24.000000000 +0200 +++ middleman-patched/src/misc.c 2003-01-10 11:29:08.000000000 +0100 @@ -27,17 +27,34 @@ #include <sys/types.h> #include "proto.h" - -/* - -strncpy which always NULL terminates - -*/ - -char *s_strncpy(char *d, char *s, size_t len) - -{ - - char *dest = d; - - - - for (; len && (*dest = *s); s++, dest++, len--); - - *dest = '\0'; + /* Adapted version of OpenBSD strlcpy */ +char * +s_strncpy(dst, src, siz) + char *dst; + char *src; + size_t siz; +{ + register char *d = dst; + register const char *s = src; + register size_t n = siz; + + /* Copy as many bytes as will fit */ + if (n != 0 && --n != 0) { + do { + if ((*d++ = *s++) == 0) + break; + } while (--n != 0); + } + + /* Not enough room in dst, add NUL and traverse rest of src */ + if (n == 0) { + if (siz != 0) + *d = '\0'; /* NUL-terminate dst */ + while (*s++) + ; + } - - return d; + return dst; } /* 相关信息 qitest1 <qitest1@bespin.org> 参考:http://online.securityfocus.com/archive/1/306293 |