xfocus logo xfocus title
首页 焦点原创 安全文摘 安全工具 安全漏洞 焦点项目 焦点论坛 关于我们
English Version

Middleman net_dns()帧指针覆盖漏洞


发布时间:2003-01-10
更新时间:2003-01-10
严重程度:
威胁程度:远程拒绝服务
错误类型:边界检查错误
利用方式:服务器模式

BUGTRAQ ID:6584

受影响系统
Middleman Middleman 0.9.9
Middleman Middleman 1.0
Middleman Middleman 1.1
Middleman Middleman 1.2
详细描述
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