Build1 distinct publisher3 min readUpdated
An operator found a hidden dropper reinstalling itself every 20 minutes on his Synology NAS only because he asked why an unexplained scheduled task existed. The vendor scan reported nothing.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
An operator tidying up scheduled tasks on his Synology NAS opened Task Scheduler, saw two power entries he did not remember creating, and went looking for an explanation; in the system crontab he instead found a root job invoking a hidden script every 20 minutes [1][3]. The vendor's own Security Advisor, run as a full scan, reported no malware, no mining software and no malicious system configuration files while both malicious files were on the disk [8][9].
The account is a single first-person write-up published on dev.to, whose author states that every command output, version number and CVE ID in it came from the actual investigation [20]. The power schedule turned out to be unrelated to the compromise [2]. That is the part worth sitting with: the artifact that triggered the question was innocent, and without the question the file would not have been opened [2].
The crontab line was `*/20 * * * * /bin/sh /etc/.conf #Sn5Yj8A2l0T`: a dot-prefixed file in /etc, run as root, tagged with a random marker string [3]. The script checked four conditions. If it had been deleted, it wgot itself back. If /etc/crontab lacked its marker, it overwrote the file with `>` rather than appending, reinstalling its own line. If /etc/rc.subr lacked the marker, it appended a boot-time invocation. If the payload was not running, it downloaded a file with a .png extension, saved it as `node`, and executed it [4]. The .png was not an image; its first bytes were the ELF header, making the extension camouflage [5]. It lived at /etc/node, 568 KB, dated 14 January, while the real Node.js binary sits at /usr/local/bin/node [6]. He found it in July, six months later [7]. At a 20-minute cadence that is roughly 72 executions a day and on the order of 13,000 over the dwell period [19].
Three reasons the scanner stayed green, per the author. The payload was UPX-packed, and the only readable string he could extract from it was the UPX project URL, so a signature matcher had no fingerprint to compare against [10]. The dropper was an ordinary shell script: wget, chmod, echo, every line legitimate in isolation, malicious only in combination [11]. And the cron entry was valid syntax, indistinguishable from a legitimate schedule to a check that looks for known-bad templates [12].
The entry route was named in the download URL itself. The filename contained "synology-10441", which the author connects to CVE-2024-10441, an unauthenticated remote code execution flaw in the DSM system plugin daemon, CVSS 9.8, out of Pwn2Own 2024 [14]. His NAS was running below the fixed build, with the advisory published in late 2024 [15]. His first theory, a brute-forced password because auto-block was off, was wrong: the flaw needs no authentication, so auto-block would have changed nothing [16]. What it did need was an unpatched DSM plus a management interface reachable from the internet [17]. Testing four ports from a phone on mobile data, he got refusals, meaning no port forwarding; the exposure came from QuickConnect, which relays through vendor servers [18]. He recorded SHA256 hashes of both files before cleanup [13].
Worth checking on your own boxes: the installed build against the vendor's fixed build [15], the crontab and rc files against a known-good copy rather than against a scanner verdict [12], and whether a vendor relay feature is providing reachability you believe you removed at the router [18].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
An operator tidying up scheduled tasks on his Synology NAS opened Task Scheduler and found two entries he did not remember creating: PowerOff task 0 at 2026-07-26 09:00 and PowerOn task 0 at 2026-07-26 20:00.
The power schedule turned out to be unrelated to the compromise, but the author says that if he had not asked why it was there he would never have opened the malicious file.
While digging through the system crontab he found the line */20 * * * * /bin/sh /etc/.conf #Sn5Yj8A2l0T: a dot-prefixed hidden file in /etc, executed as root every 20 minutes, tagged with a random string.
The script did four things: wget itself back if deleted; overwrite /etc/crontab using > rather than >> if the marker was absent, reinstalling the cron line; append a bash /etc/.conf & invocation to /etc/rc.subr for boot persistence if the marker was absent; and, if the payload was not running, download a .png file, save it as node, and execute it.
The downloaded .png was not an image: its first 16 bytes began with the ELF magic (177 E L F), making it a Linux binary with a camouflage extension.
The binary lived at /etc/node, was 568 KB, and was dated 2026-01-14; the real Node.js binary is at /usr/local/bin/node, so something called node in /etc is not a system component.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Detailed first-hand artefacts, single uncorroborated source
The write-up supplies unusually concrete primary artefacts - the verbatim cron line and marker string, the dropper's four behaviours, a hex dump showing ELF magic, file path, size and date, the packer string, the scan output, and an off-network port test - and it states outputs were not fabricated. But it is one publisher, one self-reported incident, with the recorded SHA256 values withheld, no vendor confirmation, no exploitation logs, and no analysis of what the payload actually did. Facts about the host are well documented; the entry-vector and root-cause conclusions are inference.
Single anecdotal incident, no population signal
Adoption evidence consists of exactly one disclosed compromise on one personal device plus one observed vendor-scanner miss. Nothing in the cluster indicates how many DSM units are unpatched, how widely this dropper family is deployed, or whether other operators have seen the same artefacts, so the observed footprint is a single data point rather than a measurable pattern.
Mildly overstated at the causal and headline layer
The technical body is measured and specific, and the central point - a green scan proves nothing was seen, not that nothing is there - is fully earned by the artefacts shown. The overstatement is narrow: the entry vector is asserted from a payload filename, the two-condition root cause is presented as settled fact without exploitation evidence, and the six-month dwell figure depends on a file timestamp an attacker could set. That pushes the claim set slightly ahead of what one uncorroborated host investigation demonstrates.
Individual practitioner post with mild self-promotional tail
The author is an individual writing under his own name on a developer publishing platform about his own device, with no vendor, sponsor or commercial disclosure visible in the cluster. Reputational and engagement incentives are present - the framing is dramatic and the piece closes by introducing a detection check the author wrote himself, positioning his own tooling against the vendor's - and a critical stance toward a named vendor's product is inherently attention-generating. Nothing indicates a paid or competitive interest.
Moderate-low: rich detail, zero corroboration
Confidence is limited by structure rather than by sloppiness. The host-level observations are specific enough to be credible and the author corrects his own wrong hypothesis, which is a good-faith signal. But the cluster has one publisher, one device, withheld hashes, no vendor or independent researcher response, and no payload behaviour analysis, so the descriptive claims are moderately trustworthy while the attribution and root-cause claims cannot be relied on.
build
A GAN beauty filter is a device budget allocation, not a feature toggle1 distinct publisher
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
build
The optional EntityManager is the bug: moving the transaction boundary into AsyncLocalStorage1 distinct publisher
build
A Timed-Out Reset SMS Is Not A Failed One, And Your Retry Code Probably Disagrees1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 20, 2026