漏洞預警 | 思科產品曝多個高危安全漏洞(附詳細技術分析)
近日,360企業安全集團程式碼衛士團隊安全研究人員發現了思科公司網路裝置的多個高危安全漏洞(CVE-2018-0423、CVE-2018-0424、CVE-2018-0425、CVE-2018-0426),並第一時間向思科公司報告,協助其修復漏洞。
2018年9月5日,思科公司釋出了4個安全公告,公開致謝360企業安全集團程式碼衛士團隊,並且釋出相應的補丁韌體版本修復漏洞。
圖 思科公司官方公告
圖 致謝360程式碼衛士
本次思科公司修復的漏洞中,CVE-2018-0423 是一個緩衝區溢位漏洞,CVSS評分為9.8分,本文將針對該漏洞進行技術分析。
0×00 CVE-2018-0423 概述
該漏洞是一個未授權的緩衝區溢位漏洞,影響 Cisco RV110W Wireless-N VPN Firewall、RV130WWireless-N Multifunction VPN Router、RV215WWireless-N VPN Router 等型號。漏洞出現在訪客模式的強制入口網站上,不需要進行任何的身份認證,任何使用者均可訪問,當一個已登陸的訪客,主動退出時將觸發一個 POST 請求,其 URL為:https://[target_ip]/guest_logout.cgi,其中 POST 資料的 cip 引數未進行合理的IP地址校驗,並且可被繞過,導致精心構造的 cip 引數可以觸發緩衝區溢位漏洞,甚至直接獲得裝置的rootshell,此漏洞最終的CVSS評分為9.8,具體可以參見思科(Cisco)釋出的安全公告,如下所示:
圖 CVE-2018-0423安全公告
0×01技術分析
通過逆向分析韌體檔案系統中的httpd應用,並修復其中的符號表後,可以定位到在處理 guest_logout.cgi 時,將呼叫 sub_ 2B320 函式,而後進入 sub_2AFB0 函式,sub_2AFB0 函式主要獲取POST請求中的 cmac、cip 和submit_button 的值,並對 cmac 和 cip 分別進行 MAC 地址和 IP 地址的合法性檢驗,如果 MAC 地址和 IP 地址都驗證成功,則返回1,將進入包含漏洞函式 get_client_vlan_id 的分支(具體的漏洞函式 get_client_vlan_id 將在後文進行說明),其中 sub_2AFB0 函式的部分虛擬碼如下:
圖 sub_2AFB0 函式部分虛擬碼
從業務邏輯處理上看,這樣處理是沒有任何問題的,因為 cmac 和 cip 是使用者可控的引數,必然需要先進行合法性校驗的,當然由於我們知道觸發漏洞的函式在 get_client_vlan_id 上,此函式將使用者可控的 cip 作為引數,因此這裡著重分析 VERIFY_IPv4 函式對 cip 的校驗流程,1)首先利用 sscanf() 判斷是否存在合法的點分十進位制IP地址;2)再利用 inet_aton() 判斷是否可以將點分十進位制IP地址串轉換成網路序的IP地址。其關鍵的部分虛擬碼如下所示:
圖 VERIFY_IPv4() 函式部分虛擬碼
VERIFY_IPv4函式從 cip 提取 “%d.%d.%d.%d” 形式的IP地址,這很容易滿足,只需要cip包含合法的點分十進位制形式的 IP 地址即可,如192.168.1.100。
隨後關鍵分析 inet_aton 函式對字串 IP 地址的處理,如果處理成功則返回1,這裡要實現觸發緩衝區溢位漏洞就必須讓 inet_aton 處理成功,返回1,通過逆向分析發現,假設合法的IP地址後增加了一個字元,如:192.168.1.100X,那麼程式會判斷這個 X 是否為 \x00,是否是 ascii 碼,並且是否為空白字元,如果不為 \x00,並且是 ascii 碼,但又不是空白字元,那麼就會返回 0,這樣就表示 inet_aton 函式處理失敗,但是如果X不為\x00,並且是 ascii 碼,又是空白字元,那就會繞過空白字元之後的字元校驗,並且能成功返回1,這樣就表示inet_aton 函式處理成功,其部分虛擬碼如下:
圖 inet_aton() 函式部分虛擬碼
因此,惡意使用者就可通過:點分十進位制IP地址 + 一個空白字元 + 任意字元長度的資料內容的形式來實現繞過VERIFY_IPv4函式的校驗,而空白字元可以是空格、製表符等,這裡可以直接使用空格即可實現繞過。
而後程式將使用者可控的 cip 值當作引數傳遞給使用危險函式的 get_client_vlan_id 函式,此函式未對 cip 做任何過濾或處理,直接利用 strcpy 函式將其拷貝至大小固定的棧空間上,通過逆向分析可知其中 0×84-0×88 存放著返回地址 ->LR 的值,因此一旦cip的長度超過0×84將直接覆蓋返回地址,導致緩衝區溢位的發生,其部分彙編程式碼如下:
圖 get_client_vlan_id() 函式部分彙編程式碼
0×02 參考連結
1. ofollow,noindex" target="_blank">https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180905-rv-routers-overflow (官方公告:CVE-2018-0423)
2. https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180905-rv-routers-injection (官方公告:CVE-2018-0424)
3. https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180905-rv-routers-disclosure (官方公告:CVE-2018-0425)
4. https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180905-rv-routers-traversal (官方公告:CVE-2018-0426)
0×03 關於360程式碼衛士
“360程式碼衛士”是360企業安全集團旗下專注於軟體原始碼安全的產品線,能力涵蓋了原始碼缺陷檢測、原始碼合規檢測、原始碼溯源檢測三大方向,分別解決軟體開發過程中的安全缺陷和漏洞問題、程式碼編寫的合規性問題、開原始碼安全管控問題。“360程式碼衛士”系列產品可支援Windows、Linux、Android、AppleiOS、IBM AIX等平臺上的原始碼安全分析,支援的程式語言涵蓋C、C++、C#、Objective-C、Java、JSP、JavaScript、PHP、Python、Go、區塊鏈智慧合約Solidity等。目前360程式碼衛士已應用於上百家大型機構,幫助使用者構建自身的程式碼安全保障體系,消減軟體程式碼安全隱患。
*本文作者360程式碼衛士,轉載請註明來自FreeBuf.COM