← Back to Feed CACHED · 2026-09-25 03:56:10 · CACHE_KEY CVE-2026-93289
CVE-2026-93289 · CWE-78 · Disclosed 2026-09-24

The affected products are vulnerable to command injection attack that could

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

Someone left the front door of a Roomba open, but only for the three seconds it takes to shake hands

CVE-2026-93289 is an OS command injection (CWE-78) in the Eufy Omni C20 and Omni X10 Pro robot vacuums running firmware prior to 1.6.4. An unauthenticated attacker within adjacent-network range (WiFi/Bluetooth proximity) can inject system commands during the device's initial pairing sequence — the brief window when the vacuum connects to a home WiFi network via the Eufy mobile app. Successful exploitation yields root-level command execution on the vacuum's embedded Linux SoC. CISA tracked this under ICS advisory ICSA-26-267-02, alongside two sibling CVEs: CVE-2026-93291 (CVSS 9.4, improper cert validation / MitM) and CVE-2026-93290 (CVSS 5.5, hardcoded credentials leaking map data). All three are fixed in firmware 1.6.4.

The vendor's CVSS 3.1 score of 7.5 HIGH is mathematically correct for the vector AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H, and the CVSS 4.0 bump to 9.0 CRITICAL reflects the downstream impact modifiers. But both scores dramatically overstate the real-world risk to any enterprise security team. This is a *consumer robot vacuum cleaner*. It is not a server, not a network appliance, not an identity provider, and not a component that appears on asset inventories of organizations managing 10,000 hosts. The attack requires physical or wireless proximity to the device and the device must be actively in pairing mode — a window measured in seconds. No enterprise defender should lose sleep over this.

"Robot vacuum bug needs adjacent-network access during brief pairing; irrelevant to enterprise fleets"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Attacker achieves adjacent-network position

The attacker must be within WiFi or Bluetooth range of the target Eufy vacuum. The CVSS vector specifies AV:A (Adjacent), meaning the attacker needs Layer 2 adjacency — either connected to the same home WiFi segment or close enough for direct wireless communication during pairing. This is not remotely exploitable over the internet.
Conditions required:
  • Physical proximity to the target premises
  • Target premises has an Eufy Omni C20 or X10 Pro on the network
Where this breaks in practice:
  • Enterprise networks almost never host consumer robot vacuums
  • Even if present, the device would typically be on an isolated IoT/guest VLAN in any managed environment
  • Attacker must physically be near the vacuum — think 'in the break room'
Detection/coverage: NAC/802.1X logs or DHCP lease monitoring for Ampak Technology OUI (44:A6:E5:xx, C8:B2:9B:xx) would flag consumer IoT on corporate segments.
STEP 02

Victim initiates pairing mode on the vacuum

The vulnerability is only exploitable *during the pairing process* — the brief window when the Eufy vacuum broadcasts its setup network and negotiates WiFi credentials with the mobile app. This is a one-time event during initial setup or a deliberate factory-reset re-pairing. The attacker cannot trigger this remotely; they must wait for a user to initiate it. Attack Complexity is rated AC:H precisely because of this timing dependency.
Conditions required:
  • A user must be actively pairing the vacuum at the moment of attack
  • Attacker must be monitoring for the pairing broadcast
Where this breaks in practice:
  • Pairing happens once during initial setup — a window of 30-120 seconds
  • The attacker has no way to force the device into pairing mode remotely
  • Re-pairing requires a physical factory reset button press on the device
Detection/coverage: Wireless IDS (e.g., Cisco CleanAir, Aruba RAPIDS) can detect rogue AP broadcasts matching Eufy pairing SSIDs.
STEP 03

Command injection during pairing handshake

During the pairing negotiation, the attacker injects OS commands into a parameter that the vacuum's embedded firmware passes unsanitized to a shell. No authentication is required (PR:N) and no user interaction beyond the pairing initiation is needed (UI:N). The injected commands execute as root on the vacuum's ARM-based embedded Linux system. No public PoC or weaponized tool exists for this vulnerability.
Conditions required:
  • Successful interception of or participation in the pairing handshake
  • Knowledge of the injectable parameter (not publicly documented)
Where this breaks in practice:
  • No public PoC or exploit code exists
  • The injectable parameter and protocol details have not been disclosed by Somerset Recon
  • Reverse-engineering the pairing protocol requires firmware extraction and analysis
STEP 04

Root shell on the robot vacuum

The attacker achieves root-level command execution on the vacuum's embedded SoC. The scope is S:U (Unchanged) — the compromise is confined to the vacuum itself. Impact is rated C:H/I:H/A:H on the device: the attacker can exfiltrate mapping data, use the vacuum's microphone/camera (if equipped), brick the device, or attempt lateral movement from the vacuum's network position. However, the vacuum is a low-powered IoT device with limited network capabilities.
Conditions required:
  • Successful command injection in step 3
