CVE:CVE-2002-0501
CNNVD:CNNVD-200208-123
Posadis是一款开放源代码的无缓冲DNS服务程序，设计目标是方便使用和配置，运行在Linux、Unix、Microsoft操作系统下。
Posadis在日志函数中存在格式字符串漏洞，可导致攻击者利用此漏洞执行任意代码或者进行拒绝服务攻击。
问题存在于log.cpp的日志函数上：
---
void log_print(message_log_level log_level， char *logmsg， ...) {
        char buff[4096];
        long tsecs;
        struct tm *tstruct;
        va_list args;
        /* compile buffer */
        tsecs = time(NULL);
        tstruct = localtime(&tsecs);
        sprintf(buff， "%04d/%02d/%02d %02d:%02d|"， tstruct->tm_year + 1900，
tstruct->tm_mon + 1， tstruct->tm_mday， tstruct->tm_hour， tstruct->tm_min);
        switch (log_level) {
                case LOG_LEVEL_INFO:    strcat(buff， "INFO: "); break;
                case LOG_LEVEL_WARNING: strcat(buff， "WARNING: "); break;
                case LOG_LEVEL_ERROR:   strcat(buff， "ERROR: "); break;
                case LOG_LEVEL_PANIC:   strcat(buff， "PANIC: "); break;
        }
        va_start(args， logmsg);
        vsprintf(&buff[strlen(buff)]， logmsg， args);
        va_end(args);
        strcat(buff， "\n");
        /* and print it to various targets */
        if (!no_stdout_log) printf(buff);       <-- heh
        if (logfile) fprintf(logfile， buff);    <-- heh
#ifdef _WIN32
        w32dlg_add_log_item(buff);
#endif
#ifdef HAVE_SYSLOG_H
        syslog(log_level， "%s"， strchr(buff， '|') + 1);
#endif
}
---
攻击者可以使用一个包含格式串的恶意字符串作为参数提供给printf函数，这可能导致攻击者任意修改任意内存的内容。这样，攻击者可能通过覆盖一个函数的返回地址，以DNS服务进程权限执行攻击者指定的任意代码。
solution:Upgrade posadis posadis to a higher version than m5pre1,and avoid the version m5pre1