During a recent threat-hunting exercise, something caught my eye: repeated references to the term “Rondo.” At first, I dismissed it as normal background radiation – after all, “Rondo” is also the name of a well-known Lithuanian music band. But as I dug deeper, it revealed several noteworthy twists.
Initial foothold
In our field of view, the campaign first appeared on 15 November 2025 and remains active at the time of writing. The threat actor primarily targets routers and other IoT devices by exploiting publicly known vulnerabilities – such as Asus WRT LAN Backdoor Command Execution (CVE-2014-9583) and Linksys WAP54G debug.cgi Shell Access as Gemtek (CVE-2010-1573). In total, the actor cycles through more than 50 known vulnerabilities (some with assigned CVE IDs, some unassigned), rapidly testing each one against the exposed devices in a technique commonly referred to as an “exploit shotgun.” The objective is simple: achieve remote code execution to download and run the stager script. In all observed intrusions, the exploitation stage originated from 192[.]159[.]99[.]95, while the stager itself was hosted separately at 74[.]194[.]191[.]52. Analysis of the hosting infrastructure suggests this IP (74[.]194[.]191[.]52) is likely a compromised Ubiquiti UniFi router.
![]()
Stager scripts
Across the campaign, we observed 15 stager scripts, all following the naming pattern rondo.{three_letters}.sh.
Each script is retrieved directly from the attacker-controlled host at: hxxp[://]74[.]194[.]191[.]52/rondo[.]{three_letters}[.]sh
Despite minor differences, the stagers follow a consistent pattern. They first attempt to reduce their footprint by redirecting output to /dev/null, removing temporary files, and cycling through common writable directories such as /tmp, /var/tmp, and /dev/shm. This appears intended to ensure reliable execution on a wide range of IoT or router operating environments.
The scripts then prepare a small working directory, download a set of candidate payloads, assign broad execution permissions, and try running them sequentially. The logic is intentionally simple and architecture-agnostic: whichever payload executes successfully becomes the active component of the RondoDox infection chain.
To prevent conflicts with earlier infections, the stagers also repeatedly terminate any running rondo processes before launching a fresh instance.

Interesting anti-analysis technique
Collecting the stager scripts and binaries was more challenging than expected. The server behind the campaign applies a strict request‑filtering logic that quickly bans anything that doesn’t look like a real infected device. A mismatched User‑Agent, or probing the commented‑out rondo.lol path resulted in an immediate IP ban and a meaningless response (displaying “rondo2012@atomicmail[.]io”) on subsequent requests.
It’s a relatively simple mechanism on the surface, but in practice it’s surprisingly effective – forcing repeated attempts from new IPs and slowing down analysis unless the request flow closely mimics the intended victim’s behavior.

Malware
The final stage of the campaign delivers 18 architecture specific binaries, enabling the threat actor to compromise a wide variety of routers and IoT devices. The collected samples include:
| Architecture Family | Specific Builds |
| x86 | x86_64, i686, i586, i486 |
| ARM | armv4l, armv5l, armv6l, armv7l, armebhf, armeb |
| MIPS | mips, mipsel |
| PowerPC | powerpc, powerpc‑440fp |
| Other | arc700, sh4, sparc, m68k |
All analyzed samples point to a clear goal: the malware is designed to conscript infected devices into a botnet.
Static analysis reveals indicators supporting this, including routines associated with network flooding, command‑and‑control communication, and device capability detection. One particularly interesting detail is a hard‑coded User‑Agent:
Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.5 Mobile/15E148 Safari/604.1
This likely allows the malware to masquerade as an iPhone browser during outbound traffic – useful for blending in with legitimate mobile traffic or evading simplistic filtering during DDoS attacks.
Additionally, the binaries contain a set of obfuscated strings, such as “steam”, “valve”, and “roblox”. Their purpose is unclear for the time being.
Overall, the malware is tailored for maximum architecture coverage, traffic disguise, and anti‑analysis, all of which are consistent with modern botnet‑oriented operations.
Conclusion
The RondoDox campaign shows how attackers can exploit unpatched routers and IoT devices to build a botnet, using multi-architecture malware, stager scripts, and clever anti-analysis techniques. The key lesson is simple but crucial: keep your devices updated. Many of these attacks rely on vulnerabilities that have existed for years – regular patching and firmware updates remain the best way to stay protected.
IOCs
Written by Justas Kaminskas, CyberSOC Cybersecurity Engineer
The SOCcare project is co-funded by the European Union, alongside our collaborators, NRD Cyber Security and RevelSI, and supported by the European Cybersecurity Competence Centre (ECCC) Centre (ECCC) under Grant Agreement No. 101145843. Views and opinions expressed are however those of the author(s) only and do not necessarily reflect those of the European Union or the European Cybersecurity Competence Centre. Neither the European Union nor the European Cybersecurity Competence Centre can be held responsible for them.