Where this breaks in practice:
  • The vacuum is an isolated IoT endpoint with no credentials to other systems
  • Lateral movement from a vacuum to domain-joined hosts is a non-trivial post-exploitation challenge
  • The device has minimal attack surface toward the rest of the network
Detection/coverage: Network anomaly detection would flag unexpected outbound connections from an IoT device OUI. EDR on enterprise hosts would detect lateral movement attempts.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. Not listed in CISA KEV. No reports of active exploitation from CISA, vendor, or threat intel feeds. CISA advisory states no known public exploitation.
Proof-of-conceptNone public. No PoC repositories, blog posts, or exploit code have been published. The injectable parameter and protocol specifics remain undisclosed. Researcher Jared of Somerset Recon reported the finding to CISA but has not released technical details.
EPSS scoreNot yet scored — model evaluation in progress per FIRST.org. Given the adjacent-network vector and IoT-specific scope, expect a low percentile once scored.
KEV statusNot listed as of 2026-09-25. Given the adjacent-network-only vector and consumer IoT scope, KEV listing is unlikely.
CVSS vector interpretationCVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H — Adjacent network, high complexity (pairing window), no auth needed, scope unchanged (device-only impact). CVSS 4.0 rates it 9.0 due to subsequent system impact modifiers, but this inflates the consumer-IoT reality.
Affected versionsEufy Omni C20 firmware < 1.6.4, Eufy Omni X10 Pro firmware < 1.6.4
Fixed versionFirmware 1.6.4 for both models, available via the Eufy mobile app OTA update
Scanning / exposure dataThese are consumer WiFi-connected IoT devices with no internet-facing attack surface. They do not listen on routable ports. Shodan/Censys/GreyNoise exposure is zero — the attack vector is local/adjacent only.
Disclosure timelineDisclosed 2026-09-24 via CISA ICS Advisory ICSA-26-267-02. Sibling CVEs: CVE-2026-93291 (CVSS 9.4, cert validation), CVE-2026-93290 (CVSS 5.5, hardcoded creds).
Reporting researcherJared of Somerset Recon reported all three CVEs to CISA.

Sources.

  1. CISA ICS Advisory ICSA-26-267-02
  2. SecurityOnline – Eufy Robot Vacuum Vulnerabilities
  3. Strix.ai – CVE-2026-93289 Details
  4. TheHackerWire – CVE-2026-93289 PoC & Exploit Status
  5. OffSeq Threat Radar – CVE-2026-93289
  6. CISA – cisagov/CSAF PR #485 (Advisory Source)
  7. Eufy Support – Omni C20 WiFi Setup Guide
04 · The Call

Final Verdict
↓ DOWNGRADED to LOW (2.5/10)

Why this verdict

  • Adjacent-only vector: AV:A means the attacker must be on the same Layer 2 network or within wireless range of the vacuum. This is not remotely exploitable over the internet. For an enterprise fleet, this eliminates all external threat actors and limits the attack surface to physical insiders — a massive reduction in reachable population.
  • Pairing-window timing dependency: AC:H reflects that exploitation is only possible during the brief (30-120 second) pairing handshake. The attacker cannot trigger pairing remotely; they must be adjacent *and* a user must be actively setting up the vacuum. This is an extremely narrow race condition that cannot be reliably weaponized at scale.
  • No PoC, no exploitation, no KEV: Zero public exploit code exists. The injectable parameter and protocol details are undisclosed. No threat actor has been observed exploiting this. EPSS is not yet scored but will almost certainly land in the bottom decile.
  • Role multiplier: The Eufy Omni C20 / X10 Pro is a *consumer robot vacuum cleaner*. It does not occupy ANY high-value enterprise role — it is not an identity provider, hypervisor, CI/CD component, backup system, database, network edge appliance, EDR agent, SIEM, or OT controller. In a fleet of 10,000 managed hosts, the installed base of Eufy robot vacuums is effectively 0%. Even in the rare case one appears on a corporate network (cleaning service, smart office pilot), it would be on an isolated IoT/guest VLAN. The blast radius is strictly host-level (the vacuum itself) with S:U scope. The high-value-role floor does NOT apply — this component is definitionally a low-value-role device. No deployment scenario produces domain-takeover, fleet-compromise, or supply-chain outcomes.
  • Scope unchanged, device-only impact: Even full compromise yields root on a low-powered ARM embedded Linux device running vacuum firmware. There are no domain credentials, no lateral-movement tooling, and no privileged network position to leverage. The worst realistic outcome is exfiltration of room mapping data — a privacy issue, not an enterprise security incident.

Why not higher?

The CVSS math gives 7.5 because it evaluates the vulnerability in isolation — an adjacent unauthenticated attacker gets full CIA impact. But CVSS doesn't account for the fact that this is a consumer robot vacuum with zero enterprise footprint, zero internet exposure, and exploitation only during a seconds-long pairing window. Nothing about this vulnerability threatens enterprise infrastructure, identity systems, or data at scale. Raising it would require evidence of enterprise deployment or a realistic pivot path, neither of which exists.

