← Back to Feed CACHED · 2026-11-04 02:56:19 · CACHE_KEY CVE-2026-121607
CVE-2026-121607 · CWE-77 · Disclosed 2026-11-04

Qihoo 360 D-series smart camera iscm testspeed_command OS command injection [pre-auth]

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

A remote shell in a camera you forgot was on the network

Qihoo 360 D603-2, D600-2, D606-6, and D706 smart cameras running firmware up to 6.4.9 contain an OS command injection in the testspeed_command function of /fs2/bin/iscm. An attacker can manipulate the host argument to inject arbitrary shell commands, leading to remote code execution on the camera's embedded Linux OS.

The vendor rates this CRITICAL 10.0, but the real-world severity is tempered by the fact that these are four specific consumer/SMB camera models, not enterprise infrastructure. Most deployments sit behind NAT or cloud relay, so direct internet exposure is low. However, the vulnerability requires no authentication, has low complexity, and a public exploit exists with no vendor patch — so any exposed or flat-network camera is an immediate foothold. Assessed as HIGH, not Critical, because the affected population is narrow and the device is not a high-value asset, but unauthenticated RCE with no patch demands quick segmentation.

"Unpatched pre-auth command injection in Qihoo 360 cameras is a remote shell if exposed—segment them now."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a reachable Qihoo 360 camera

Attacker scans for exposed D603-2/D600-2/D606-6/D706 devices using Shodan, Censys, or internal network discovery. The camera's web management interface (typically HTTP/HTTPS) or cloud relay may reveal model and firmware.
Conditions required:
  • Network access to the camera's management interface or LAN
  • Camera not isolated by VLAN/firewall
Where this breaks in practice:
  • Most cameras are behind NAT/firewall, not directly internet-facing
  • Cloud relay does not directly expose the local /fs2/bin/iscm binary
Detection/coverage: Shodan/Censys can identify exposed devices; internal scanners see them in inventory
STEP 02

Send crafted speed-test request

The attacker submits an HTTP request to the speed-test endpoint with a host parameter containing shell metacharacters (e.g., ; rm -rf /tmp/x;). The testspeed_command function passes the parameter to a shell without sanitization, triggering command injection.
Conditions required:
  • No authentication required (per CVSS)
  • Vulnerable firmware ≤6.4.9
  • Attacker can reach the vulnerable endpoint
Where this breaks in practice:
  • Some deployments may have disabled the speed-test feature or blocked the endpoint
  • WAF/IPS may flag obvious command injection patterns if traffic is inspected
Detection/coverage: No vendor signature exists; generic command-injection detection in WAF/IDS may catch obvious payloads
STEP 03

Achieve OS command execution as root

The injected command runs as the camera's OS user (often root on embedded Linux). This yields a reverse shell, file system access, and control of the camera.
Conditions required:
  • Injection is not blocked by input validation
  • Camera process has sufficient privileges (root)
Where this breaks in practice:
  • None if the endpoint is reachable and unpatched—this step is reliable once exploit is public
Detection/coverage: Endpoint detection is unlikely on camera; network egress monitoring may see reverse shell
STEP 04

Pivot, exfiltrate video, or join botnet

With a shell on the camera, the attacker can access live/recorded video, use the camera as a pivot to reach other devices on the same network, or add it to an IoT botnet for DDoS or cryptomining.
Conditions required:
  • Camera resides on a network with other reachable hosts
  • Outbound network from camera allows command-and-control
Where this breaks in practice:
  • VLAN segmentation limits lateral movement
  • If the camera is on an isolated IoT VLAN, impact is contained to video/audio
Detection/coverage: NDR/SIEM may see unusual outbound connections or lateral movement from camera IP
03 · Compensating Control

1
HIGH 7.5→MEDIUM 5.0
SEVERITY REDUCED
Isolate cameras on a dedicated VLAN — Segment all Qihoo 360 D-series cameras from corporate assets; allow only necessary cloud/RTSP traffic. Deploy within 30 days per noisgate mitigation SLA for HIGH.
2
HIGH 7.5→LOW 3.0
SEVERITY REDUCED
Block access to the vulnerable endpoint — Use L7 firewall or camera config to disable speed-test feature or block /fs2/bin/iscm from untrusted sources. Deploy within 30 days.
3
HIGH 7.5→HIGH 7.0
Monitor for suspicious camera traffic — Enable egress logging and SIEM alerts for reverse shells or unusual destinations from camera IPs. Deploy within 30 days; does not prevent exploit but enables rapid containment.
4
HIGH 7.5→IGNORE 0.0
SEVERITY REDUCED
Replace or isolate if no patch by 90 days — If vendor remains unresponsive, plan to replace affected cameras or keep them permanently isolated. Decommissioning removes the vulnerability. Use as remediation fallback.
What doesn't work
  • Traditional antivirus or EDR on the camera — embedded Linux devices rarely have agents; no protection.
  • Blocking inbound internet only — outbound reverse shells still work if camera can reach attacker.
  • Firmware signature verification — this is a separate issue; it doesn't mitigate command injection.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo known active exploitation or CISA KEV listing as of 2026-11-04
