TOCTOU Root Privilege Escalation in Apache Storm worker-launcher (Docker/OCI Workers)
CVSS 3.1
7.8high
EPSS
—
Published
()
Modified
AI analysis
Apache Storm's setuid-root worker-launcher contains a time-of-check-to-time-of-use race (CWE-367) when starting Docker or OCI workers: it first chowns the entire worker directory to the untrusted topology user and only then reads the supervisor's command file from that same directory, opening it without O_NOFOLLOW and without re-verifying its owner, so the tenant can swap the file's contents in that window. On the Docker path the rewritten command executes with real uid 0 and the argument sanitiser is not a privilege boundary — it admits -v with an arbitrary host source, --device, --cap-add, --security-opt, --user and --net — yielding an attacker-authored, root-equivalent container invocation with the host filesystem available. The OCI path has the same rewrite window with only structural mount validation and no source/destination allow-list, allowing arbitrary host paths to be bind-mounted read-write into the container, and the attacker-settable username field (checked only against non-root and minimum-uid rules) permits execution as another tenant's uid. Affected installations are Apache Storm clusters prior to 3.1.0 that use Docker or OCI worker isolation where topology submitters are not fully trusted; exploitation requires the attacker to already have topology-submission/tenant access on the cluster, so this is a local privilege escalation rather than a remote attack. No CVSS score has been assigned, no public proof of concept is known, the issue is not in the CISA KEV, and there is no evidence of in-the-wild exploitation.
What to do: Upgrade to Apache Storm 3.1.0 and then rebuild and reinstall the setuid worker-launcher binary on every supervisor node — the fix is not effective until the launcher is reinstalled. If immediate upgrade is not possible, disable Docker and OCI worker isolation, or restrict topology submission on affected supervisors to trusted principals only. Operators should also review worker nodes for unexpected root-run containers, suspicious read-write bind mounts of host paths, and topology submissions from non-trusted accounts.
Affected
Apache Storm
prior to 3.1.0 (< 3.1.0), where the Docker/OCI worker-launcher path is used; fixed in 3.1.0
Estimated exposure
moderatelikely a few thousand Storm clusters / on the order of 1,000–10,000 cluster nodes, with the truly exploitable subset (Docker/OCI worker isolation plus… — Apache Storm is a specialized ASF stream-processing framework deployed mostly on internal enterprise clusters (public scans typically show only a few hundred internet-exposed Storm UIs), and the vulnerable Docker/OCI worker-isolation path…
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Description
Description When launching a Docker or OCI worker, the setuid-root `worker-launcher` first changes ownership of the entire worker directory to the untrusted topology user, and only afterwards reads and acts on the command file that the supervisor wrote into that same directory. The file is opened without `O_NOFOLLOW` and without re-verifying its owner, so between the ownership change and the read the tenant can replace its contents. For the Docker path the parsed command is executed with real uid 0, and the command sanitiser is not a privilege boundary: it admits `-v` with an arbitrary source, `--device`, `--cap-add`, `--security-opt`, `--user` and `--net`, and copies positional arguments through verbatim. A rewritten file therefore yields an attacker-authored, root-equivalent container invocation with the host filesystem available. For the OCI path the same rewrite window applies, and mount validation is structural only, with no source or destination allow-list, so arbitrary host paths can be bind-mounted read-write into the container. The `username` field of the command file is likewise attacker-settable and is checked only against non-root and minimum-uid rules, permitting execution as another tenant's uid. Mitigation Upgrade to 3.1.0, where the command file is validated before the ownership change and re-verified on open, and where mount sources and destinations are constrained by configuration. Users who cannot upgrade immediately should disable Docker and OCI worker isolation, or restrict topology submission on affected supervisors to trusted principals. Note that the launcher must be rebuilt and reinstalled after upgrading. Credit The ASF -- found using Claude agents to study the security of open-source projects, validated and reported by Apache Storm.
Setuid-root Apache Storm worker-launcher chowns worker directory to the tenant before reading its command file, enabling local root privilege escalation.
CVE-2026-82430 affects Apache Storm Worker Launcher (org.apache.storm:storm-core) versions 3.0.0 before 3.1.0, rated important. When launching Docker or OCI workers, the setuid-root worker-launcher transfers ownership of the entire worker directory to the untrusted topology user before reading and acting on the supervisor-written command file in that directory. An untrusted tenant can tamper with the command file to achieve local privilege escalation to root. Fixed in version 3.1.0.