| CVE編號 | CVE-2017-12754 |
|---|---|
| 影響產品 | Asuswrt-Merlin firmware 380.67_0 之前版本 |
| 解決辦法 | 下載Asuswrt-Merlin 380.69_2,參考https://asuswrt.lostrealm.ca/download |
| 張貼日 | 2018-03-22 |
| 上稿單位 | TWCERT/CC |
●概述:
華碩無線路由器除正版韌體外,另有一客製化選擇,Asuswrt-Merlin,由Eric Sauvageau開發維護,其宗旨是本著不動搖韌體基礎架構之原則,強化既有效能兼隨時改善缺陷,囿於其韌體httpd daemon所呼叫deleteOfflineClient( )函數,原程式設計未顧及參數資料過長情境,存在記憶體崩壞瑕疵,若遭遇特製http GET請求封包,觸發stack buffer overflow,惡性覆寫stack,賡續操縱指標計數器、control flow,最後實施Return-Oriented Programming,將導致RCE,該弱點影響硬體型號多達28種,修補code已公開於Asuswrt-Merlin網站。
●編註:
(1)Asuswrt-Merlin漏洞成因
該韌體裝置一個嵌入式httpd daemon,當使用者接觸deleteOfflineClient.cgi介面時,httpd必須呼叫deleteOfflineClient( )函數,摘列部分原始碼:
deleteOfflineClient(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t *query)
{ char *mac = NULL;
char mac_str[13];
mac = websGetVar(wp, "delete_offline_client","");
............
i = 0;
while(*mac) {
if(*mac==':') { mac++; continue; }
else { mac_str[i] = tolower(*mac); i++; mac++; }
}
if(i!=12) ;
......
}
上段程式目的在刪除離線用戶,既然要刪除得先知道對象,對象資料以http GET request形式放在URL內,所以要解析URL,websGetVar( )能取出delete_offline_client參數資料,這段程式中函數與參數外觀類似,deleteOfflineClient( )與delete_offline_client差別在底線,讀者請勿混淆,注意陣列變數mac_str[13],最多放13 bytes資料,在while迴圈內分析字串,如果是冒號':'就略過,其他字元則依序填入mac_str[ ]緩衝區,if(i!=12)則是判斷mac_str[ ]是否填到滿,滿則回傳,在正常操作下,delete_offline_client參數收到一組mac位址(例15:d5:f1:6c:09:0e),肯定沒問題,如果被塞入惡意變造數據,15:d5:f1:6c:09:0e:d5:f1:6c:09:0e,在while迴圈並無檢查字串長度相關設計,勢必造成溢位寫入,錯誤造成了,可是判斷式if(i!=12)依然return,只要i不等於12,i是24也行。
當然純粹攻擊堆疊溢位不足以全面入侵路由器,須結合其他弱點,首先deleteOfflineClient.cgi仍須通過網路身分驗證方得存取,所以session劫持或者CSRF亦屬組合攻擊之重要部分,攻擊者送出惡意http GET請求封包,藉著覆寫stack,能操縱指標計數器,掌握control flow,最後進行ROP,導致RCE的結局。
(2)ROP釋義
ROP乃Return-Oriented Programming縮寫,中文意思是”返回導向程式設計”,屬於進階型stack overflow攻擊,利用控制堆疊呼叫時的邏輯漏洞,多半是緩衝區溢位,buffer overflow導因於資料存入記憶體前,函數未正確檢查接收數據是否超出承受範圍,過量資料寫入stack就是溢位,預先配置妥當的變數儲存空間被覆蓋,且該放返回位址(return address)的那一格記憶體被換成其他資料,原用以重新導向control flow並返回給呼叫者的位址被蓋掉後,控制流將覆寫到新分配位址,只要熟悉此等漏洞利用技術,攻擊者僅需設計針對堆疊的代碼(payload有效載荷),破解較弱的設備OS緩衝區溢位防範機制,可控制堆疊呼叫以劫持程式控制流,執行針對性的機器語言指令序列(Gadgets),基於每段gadget通常以return指令收尾,計畫性呼叫相關代碼,駭客便能執行任意操作。
(3)涉及硬體型號
RT-AC5300
RT_AC1900P
RT-AC68U
RT-AC68P
RT-AC88U
RT-AC66U
RT-AC66U_B1
RT-AC58U
RT-AC56U
RT-AC55U
RT-AC52U
RT-AC51U
RT-N18U
RT-N66U
RT-N56U
RT-AC3200
RT-AC3100
RT_AC1200GU
RT_AC1200G
RT-AC1200
RT-AC53
RT-N12HP
RT-N12HP_B1
RT-N12D1
RT-N12+
RT_N12+_PRO
RT-N16
RT-N300
