| Reconnaissance | | The Python scanner generates random public IPs and scans common IoT and management ports: 22 (SSH), 23 (Telnet), 80/443 (HTTP/HTTPS), 7547 (TR-069), 8080, 8443, 8888, 5555 (ADB), and others. It loads blacklist.txt and failed.txt to avoid honeypots, research ranges, known bot nodes, and previously failed targets. | High-volume outbound SYN scans from an edge device to ports 22/23/80/443/7547/8080/8443/8888/5555; connections to random external IP ranges from a router or DVR. |
|---|
| Resource Development | | The operator stages architecture-specific ELF payloads and the Python scanner on distribution infrastructure (217.160.125.125:15527 in the observed campaign) and runs a separate C2 server (85.215.131.70). The same host serves both the main binary and the scanner script. | Outbound HTTP downloads from a single IP:port serving multiple architecture-named binaries (bot.arm, bot.mips, bot.x86_64) and a scanner.py; threat-intel matches on distribution IPs. |
|---|
| Initial Access | | Primary access is CVE-2021-27137, a stack buffer overflow in the DD-WRT UPnP/SSDP service triggered by an oversized ST:uuid: value in a crafted M-SEARCH request to UDP port 1900, giving unauthenticated remote code execution. The scanner adds many other HTTP exploits for secondary access, including D-Link HNAP (CVE-2015-2051), GLPI htmLawed RCE (CVE-2022-35914), AVTECH DVR flaws (CVE-2025-34054, CVE-2016-15047), NVMS-9000, and Zyxel SysTools RCE, plus Telnet/SSH weak-credential access. | Inbound UDP to port 1900 with oversized SSDP M-SEARCH ST headers; IPS signatures for CVE-2021-27137; anomalous HTTP POSTs to DVR, router, and GLPI management endpoints; new inbound Telnet/SSH auth on edge devices. |
|---|
| Execution | | Exploitation drops shell commands that download and run the ELF payload (wget to /tmp, chmod 777, execute, delete). The propagation component is a Python 3 script executed with python3 /tmp/scanner.py and arguments controlling random scanning, target ports, runtime, and C2 server. pip3 installs requests, paramiko, and beautifulsoup4. | Shell one-liners chaining wget/chmod/execute in /tmp on an embedded device; python3 running scanner.py; pip3 install of requests, paramiko, beautifulsoup4 with --break-system-packages. |
|---|
| Persistence | | C0XMO checks /proc/self/exe, then copies itself to hidden paths (/tmp/.sys, /var/tmp/.sys, /dev/shm/.sys, and $HOME/.sys) with permissions 755. It installs a cron job to run itself every 15 minutes and appends launch commands to ~/.profile, ~/.bashrc, and ~/.bash_profile referencing the hidden files. It also re-executes itself if its process is terminated. | New crontab entries with a */15 schedule pointing to a hidden dotfile; appended lines in ~/.bashrc/.profile referencing /tmp/.sys; files named .sys under /tmp, /var/tmp, /dev/shm; a process that respawns immediately after being killed. |
|---|
| Defense Evasion | | Payloads are staged as hidden dotfiles (.cache, .sys) in transient directories, and the deployment one-liner deletes the downloaded binary after execution (rm -f .cache). The malware runs from memory-backed and temp locations that are wiped on reboot, complicating forensic recovery on devices without persistent logging. | Creation then deletion of dotfiles in /tmp; execution from /dev/shm; short-lived files with names beginning with a dot in world-writable directories on edge devices. |
|---|
| Credential Access | | The scanner performs weak-password brute-force attacks against Telnet and SSH services using a hardcoded credential list. On success it detects the target architecture and downloads the matching payload. This is the classic Gafgyt/Mirai default-credential propagation path, retained alongside the newer HTTP exploits. | Repeated failed then successful Telnet/SSH logins from an internal edge device against other devices; authentication bursts using common default credential pairs; new SSH sessions from a router or DVR. |
|---|
| Discovery | | The scanner uses worker threads to check whether target ports are open and detect the service type before choosing a Telnet, SSH, HTTP, or ADB exploitation path. Locally, C0XMO enumerates all processes under /proc, comparing names against a blacklist of botnet malware, network service applications, programming tools, and red-team utilities to identify rivals to terminate. | Threaded port probing across many hosts; reads across /proc/[pid]/ entries by a non-management process; service-detection traffic followed by targeted exploit attempts. |
|---|
| Lateral Movement | | After finding an exploitable target, the scanner deploys the architecture-matched C0XMO payload via a shell one-liner (cd /tmp; wget the arch binary to .cache; chmod 777; execute; delete). It reaches Telnet, SSH, HTTP-exploitable, and ADB-exposed devices, using detect_arch to select the correct binary so a single scanner covers heterogeneous device fleets. | Edge devices initiating outbound SSH/Telnet and HTTP exploit traffic to peers; wget of architecture-named binaries to /tmp/.cache on newly infected hosts; ADB connections to port 5555. |
|---|
| Command and Control | | C0XMO connects to its C2 (85.215.131.70) and completes a custom three-step handshake: it sends a magic string (669787761736865726500) with a shared secret, receives HANDSHAKE_OK, sends BOT and receives OK, then sends a final magic sequence (FF FF FF FF 75) and receives a welcome message. It then enters standby and answers ping with PONG as a heartbeat, awaiting scan or attack commands. | Long-lived TCP sessions from an edge device to an unfamiliar external IP; a fixed magic-string handshake pattern; periodic small heartbeat exchanges (ping/PONG); C2 traffic on non-standard ports. |
|---|
| Impact | | On command, C0XMO launches DDoS attacks using 19 methods: UDP, TCP, hybrid TCP+UDP, and SYN floods; Valve Source Engine, Discord voice UDP, and FiveM game floods; OVH bypass TCP/UDP floods; hex-pattern floods; NTP and Memcached amplification; ICMP floods; Ping of Death; and several HTTP flood variants including request storm, slow/IO exhaustion, spoofed, GET, and Cloudflare-bypass floods. It also runs a competitor-killing routine (T1562.001) that terminates rival malware and removes their persistence. | High-volume outbound flood traffic (UDP/TCP/SYN/ICMP) from edge devices; NTP/Memcached reflection sourced from the network; sudden bandwidth saturation; process termination of other known malware on the device. |
|---|