PoC availabilityPublic exploit exists per disclosure; no named GitHub repos or researchers confirmed in search results
EPSS scoreEPSS score not populated for this CVE; likelihood of exploitation is moderate given public PoC but no observed mass scanning
KEV statusNot listed in CISA KEV
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — assumes direct network access and changed scope; actual scope may be lower if camera isolated
Affected versionsQihoo 360 D603-2, D600-2, D606-6, D706 firmware ≤6.4.9
Fixed versionsNone published; vendor contacted but did not respond
Scanning/exposure dataNo GreyNoise/Shodan fingerprint confirmed; typical IP camera internet exposure is <5% for these consumer models
Disclosure date2026-11-04
Reporting researcher/orgNot named in public record; VulDB submission

Sources.

  1. Rapid7 Vulnerability Database
  2. OpenCVE vendor page
  3. VulDB related submission
  4. instantCVE
  5. ZeroDay Signal
  6. OpenCVE mirror
05 · The Call

Final Verdict
↓ DOWNGRADED to HIGH (7.5/10)

Why this verdict

  • Friction audit: Unauthenticated remote, but requires direct network path; most cameras are NAT'd, so reachable population is small.
  • Role multiplier: Device is a low-value IoT camera; compromise yields camera shell/video, not domain/fleet/identity impact. No high-value role floor triggered because these models are not canonical high-value components (not in IdP/hypervisor/edge class).
  • Public exploit + no patch: Exploit is public and vendor unresponsive, so exposed devices are at immediate risk; keeps severity above medium.

Why not higher?

Not Critical because the affected product line is a set of consumer/SMB smart cameras with limited enterprise deployment and low internet exposure. The high-value role catalog doesn't apply; worst plausible outcome is camera compromise/pivot, not domain takeover or fleet-scale supply chain.

Why not lower?

Not Medium because the vulnerability is unauthenticated, low complexity, and has a public exploit with no vendor patch. If one of these cameras is exposed or on a flat enterprise network, it provides an immediate foothold for lateral movement.

06 · Verification

Crowdsourced verification payload.

Run on a network scanner host with access to the camera management VLAN. Pass one or more IP addresses as arguments; the script probes HTTP/HTTPS root pages and attempts to fingerprint Qihoo 360 camera firmware. No root required; requires outbound TCP 80/443 to targets. Example: python3 check_cve-2026-121607.py 192.168.1.10 192.168.1.11

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
import sys, http.client, ssl, re

def check_host(ip, port=80, use_ssl=False):
    try:
        conn = http.client.HTTPConnection(ip, port, timeout=5) if not use_ssl else http.client.HTTPSConnection(ip, port, timeout=5, context=ssl._create_unverified_context())
        conn.request("GET", "/", headers={"User-Agent":"Mozilla/5.0"})
        resp = conn.getresponse()
        body = resp.read(1024).decode(errors='ignore')
        conn.close()
        # Look for Qihoo 360 camera signatures and firmware version
        if 'Qihoo' in body or '360' in body or 'D603' in body or 'D600' in body or 'D606' in body or 'D706' in body:
            m = re.search(r'firmware[^\d]*(\d+\.\d+(?:\.\d+)?)', body, re.I)
            if m:
                ver = m.group(1)
                if tuple(map(int, ver.split('.'))) <= (6,4,9):
                    return 'VULNERABLE'
                else:
                    return 'PATCHED'
            else:
                return 'UNKNOWN'
        else:
            return 'UNKNOWN'
    except Exception:
        return 'UNKNOWN'

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python3 check_cve-2026-121607.py <ip> [ip ...]")
        sys.exit(2)
    vulnerable = False
    for ip in sys.argv[1:]:
        result = check_host(ip)
        if result == 'VULNERABLE':
            vulnerable = True
        print(f"{ip}: {result}")
    sys.exit(0 if vulnerable else 1)