某網通設備高危漏洞首次公開 / Henry Huang === 某廠商:D-Link ### D-Link Pre-auth Remote Root RCE (NO login required + Root) ### Demo 最新版本,且不能用whoami,用 touch 檔名,就可以利用 RCE 檔案 用 poc.py ### Impact 官方給的型號,提供弱點版本,更新時現在還在Beta,所以要手動Upload。 2019/05 CVE 已上版,但現在還在Beta。 (1) 爬 shodan 找型號,約 23 個都有這樣的弱點 (2) 由於管理介面在外網服務,有~8000多台可以利用的 (3) 給 IP 就能入侵,可以利用養肉雞(Botnet) (4) 加上弱密碼就可以像 Marai (5) DNS rebinding,可以進一步摸進去內網 ### Authentication Bypass (1)使用者以瀏覽器正常作法: 使用者送login request給 D-LINK,User 給 admin (2) D-LINK 新建一個檔案 /var/session/c1 給 UID 放在Session中,加上一次性驗證碼(chal),跟Public Key + tmp底下的明文密碼 password + Public + 一次性驗證碼(chal) 產生 HMAC hmac = hex_hmac_md5(pubkey+password+chal) (3) 由於User 得到 chal + pubkey + password => HMAC,再一次跟 Chal 再做雜湊 然後跟 D-LINK 設備的 HMAC 雜湊完 Chal 做比較 (4) 比較正確:新增檔案 /var/session/1 然後給 newchal = timestamp + action name newchal = ~ timestampe,(hamc X newchal) 設計機制似乎很安全。 BUT => 擷斷後,把 HMAC 清空。 然後會找目前目錄上的/var/session 中還是空的,但由於UID 是空的,所以找不到UID,/var/session/1, HMAC 仍然是空的。 後續的交易就一樣都可以正常登入。 ### Authenticated Command Injection php 程式邏輯: php 執行完後,環境變數在 $ShellPath,但如果有加入一個分號' -> ByPass,就可以做command injction。 不可以給正確 UID,要用不存在的 UID,然後它就會自己懷疑人生,然後會幫你自行產生一個檔案。 UID (不存在的值) + HMAC 空值 => 加上 Command 直接執行,就執行成功了。 ### Vendor Patch ### Detect & Mitigation 自我檢測: /HNAP1/ => authbypass SetAccessPointMode -> command injection => 代表存在該弱點。 ### Reset (1)不要開遠端管理。 (2)買其他產品 (3)下載Beta framework ### NO TELNET,NO SSH => 沒有Shell 方向 A:螺絲起子拆硬體 方向 B:用瀏覽器黑箱,摸不到,進一步下firmware,Command Injection 執行。 BurpSuite 每個AuthCode 一直動態隨機跳,較難。 以javascript 去改程式去取得 ROOT Shell。 ### Question 。下載 firmware 就好了,不用買 hardware。 。使用工具 firmadyne 。shell in /etc/init.d or /etc/init0.d 。See appendix 解失敗之後,發現有加密,可以破解加密: 有進階加密就會有進解解密程式。 所以一定會有Key。後來發現解密程式 fw_sign encimg -i FW.bin -d -s 'cat /etc/config/fw_sign' 就可以正常使用firmware。 ## Disclosure 原廠釋出更新,已調整該漏洞。 ## Summary 已修復,不想公開。 ###### tags: `HITCONCMT2019`,`HITCONCMT`,`HITCON`