Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2026-69096

CVE-2026-69096: OpenWrt luci-app-dockerman RCE Flaw

CVE-2026-69096 is a remote code execution vulnerability in OpenWrt luci-app-dockerman allowing authenticated attackers to execute arbitrary commands as root. This post covers technical details, affected versions, and mitigation.

Published:

CVE-2026-69096 Overview

CVE-2026-69096 is an OS command injection vulnerability in OpenWrt's luci-app-dockerman package, specifically in the ucode docker_rpc.uc RPC backend introduced after the JS/ucode conversion. The package's read ACL grants broad ubus access to docker.* and docker.container.*, exposing the docker.container.ttyd_start method despite its mutating behavior. An authenticated attacker holding only the read ACL can inject shell metacharacters via the id, cmd, or uid fields of an HTTP POST to /ubus and execute arbitrary commands as root [CWE-78].

Critical Impact

Any authenticated LuCI user with only the luci-app-dockerman read ACL can achieve remote root code execution on the OpenWrt device.

Affected Products

  • OpenWrt luci-app-dockerman on LuCI master snapshots
  • OpenWrt luci-app-dockerman on openwrt-25.12 snapshots containing the ucode docker_rpc.uc backend
  • OpenWrt 24.10 and 23.05 are not affected (backend not present)

Discovery Timeline

  • 2026-08-03 - CVE-2026-69096 published to NVD
  • 2026-08-05 - Last updated in NVD database

Technical Details for CVE-2026-69096

Vulnerability Analysis

The vulnerability lives in the run_ttyd handler of the ucode docker_rpc.uc RPC backend that ships with luci-app-dockerman. The handler constructs a shell command string from the request-controlled fields id, cmd, and uid, then passes that string to system() in the rpcd root context. The backend performs no quoting, escaping, or argv-style execution before invocation.

Because rpcd runs as root on OpenWrt, any shell metacharacter injected into the id parameter is executed with full root privileges. The attack requires only network reachability to /ubus and an authenticated session with the luci-app-dockerman read ACL. The read ACL was intended to expose non-mutating container inspection operations, but the ACL grants broad docker.container.* access that reaches the mutating ttyd_start method.

Root Cause

Two defects combine to produce the impact. First, the read ACL is over-broad: docker.container.ttyd_start is a state-changing RPC method but is reachable through the read-only grant. Second, run_ttyd performs string concatenation of untrusted request fields into a shell command string handed to system(), rather than invoking the target binary with a fixed argv list.

Attack Vector

An authenticated attacker sends an HTTP POST to /ubus invoking docker.container.ttyd_start. Supplying a payload such as ; id # in the id field causes the shell to interpret the metacharacters, executing attacker commands as root before ttyd is invoked. No prior container knowledge or write privilege is required.

No synthetic exploit code is included here. See the GitHub Security Advisory GHSA-cq4h-h8jr-3xqv and the VulnCheck Advisory on OpenWRT Remote Code Execution for exploit mechanics.

Detection Methods for CVE-2026-69096

Indicators of Compromise

  • HTTP POST requests to /ubus invoking the docker.container.ttyd_start method with unusual characters (;, |, `, $() in the id, cmd, or uid fields.
  • Unexpected child processes of rpcd or uhttpd running shells, wget, curl, nc, or busybox applets not associated with ttyd.
  • New cron entries, SSH authorized_keys modifications, or /etc/rc.local edits appearing after ubus activity from LuCI sessions.

Detection Strategies

  • Inspect uhttpd and rpcd logs for ubus calls to docker.container.ttyd_start correlated with low-privilege LuCI accounts.
  • Alert on system()-spawned processes from rpcd whose command lines contain shell metacharacters or reference unexpected binaries.
  • Baseline outbound network connections from the router; any egress from a shell parented by rpcd warrants investigation.

Monitoring Recommendations

  • Forward logread output and /var/log/ contents to a central collector to preserve evidence across reboots.
  • Monitor the luci-app-dockerman ACL file /usr/share/rpcd/acl.d/luci-app-dockerman.json for unauthorized modifications.
  • Track authentication events for LuCI users granted the luci-app-dockerman read ACL and review session origins.

How to Mitigate CVE-2026-69096

Immediate Actions Required

  • Remove luci-app-dockerman from master and openwrt-25.12 snapshot builds until a patched release is available.
  • Revoke the luci-app-dockerman read ACL from all non-administrative LuCI accounts.
  • Restrict network access to the LuCI/uhttpd interface to trusted management networks only.
  • Rotate credentials for any account that previously held the read ACL and audit for signs of exploitation.

Patch Information

No patched version was known as of the advisory publication. Track upstream fixes via the OpenWrt LuCI repository and referenced commits 44618b5 and f4d0a44.

Workarounds

  • Uninstall the package: opkg remove luci-app-dockerman on affected snapshot builds.
  • Manually edit /usr/share/rpcd/acl.d/luci-app-dockerman.json to remove docker.container.ttyd_start from the read grant, then restart rpcd with /etc/init.d/rpcd restart.
  • Downgrade to openwrt-24.10 or openwrt-23.05, which do not ship the vulnerable ucode backend.
  • Firewall the LuCI HTTP/HTTPS ports so /ubus is unreachable from untrusted VLANs and the WAN.

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.