Automated Threat Modeling

Brief Summary: Linksys MR9600 CVE-2026-6992 OS Command Injection via JNAP Smart Connect Handler

A look at CVE-2026-6992, an OS command injection bug in the Linksys MR9600 router's JNAP Action Handler. An authenticated attacker can get root-level remote code execution on an end-of-life device with no patch available.

CVE Analysis

6 min read

ZeroPath CVE Analysis
ZeroPath CVE Analysis

2026-04-25

Brief Summary: Linksys MR9600 CVE-2026-6992 OS Command Injection via JNAP Smart Connect Handler
Experimental AI-Generated Content

This CVE analysis is an experimental publication that is completely AI-generated. The content may contain errors or inaccuracies and is subject to change as more information becomes available. We are continuously refining our process.

If you have feedback, questions, or notice any errors, please reach out to us.

[email protected]

Introduction

Scan the internet and you will still find Linksys MR9600 routers exposed on their WAN interfaces. A newly disclosed command injection flaw means any of those running firmware 2.0.6.206937 can be rooted with a single crafted JNAP request. CVE-2026-6992 is worrying for three reasons: the MR9600 reached End of Life on December 11, 2023, the vendor has not responded to the disclosure, and a complete exploit chain including a reverse shell is already public.

Technical Information

The vulnerability is a textbook case of unquoted shell variable expansion leading to OS command injection (CWE-78). The data flow begins at the Linksys JNAP API entry point and passes through several Lua scripts before reaching a shell script that runs attacker-controlled input with no sanitization.

JNAP Request Handling

The JNAP API on Linksys routers uses the X-JNAP-Action HTTP header to route requests to specific handler functions. One operational detail matters here: JNAP requests usually return a 200 OK status code even when errors occur, which can complicate HTTP-based monitoring and detection.

Execution Path

The vulnerable data flow passes through three components:

ComponentFileBehavior
JNAP Entry Pointbtsmartconnect.luaThe btRequestGetSmartConnectStatus function accepts the attacker-controlled pin argument directly from the HTTP request body.
Command Builderbluetooth.luaThe btGetSmartConnectStatus2 function passes the pin to btRunCentralCommand2, which concatenates it into a command string run via io.popen.
Shell Execution/etc/init.d/run_central2.shThe script concatenates arguments into an OPTION variable and runs /usr/bin/btsetup_central $OPTION without quoting, so injected commands run too.

The core issue is in run_central2.sh. Because the $OPTION variable is not quoted when passed to the shell, any shell metacharacters in the pin value break out of the intended command context. A payload shaped like a ; <arbitrary command> ; # runs the arbitrary command as root.

Exploit Preconditions

Two conditions must be met for exploitation to succeed:

  1. Authentication: The attacker must hold valid credentials for the JNAP API. In practice the default credentials (admin/admin) are often left unchanged on consumer deployments, and the public exploit uses these defaults.
  2. Device Mode: The router must be running in Master mode for the vulnerable Bluetooth Smart Connect code path to be reachable.

Attack Flow

The public exploit automates the full chain:

  1. Authenticate to the JNAP API using default or known credentials.
  2. Switch the device into Master mode via a JNAP action, enabling the vulnerable code path.
  3. Send a crafted pin value containing shell metacharacters to the BTRequestGetSmartConnectStatus action, staging a helper CGI script on the filesystem.
  4. Trigger the staged CGI to spawn a reverse shell, granting interactive root access.

Once the script is launched, the whole sequence runs with no manual intervention.

Affected Systems and Versions

The confirmed affected configuration is:

  • Product: Linksys MR9600
  • Firmware Version: 2.0.6.206937
  • Vulnerable Component: JNAP Action Handler, specifically the BTRequestGetSmartConnectStatus function in /etc/init.d/run_central2.sh
  • Required Configuration: Device must be in Master mode, which can be set programmatically via JNAP

The Linksys MR9600 reached End of Life on December 11, 2023. No other firmware versions have been confirmed as affected or unaffected in the available materials.

Vendor Security History

The same firmware version (2.0.6.206937) for the MR9600 contains at least one other documented vulnerability: CVE-2026-4558, which affects the smartConnectConfigure function in SmartConnect.lua. Both flaws sit within the Smart Connect feature set, which points to a pattern of weak input validation across this subsystem rather than an isolated oversight.

Linksys runs a Vulnerability Disclosure Program, but the researchers behind CVE-2026-6992 reported that the vendor was contacted early and never responded. Linksys devices have a history here: The Moon worm exploited authentication bypass flaws in Linksys routers to self-replicate across the internet in 2014.

References

Detect & fix
what others miss

Works with
  • GitHub
  • GitLab
  • Bitbucket
  • Azure DevOps Services
  • Gerrit
  • CVS
  • Jira
  • Linear
  • Slack
  • Security Compass
Explore integrations
Security magnifying glass visualization