CVE-2020-3110、CVE-2020-3111、CVE-2020 -3118、CVE-2020-3119、CVE-2020-3120 cdpwn 解析
CVE-2020-3110、CVE-2020-3111、CVE-2020 -3118、CVE-2020-3119、CVE-2020-3120 cdpwn 解析
攻击条件
在同一广播域,黑客即可通过cdp协议非法入侵开启CDP协议的思科设备,或者触发dos漏洞
影响范围
Routers:
- ASR 9000 Series Aggregation Services Routers
- Carrier Routing System (CRS)
- Firepower 1000 Series
- Firepower 2100 Series
- Firepower 4100 Series
- Firepower 9300 Security Appliances
- IOS XRv 9000 Router
- White box routers running Cisco IOS XR
Switches:
- Nexus 1000 Virtual Edge
- Nexus 1000V Switch
- Nexus 3000 Series Switches
- Nexus 5500 Series Switches
- Nexus 5600 Series Switches
- Nexus 6000 Series Switches
- Nexus 7000 Series Switches
- Nexus 9000 Series Fabric Switches
- MDS 9000 Series Multilayer Switches
- Network Convergence System (NCS) 1000 Series
- Network Convergence System (NCS) 5000 Series
- Network Convergence System (NCS) 540 Routers
- Network Convergence System (NCS) 5500 Series
- Network Convergence System (NCS) 560 Routers
- Network Convergence System (NCS) 6000 Series
- UCS 6200 Series Fabric Interconnects
- UCS 6300 Series Fabric Interconnects
- UCS 6400 Series Fabric Interconnects
IP Phones:
- IP Conference Phone 7832
- IP Conference Phone 8832
- IP Phone 6800 Series
- IP Phone 7800 Series
- IP Phone 8800 Series
- IP Phone 8851 Series
- Unified IP Conference Phone 8831
- Wireless IP Phone 8821
- Wireless IP Phone 8821-EX
IP Cameras:
- Video Surveillance 8000 Series IP Cameras
临时修复
- 关闭CDP思科发现协议
漏洞解析
cve-2020-3120
漏洞点在cdp 协议报文Address中的Number of address
。根据下图可以看出,通过该值去申请内存空间,并且该值没有经过任何校验。
我们可以将Number of address
修改为下图的值去触发dos漏洞
目前Cisco的修复方式为校验该值正确性,确保申请的内存不会出发dos。如下
cve-2020-3120
该漏洞与上一个漏洞类似,主要影响的设备为IOS-XR
在该处,虽然对number of address
的大小进行验证,但是可以绕过。我们可以将该值设置为4*maxint/5 触发漏洞
CVE-2020-3119 NX-OS Stack Overflow in the Power Request TLV
该漏洞出现在cdp协议交换poe帧的时候,没有对部分值检查,造成栈溢出,可以直接获取设备的root权限的shell。如下图
可以通过发送这种poe的帧去触发dos漏洞。不过注意,该漏洞是可以造成rce的
可以通过下图方法绕过aslr
cve-2020-3118 IOS XR Format String vulnerability in multiple TLVs
漏洞出现在下图
可以看出,该处存在类似与prinntf的格式化字符串漏洞
CVE-2020-3111 IP Phones Stack Overflow in PortID TLV
漏洞出现在下面的地方
cdp协议的portid处。memcpy在复制内存时没有对该值校验,导致栈溢出
CVE-2020-3110 IP Cameras Heap Overflow in DeviceID TLV
漏洞出现在下图
上面的代码只是为从传入数据包中解析出的端口ID分配了一个缓冲区,并将其值从传入TLV复制到分配的缓冲区中。 但是,这里有一个简单的错误,意味着可能发生琐碎的堆溢出。 分配dst_buf的大小计算为len +1,以允许在端口ID字符串的末尾添加空终止符。 不幸的是,此变量(alloc_len)定义为uint8,而计算为TLV有效载荷长度(value_len)的大小定义为uint16。TLV中的length字段为16位,并且完全由攻击者控制。 通过发送包含大小大于0xff的PortID TLV(0x01)的CDP数据包,攻击者可以使堆分配的缓冲区溢出,并带有攻击者控制的数据