Why not lower?

Despite the consumer-device irrelevance, the underlying vulnerability is real — unauthenticated command injection yielding root. If an organization *does* have these devices on a flat network (e.g., a smart-building pilot), the compromised vacuum could theoretically serve as a network foothold. The adjacent-network constraint and pairing-window timing prevent an IGNORE rating; defenders with known Eufy inventory should still patch.

05 · Compensating Control

1
LOW 2.5→IGNORE 0.5
SEVERITY REDUCED
Segment IoT devices onto isolated VLANs with no route to corporate hosts — Place all consumer IoT devices (vacuums, smart speakers, smart TVs) on a dedicated IoT VLAN with ACLs blocking east-west traffic to production subnets. This eliminates any lateral-movement value from a compromised vacuum. Since this is a LOW verdict, there is no noisgate mitigation SLA — treat this as backlog hygiene and implement as part of your standard IoT segmentation program.
2
LOW 2.5→IGNORE 0.0
SEVERITY REDUCED
Enable NAC to block unmanaged IoT devices from joining corporate network segments — Deploy 802.1X or MAC-based NAC policies that quarantine devices with unknown or consumer OUI prefixes (e.g., Ampak Technology 44:A6:E5, C8:B2:9B). This prevents Eufy devices from landing on managed segments in the first place. No mitigation SLA for LOW — standard network hygiene.
3
LOW 2.5→IGNORE 0.0
SEVERITY REDUCED
Push firmware 1.6.4 via Eufy app if devices are present in facilities — If your facilities team actually has Eufy vacuums, have them update firmware to 1.6.4 via the Eufy mobile app's OTA mechanism. This is the definitive fix. No SLA pressure for LOW — treat as backlog.
What doesn't work
  • EDR on corporate endpoints — EDR doesn't run on embedded Linux IoT devices like robot vacuums. It would only help if the attacker pivoted to a managed host, which is a separate detection concern.
  • WAF / reverse proxy — These devices don't expose web services. The attack vector is adjacent-network wireless during pairing, not HTTP.
  • Vulnerability scanners (Nessus, Qualys) — Standard enterprise vuln scanners do not have plugins for Eufy robot vacuum firmware. They won't detect this CVE on your network.
06 · Verification

Crowdsourced verification payload.

Run this on any workstation connected to the same network segment you want to audit. It scans the local ARP table for MAC addresses matching known Eufy/Ampak OUI prefixes. Requires no special privileges on Linux/macOS (arp -a is unprivileged); on Windows, run from a standard Command Prompt. Invoke with: python3 eufy_check.py

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
"""CVE-2026-93289 - Eufy Omni C20 / X10 Pro Network Presence Check
Scans local ARP table for Ampak Technology OUI prefixes used by Eufy IoT devices.
Outputs VULNERABLE (Eufy devices found), PATCHED (N/A), or UNKNOWN.
NOTE: This script detects device PRESENCE, not firmware version.
      Firmware must be verified via the Eufy mobile app.
"""
import subprocess, sys, re, platform

# Ampak Technology OUI prefixes (used by Eufy/Anker IoT devices)
EUFY_OUIS = [
    "44:a6:e5", "c8:b2:9b", "10:27:f5", "d8:1c:14",
    "ac:c1:ee", "48:a4:93", "38:01:46",
]

def get_arp_table():
    try:
        if platform.system() == "Windows":
            out = subprocess.check_output(["arp", "-a"], text=True)
        else:
            out = subprocess.check_output(["arp", "-a"], text=True)
        return out.lower()
    except Exception as e:
        print(f"[!] Could not read ARP table: {e}", file=sys.stderr)
        return None

def main():
    arp = get_arp_table()
    if arp is None:
        print("UNKNOWN - could not read ARP table")
        sys.exit(2)

    found = []
    for line in arp.splitlines():
        for oui in EUFY_OUIS:
            # Match colon, dash, or dot-separated MACs
            oui_dash = oui.replace(":", "-")
            if oui in line or oui_dash in line:
                found.append(line.strip())
                break

    if found:
        print("VULNERABLE - Potential Eufy/Ampak IoT device(s) detected on this network segment:")
        for f in found:
            print(f"  {f}")
        print("\nAction: Verify device identity and firmware version via Eufy mobile app.")
        print("If firmware < 1.6.4, update immediately. Isolate on IoT VLAN.")
        sys.exit(1)
    else:
        print("PATCHED - No Eufy/Ampak OUI devices found in local ARP table.")
        print("Note: This checks presence only. Devices on other VLANs won't appear.")
        sys.exit(0)

if __name__ == "__main__":
    main()
Peer Review

What defenders are saying.

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