CVE:CVE-2009-2957
CNNVD:CNNVD-200909-036
Dnsmasq是软件开发者Simon Kelley所研发的一款使用C语言编写的开源轻量级DNS转发和DHCP、TFTP服务器。
dnsmasq在启用了TFTP服务(--enable-tftp命令行选项或在/etc/dnsmasq.conf中启用enable-tftp)的时候存在堆溢出漏洞。如果所配置的tftp-root足够长，且远程用户发送的请求中包含有超长的文件名，dnsmasq就可能崩溃或以dnsmasq服务的权限(通常为非特权的nobody用户)执行任意代码。
tftp_request对daemon->namebuff调用strncat，其预定义大小为MAXDNAME字节(默认1025)。
/-----------
      else if (filename[0] == '/')
         daemon->namebuff[0] = 0;
      strncat(daemon->namebuff, filename, MAXDNAME);
- -----------/
由于daemon->namebuff可能已经包含有数据，也就是通过配置文件传送给守护程序的daemon->tftp_prefix，因此这可能触发堆溢出。
/-----------
  if (daemon->tftp_prefix)
    {
      if (daemon->tftp_prefix[0] == '/')
        daemon->namebuff[0] = 0;
      strncat(daemon->namebuff, daemon->tftp_prefix, MAXDNAME)
- -----------/
默认的前缀是/var/tftpd，但如果使用了更长的前缀，就可能执行任意代码。
solution:Upgrade thekelleys dnsmasq to a higher version than 2.49,0.4,0.5,0.6,0.7,0.95,0.96,0.98,0.992,0.996,1.0,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13,2.14,2.15,2.16,2.17,2.18,2.19,2.20,2.21,2.22,2.23,2.24,2.25,2.26,2.27,2.28,2.29,2.30,2.31,2.33,2.34,2.35,2.36,2.37,2.38,2.39,2.40,2.41,2.42,2.43,2.44,2.45,2.46,2.47,2.48,and avoid the version (,2.49],0.4,0.5,0.6,0.7,0.95,0.96,0.98,0.992,0.996,1.0,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,1.10,1.11,1.12,1.13,1.14,1.15,1.16,1.17,1.18,2.0,2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9,2.10,2.11,2.12,2.13,2.14,2.15,2.16,2.17,2.18,2.19,2.20,2.21,2.22,2.23,2.24,2.25,2.26,2.27,2.28,2.29,2.30,2.31,2.33,2.34,2.35,2.36,2.37,2.38,2.39,2.40,2.41,2.42,2.43,2.44,2.45,2.46,2.47,2.48