← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2021-35394 · CWE-78 · Disclosed 2021-08-16

Realtek Jungle SDK version v2

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

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.

"Exploit traffic is real and massive, but this is only a fleet emergency where UDP/9034 is actually exposed."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Find a Realtek-derived target

Attackers use internet scanning and fingerprinting to find downstream devices built on vulnerable Realtek SDK branches. Public research tied the issue to dozens of vendors and roughly 190 device models, so the practical target set is 'many OEM badges on the same codebase' rather than one product line. Common tooling here is Shodan-style reconnaissance or botnet self-propagation against known embedded-device populations.
Conditions required:
  • 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
Where this breaks in practice:
  • 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
Detection/coverage: Conventional vuln scanners often miss this because they key on the OEM product, not the embedded SDK. Asset discovery that fingerprints IoT/edge gear works better than host-based scanning.
STEP 02

Reach UDPServer on UDP/9034

The vulnerable service is 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.
Conditions required:
  • UDPServer is actually running
  • UDP/9034 is reachable from the attacker's position
  • Firewall/NAT policy permits the packet path
Where this breaks in practice:
  • 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
Detection/coverage: Network telemetry can spot unsolicited UDP/9034 probes. The nuclei template javascript/cves/2021/CVE-2021-35394.yaml tests for OAST callbacks after a UDP payload.
STEP 03

Inject a prefixed shell command

The flawed input check accepts payloads beginning with 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.
Conditions required:
  • Attacker can send a crafted UDP datagram
  • Target binary contains the incomplete orf prefix validation path
  • Shell utilities such as busybox, wget, tftp, or similar are available
Where this breaks in practice:
  • 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
Detection/coverage: IPS/NDR products can match the orf; command-injection pattern on UDP/9034. Fortinet and ExtraHop both publish detections for this behavior.
STEP 04

Pull down botnet payloads

Observed campaigns use the initial shell to download architecture-specific malware and execute it. Unit 42 tied exploitation to Mirai, Gafgyt, Mozi and RedGoBot delivery; HPE saw Mirai variants fetched by shell script. This is commodity takeover for DDoS, propagation, and opportunistic footholds, not subtle long-dwell intrusion tradecraft.
Conditions required:
  • Outbound connectivity from the device is allowed
  • Target CPU architecture matches an available malware build
  • Downloaded payload can be written and executed
Where this breaks in practice:
  • Egress filtering or DNS sinkholing can break the second stage
  • Some devices have limited writable storage or noexec-like constraints
Detection/coverage: Look for embedded devices making new outbound HTTP/TFTP requests, DNS lookups to ephemeral infrastructure, or sudden beaconing after UDP/9034 traffic.
STEP 05

Monetize the edge foothold

Once compromised, the device becomes a bot, relay, or pivot point. The blast radius is usually bounded to that appliance and whatever trust it has on the local network, but a router, repeater, or gateway is not a trivial host: it sits on traffic paths, has durable uptime, and is rarely monitored like a server.
Conditions required:
  • Attacker maintains execution on the embedded device
  • Device role provides useful network position or bandwidth
Where this breaks in practice:
  • Compromising one router is not the same as domain-wide compromise
  • Most observed abuse is noisy botnet activity rather than tailored enterprise post-exploitation
Detection/coverage: Detection is mostly network-side. EDR coverage on this class of device is effectively nonexistent, so defenders need NAC, firewall logs, IoT telemetry, and passive DNS/NetFlow.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusConfirmed exploited. CISA lists it in KEV, Unit 42 observed 134 million exploit attempts through December 2022, and HPE/Juniper documented active Mirai-style exploitation.
KEVYes. Added to CISA KEV on 2021-12-10 with due date 2021-12-24.
EPSS0.9422 with 99.924th percentile exposure likelihood, consistent with commodity botnet attention.
PoC / weaponizationPublic and low-friction. ONEKEY published command-injection details; ProjectDiscovery ships a nuclei template using UDP/9034 and OAST callbacks.
CVSS vector reality checkAV: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 versionsRealtek/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 stateThere 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 dataUnit 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 caveatCritical 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 / reporterDisclosed 2021-08-16. Research credited to Quentin Kaiser / ONEKEY Research with IoT Inspector support; Realtek advisory release date is 2021-08-15.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (8.8/10)

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.

HIGH Exploitability of exposed `UDPServer` instances
MEDIUM How many devices in a typical enterprise fleet are truly reachable and running the service
HIGH Need for immediate action on internet-exposed edge devices because of KEV/in-the-wild use

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.

05 · Compensating Control

What to do — in priority order.

  1. Block UDP/9034 at every trust boundary — Deny inbound and east-west access to UDP 9034 on 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.
  2. 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.
  3. Hunt for UDPServer and open UDP listeners — Search firmware, running process lists, and passive network telemetry for UDPServer, MP Daemon, and UDP 9034 listeners; 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.
  4. 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.
  5. 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.
What doesn't work
  • 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 UDPServer is 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.
06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, treat this as an exposed-edge-device hunt, not a generic server patch sprint. Because the CVE is KEV-listed and actively exploited, override the normal noisgate mitigation SLA and patch / mitigate immediately, within hours for any internet-reachable or branch-exposed device by blocking UDP/9034, isolating the segment, and triaging whether 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

  1. NVD CVE-2021-35394
  2. Realtek AP-Router SDK advisory PDF
  3. CISA Known Exploited Vulnerabilities entry
  4. ONEKEY / IoT Inspector advisory
  5. Unit 42 Realtek SDK exploitation analysis
  6. HPE Threat Labs / Juniper exploitation write-up
  7. FortiGuard outbreak alert
  8. ProjectDiscovery nuclei template
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.