This is a loaded nail gun left in the garage, not a grenade in every room
CVE-2021-35394 is an unauthenticated command-injection flaw in Realtek Jungle SDK's diagnostic component MP Daemon, usually compiled as UDPServer. The vulnerable code exists across old Realtek AP/router SDK lines, including Jungle v2.x through v3.4.14B; Realtek's own advisory names affected branches including rtl819x-SDK-v3.2.x, v3.4.x, v3.4T, v3.4T-CT, and rtl819x-eCos-v1.5.x. When UDPServer is running and reachable, a single crafted UDP payload to port 9034 can inject shell commands as the device's privileged service account.
The vendor's 9.8 baseline is technically fair for *reachable* targets: no auth, no user interaction, trivial payload, full device takeover. But the real-world severity comes down one notch because UDPServer is not universally running, is often bound to the device LAN side, and in some firmware images is just an artifact unless another component launches it. That friction narrows exposed population materially, even though KEV status, high EPSS, and large botnet activity keep this well above routine IoT backlog noise.
5 steps from start to impact.
Find a Realtek-derived target
- Target device uses a vulnerable Realtek Jungle SDK branch
- Attacker can reach the device over the network
- Device is still running vendor firmware without the Realtek backport
- A lot of enterprise fleets simply do not inventory these devices as software assets
- Many affected devices sit behind NAT or are only reachable from local segments
- Product branding hides the Realtek lineage, which slows both attacker targeting and defender identification
Reach UDPServer on UDP/9034
MP Daemon/UDPServer, a diagnostic UDP listener commonly associated with port 9034. ONEKEY notes a major caveat: some firmware launches it at boot, some only spawn it when another function calls it, and some ship the binary without ever starting it. Weaponized scanning therefore checks for the open UDP service before attempting exploitation; ProjectDiscovery ships a nuclei template for exactly that reachability model.UDPServeris actually running- UDP/9034 is reachable from the attacker's position
- Firewall/NAT policy permits the packet path
- This is the biggest real-world brake on severity: vulnerable code present does not always equal exposed service
- Many devices expose the listener only on the LAN IP
- Stateful edge controls and carrier NAT break a lot of opportunistic internet exploitation
javascript/cves/2021/CVE-2021-35394.yaml tests for OAST callbacks after a UDP payload.Inject a prefixed shell command
orf, then passes attacker-controlled data to system(). Researchers showed the supposed fix was incomplete because orf; <command>;# still satisfies the prefix check and executes arbitrary shell commands. HPE documented one-packet exploitation delivering a downloader with busybox wget, while ONEKEY demonstrated simple execution with echo 'orf;ls' | nc -u <target> 9034.- Attacker can send a crafted UDP datagram
- Target binary contains the incomplete
orfprefix validation path - Shell utilities such as
busybox,wget,tftp, or similar are available
- A few stripped images may limit post-exec tooling even after code execution
- Watchdog behavior can reboot unstable devices if follow-on payloads are sloppy
orf; command-injection pattern on UDP/9034. Fortinet and ExtraHop both publish detections for this behavior.Pull down botnet payloads
- Outbound connectivity from the device is allowed
- Target CPU architecture matches an available malware build
- Downloaded payload can be written and executed
- Egress filtering or DNS sinkholing can break the second stage
- Some devices have limited writable storage or noexec-like constraints
Monetize the edge foothold
- Attacker maintains execution on the embedded device
- Device role provides useful network position or bandwidth
- Compromising one router is not the same as domain-wide compromise
- Most observed abuse is noisy botnet activity rather than tailored enterprise post-exploitation
The supporting signals.
| In-the-wild status | Confirmed exploited. CISA lists it in KEV, Unit 42 observed 134 million exploit attempts through December 2022, and HPE/Juniper documented active Mirai-style exploitation. |
|---|---|
| KEV | Yes. Added to CISA KEV on 2021-12-10 with due date 2021-12-24. |
| EPSS | 0.9422 with 99.924th percentile exposure likelihood, consistent with commodity botnet attention. |
| PoC / weaponization | Public and low-friction. ONEKEY published command-injection details; ProjectDiscovery ships a nuclei template using UDP/9034 and OAST callbacks. |
| CVSS vector reality check | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H is accurate only when UDPServer is running and reachable. The score overstates whole-fleet urgency because many deployments never expose that service. |
| Affected versions | Realtek/ONEKEY tie exposure to Jungle SDK v2.x through v3.4.14B and affected branches including rtl819x-SDK-v3.2.x, v3.4.x, v3.4T, v3.4T-CT, and rtl819x-eCos-v1.5.x. |
| Fixed versions / patch state | There is no clean universal upstream version bump for downstream products. Realtek published patch bundles for 3.2.3, 3.4.11E, 3.4T pre5/pre7, and eCos v1.5.3; ONEKEY notes 2.x is no longer supported and Jungle fixes require vendor backports. |
| Exposure data | Unit 42 found port 9034 open in over 80 internet-visible IoT device fingerprints across 14 vendors. ONEKEY identified at least 65 vendors and 198 unique fingerprints via Shodan-derived analysis. |
| Reachability caveat | Critical friction point. ONEKEY states some devices auto-start UDPServer, some launch it only when other code calls it, and some ship the binary as dead artifact. Presence of the file alone does not prove exploitability. |
| Disclosure / reporter | Disclosed 2021-08-16. Research credited to Quentin Kaiser / ONEKEY Research with IoT Inspector support; Realtek advisory release date is 2021-08-15. |
noisgate verdict.
The decisive downgrading factor is service reachability: this is only catastrophic where UDPServer is actually running and reachable, and the research explicitly says that is not true across all affected firmware. It stays HIGH because KEV status, public detection templates, and observed mass botnet exploitation prove attackers will absolutely hit every exposed instance they can find.
Why this verdict
- Started from vendor 9.8. Unauthenticated network RCE with one UDP packet deserves a critical baseline in a lab.
- Pulled down for attacker position reality. The attacker still needs network path to UDP/9034, and many deployments place these devices behind NAT, on LAN-only segments, or both.
- Pulled down again for exposure fraction. ONEKEY explicitly says some firmware auto-starts
UDPServer, some launch it only indirectly, and some never run it at all; vulnerable code presence is not equal to reachable service. - Pushed back up for exploitation evidence. KEV listing, Mirai-family campaigns, and Unit 42's 134 million observed exploit attempts mean exposed targets are getting hammered at scale.
- Pushed up for blast radius of the asset class. Even if this usually lands on a router/repeater/camera rather than a domain controller, edge devices are persistent, privileged network positions with weak telemetry and strong botnet value.
Why not higher?
Because this is not 'every vulnerable host is one packet from compromise.' The exposed population is materially narrower than the CVSS implies: UDPServer may be LAN-only, may not run by default, and may exist as dead code on some images. That compounding friction is enough to move it out of CRITICAL for broad enterprise prioritization.
Why not lower?
Because the friction ends the moment you find a reachable instance. For exposed devices this is trivial, unauthenticated, and heavily weaponized; CISA KEV and multiple vendor detections remove any doubt that attackers care. A reachable vulnerable router on the edge is too operationally valuable to dismiss as medium-grade embedded noise.
What to do — in priority order.
- Block UDP/9034 at every trust boundary — Deny inbound and east-west access to UDP
9034on router, IoT, camera, repeater, and gateway segments. Because this CVE is KEV-listed and exploited in the wild, deploy this immediately, within hours on perimeter firewalls, campus ACLs, SD-WAN policy, and NAC quarantine rules. - Isolate suspect Realtek-based devices — Move affected OEM devices to tightly scoped VLANs with no direct internet reachability and only the minimum management paths required. Do this immediately, within hours for any device you cannot quickly confirm as patched or non-running.
- Hunt for
UDPServerand open UDP listeners — Search firmware, running process lists, and passive network telemetry forUDPServer,MP Daemon, and UDP9034listeners; prioritize downstream OEM gear that does not obviously mention Realtek in the asset record. Because exposure is the key friction point, complete this triage immediately, within hours for internet-edge and branch-office gear. - Sinkhole known payload infrastructure and constrain egress — Observed exploitation commonly turns into downloader activity for Mirai/Gafgyt/Mozi-style binaries, so DNS sinkholing and strict outbound ACLs can break the second stage even if initial command execution lands. Apply these containment controls immediately, within hours on IoT/edge segments.
- Prefer device replacement when vendor backports are opaque — Many downstream vendors never published transparent firmware provenance, and Realtek's fix model relies on OEM backports rather than a universal version bump. Where the OEM cannot prove its firmware includes the Realtek fix, treat replacement or decommission as the cleanest compensating action and start that process immediately, within hours for exposed assets.
- Turning off the web admin UI alone does not fix this; the exploit path is the diagnostic UDP service, not the HTTP management plane.
- Traditional EDR on servers does not help much because the vulnerable asset is usually an embedded device that cannot run your agent.
- Relying on CVSS-only prioritization misses the real problem: you need to know whether
UDPServeris running and reachable, not just whether a product family is theoretically affected. - Assuming NAT makes you safe is weak comfort; branch exposure, UPnP misconfigurations, port forwards, and internal attacker position all bypass that assumption.
Crowdsourced verification payload.
Run this on the target device itself over SSH or serial shell, or against an extracted firmware rootfs mounted on a Linux analysis box. Invoke as sh verify-cve-2021-35394.sh on-device, or ROOTFS=/mnt/fw sh verify-cve-2021-35394.sh for offline analysis; root is recommended so the script can inspect processes, sockets, and init scripts.
#!/bin/sh
# verify-cve-2021-35394.sh
# Checks for likely exposure to CVE-2021-35394 on Realtek-based embedded Linux devices.
# Exit codes:
# 0 = PATCHED / not affected indicators found
# 1 = VULNERABLE / strong exposure indicators found
# 2 = UNKNOWN / insufficient evidence either way
set -u
ROOTFS="${ROOTFS:-/}"
PATH=/sbin:/bin:/usr/sbin:/usr/bin
say() { printf "%s\n" "$1"; }
exists() { command -v "$1" >/dev/null 2>&1; }
found_bin=""
running="no"
listening="no"
init_ref="no"
realtek_hint="no"
check_bins() {
for p in \
"$ROOTFS/bin/UDPServer" \
"$ROOTFS/usr/bin/UDPServer" \
"$ROOTFS/sbin/UDPServer" \
"$ROOTFS/usr/sbin/UDPServer" \
"$ROOTFS/bin/udpserver" \
"$ROOTFS/usr/bin/udpserver" \
"$ROOTFS/sbin/udpserver" \
"$ROOTFS/usr/sbin/udpserver"; do
if [ -f "$p" ]; then
found_bin="$p"
break
fi
done
}
check_processes() {
if [ "$ROOTFS" = "/" ]; then
if exists pidof && pidof UDPServer >/dev/null 2>&1; then
running="yes"
return
fi
if exists ps && ps 2>/dev/null | grep -E '[U]DPServer|[M]P[[:space:]_-]*Daemon' >/dev/null 2>&1; then
running="yes"
return
fi
fi
}
check_listeners() {
if [ "$ROOTFS" = "/" ]; then
if exists ss && ss -lunp 2>/dev/null | grep -E '(^|[[:space:]])9034([[:space:]]|$)' >/dev/null 2>&1; then
listening="yes"
return
fi
if exists netstat && netstat -lunp 2>/dev/null | grep -E '[:.]9034[[:space:]]' >/dev/null 2>&1; then
listening="yes"
return
fi
fi
}
check_init_refs() {
for d in \
"$ROOTFS/etc" \
"$ROOTFS/etc/init.d" \
"$ROOTFS/etc/rc.d" \
"$ROOTFS/etc/rcS.d" \
"$ROOTFS/etc_ro" \
"$ROOTFS/etc_ro/init.d" \
"$ROOTFS/etc/scripts"; do
[ -d "$d" ] || continue
if grep -R -E 'UDPServer|udpserver|9034|MP[[:space:]_-]*Daemon' "$d" >/dev/null 2>&1; then
init_ref="yes"
break
fi
done
}
check_realtek_hints() {
for d in "$ROOTFS/etc" "$ROOTFS/bin" "$ROOTFS/usr/bin" "$ROOTFS/www"; do
[ -d "$d" ] || continue
if grep -R -i 'rtl819x\|realtek' "$d" >/dev/null 2>&1; then
realtek_hint="yes"
break
fi
done
}
report() {
say "ROOTFS=$ROOTFS"
say "FOUND_BINARY=${found_bin:-none}"
say "RUNNING=$running"
say "LISTENING_UDP_9034=$listening"
say "INIT_REFERENCE=$init_ref"
say "REALTEK_HINT=$realtek_hint"
}
check_bins
check_processes
check_listeners
check_init_refs
check_realtek_hints
report
# Strong vulnerable signal: binary exists and either runs, listens, or is referenced in startup paths.
if [ -n "$found_bin" ] && { [ "$running" = "yes" ] || [ "$listening" = "yes" ] || [ "$init_ref" = "yes" ]; }; then
say "VULNERABLE"
exit 1
fi
# If binary is absent and no listener exists, consider patched/not affected from this host's perspective.
if [ -z "$found_bin" ] && [ "$listening" = "no" ] && [ "$running" = "no" ]; then
say "PATCHED"
exit 0
fi
# Binary present but exposure uncertain, or listener seen without binary path clarity.
say "UNKNOWN"
exit 2
If you remember one thing.
UDPServer is actually running; then complete vendor firmware replacement, validated backports, or device retirement under the noisgate remediation SLA for HIGH findings of ≤180 days, with externally reachable instances handled first and anything unverifiable pushed toward replacement rather than trust-by-release-notes.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.