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數據包,攻擊者可以使堆分配的緩沖區溢出,並帶有攻擊者控制的數據
