H3C 光網路終端權限提升漏洞
隨著中國聯通的寬帶升級,ISP 連同更換了新款的 H3C HM2004-DU1 光網路終端(Optical Network Terminal/Modem/光貓)。 該設備採用了較新的 ARM AArch64 架構與容器化管理設計,與以往常見的 MIPS 架構設備有顯著差異,傳統的提權工具對其失效。
權限失控
在嘗試 common path 遍歷後,我發現了一個特殊的路徑 /cgi-bin/telnet.asp。出乎意料的是該路徑並沒有特權保護,以普通用戶登入 web 同樣能夠進入此頁面開啟臨時 Telnet。
後端僅驗證了會話是否有效,卻未校驗會話所有者的權限。
啟用 Telnet 後,僅有一組弱憑證 admin:admin 能夠登入。成功進入後,受限的 shell 環境缺少大部分的 GNU 標準工具,且 admin 帳戶並非 UID 0。
根據經驗,嵌入式 Linux 系統運行時被解密的配置通常會駐留在 tmpfs 中。檢查 /tmp 目錄後,我發現 ctromfile.cfg 檔案帶有不少解密後的憑證。
# cat /tmp/ctromfile.cfg | grep CUAdmin
<Entry0 Active="Yes" username="CUAdmin" web_passwd="[REDACTED]" display_mask="FF FF FF FF FF FF FF FF FF" Logged="0" LoginTimes="0" Logoff="0" />
根據習慣檢查了 /etc/passwd 的內容後,我發現系統中存在多個 UID 0 賬戶。多次弱憑證和交叉驗證後,我發現 web 普通用戶的密碼可以直接用於認證 su user。而 user 賬號正是 UID 0 之一,成功獲取 root 權限。
# cat /etc/passwd
CUAdmin:$1$$...:0:0:root:/:/bin/sh
user:$1$$...:0:0:root:/:/bin/sh
H3CT:$1$$...:668:668:H3CT:/:/bin/sh
CUAdmin:$1$$...:0:0:root:/mnt:/sbin/nologin
web 權限持久化
借助從 ctromfile.cfg 中取得的 CUAdmin 密碼,進入管理員 web 控制檯後,我移除了 TR-069 協議配置,以防止 ISP 透過其遠程下發配置。
/cu.html為管理員賬戶登入路徑。網頁/cgi-bin/login.asp路徑不允許登入管理員賬戶。
在「基本配置」頁面中,TR069 協議配置的刪除按鈕為灰色禁用狀態,但直接刪除其按鈕元素內的 disable 屬性後就可以繞過。
Disclaimer:
刪除TR-069可能會導致 ISP 遠程維護失效,無法接受安全補丁等等風險,謹慎考慮。
後端 API 沒有對其請求進行校驗,impressive。
SSH 持久化訪問
web 會話超時會同時導致 Telnet 中斷,所以需要部署一個持久 SSH 服務。
該系統為 LXC 架構,根目錄 / 為唯讀的 SquashFS,沒法透過 /etc/rc.local 腳本修改目錄。但是其業務邏輯在 cuinform 容器中,它的掛載點 /opt/cu/apps 是可寫的 UBIFS 分區。
機身帶有一個 USD 接口,正好方便傳輸靜態編譯的 AArch64 Dropbear2 至設備。我把二進制與密鑰放置在了 /opt/cu/apps/ssh/ 目錄。在 init.d 中注入啟動腳本,這樣 SSH 服務就會作為容器的一個子進程隨系統啟動。
# 1. 寫入啟動腳本
cat > /opt/cu/apps/apps/opt/preinstall/cuinform/cuinform/rootfs/etc/init.d/ssh <<EOF
#!/bin/sh /etc/rc.common
START=99
start() {
/opt/cu/apps/ssh/dropbear -p 2222 -r /opt/cu/apps/ssh/etc/dropbear_rsa_host_key -B
}
EOF
# 2. 賦予權限
chmod +x /opt/cu/apps/apps/opt/preinstall/cuinform/cuinform/rootfs/etc/init.d/ssh
# 3. 建立軟鏈接 (啟用服務)
ln -s /opt/cu/apps/apps/opt/preinstall/cuinform/cuinform/rootfs/etc/init.d/ssh /opt/cu/apps/apps/opt/preinstall/cuinform/cuinform/rootfs/etc/rc.d/S99ssh