CVE-2026-82438
HighCVSS 8.1Exploitation Probability (EPSS)
Low risk10th percentile - higher than 10% of all known CVEs
Summary
Three separate mechanisms in Apache Storm's HTTP components allowed a web page on an unrelated origin to read responses served to an authenticated user. The Logviewer reflected the request's Origin header in Access-Control-Allow-Origin while also sending Access-Control-Allow-Credentials: true, the shared CORS filter was misconfigured (a response header name was supplied where an initialisation parameter name was expected, so the container applied its own credential-allowing defaults), and the UI and Logviewer wrapped API responses in a caller-supplied JSONP callback for every GET request. In each case, a page visited by an authenticated operator can read cluster, topology and log data on their behalf.
Risk Assessment
An attacker can lure an authenticated operator to a malicious page and exfiltrate cluster, topology and log data, potentially enabling further attacks on the infrastructure. The risk is especially relevant when the UI, Logviewer and DRPC endpoints are reachable from untrusted networks.
Recommendation
Upgrade Apache Storm to 3.1.0, where the Logviewer no longer reflects the request origin in a credentialed response, the CORS filter is configured explicitly, and JSONP wrapping is governed by ui.enable.jsonp (defaults to false). If an immediate upgrade is not possible, place the UI, Logviewer and DRPC HTTP endpoints behind a reverse proxy that strips Access-Control-Allow-Origin and Access-Control-Allow-Credentials from responses and rejects requests carrying a callback parameter.
Other vulnerabilities in Apache Storm
See all- CVE-2014-0115High
Directory traversal vulnerability in the log viewer in Apache Storm 0.9.0.1 allows remote attackers to read arbitrary files via a .. (dot dot) in the file parameter to log.
- CVE-2026-82435Critical
In Apache Storm before 3.1.0, a vulnerability exists: the Netty decoder is installed before authentication and processes frames without verification, allowing an unauthenticated attacker to allocate large buffers and potentially cause memory pressure on workers.
- CVE-2026-82431Critical
In Apache Storm's SimpleACLAuthorizer, authorization returned early when nimbus.users was empty, skipping evaluation of nimbus.groups. As a result, a cluster restricted by group alone allowed every authenticated principal to perform all user-level operations, including submitTopology, beginFileUpload and getNimbusConf. The issue is fixed in version 3.1.0.
- CVE-2026-82441Critical
A vulnerability in Apache Storm allows a topology submitter to delete blobs belonging to other topologies by listing their keys in `dependency_jars` and `dependency_artifacts`. Additionally, missing validation can cause Nimbus to fail to retain leadership, rendering the cluster inoperative.
- CVE-2026-82439Critical
The DRPC server in Apache Storm keeps a map from function names to request queues, and entries are never removed. An attacker can send arbitrary function names without authentication (as `drpc.authorizer` is disabled by default), leading to unbounded memory growth and eventual heap exhaustion.
- CVE-2015-3188Critical
The UI daemon in Apache Storm 0.10.0 before 0.10.0-beta1 allows remote attackers to execute arbitrary code via unspecified vectors.
- CVE-2026-82434Medium
When ZooKeeper authentication is configured, Storm deliberately retains storm.zookeeper.topology.auth.payload in the topology configuration, and Nimbus serves that configuration to any caller with read-only topology permissions. A user granted only topology view access receives the ZooKeeper credential, which is write-capable and allows forging or removing topology state. The credential also reaches logs (INFO in the submission client, DEBUG in SASL handlers), and version 3.1.0 removes it from the served configuration and logs.
- CVE-2026-82433Medium
In Apache Storm before 3.1.0, the getNimbusConf function returns full configuration without redaction, and the UI endpoint /api/v1/cluster/configuration lacks proper authorization, potentially exposing passwords and keys.
- CVE-2026-82432High
In Apache Storm before 3.1.0, the rebalance operation does not revalidate the blobstore map for permissions, and listBlobs lacks authorization checks, allowing an authorized user to access disallowed blobs and disclose metadata.
- CVE-2026-82430High
In CVE-2026-82430 in Apache Storm, the setuid-root `worker-launcher` first changes ownership of the entire worker directory to the untrusted topology user and only afterwards reads the command file written into that directory. The file is opened without `O_NOFOLLOW` and without re-verifying its owner, so the tenant can replace its contents in the window between the ownership change and the read. On the Docker path the rewritten command is executed with real uid 0, and on the OCI path arbitrary host paths can be bind-mounted read-write into the container.
Original NVD description (English source)
Description Three separate mechanisms allowed a web page on an unrelated origin to read responses that Storm's HTTP components served to an authenticated user. The Logviewer reflected the request's `Origin` header back in `Access-Control-Allow-Origin` while also sending `Access-Control-Allow-Credentials: true`. The published security model documents a permissive `Access-Control-Allow-Origin: *` posture as accepted, which is safe precisely because browsers refuse to honour `*` together with credentials; reflecting the concrete origin removes that protection. The shared CORS filter used by the UI, the Logviewer and DRPC was configured with a response header name where an initialisation parameter name was expected. The container ignored the setting and applied its own defaults, which allow credentials. Finally, the UI and Logviewer wrapped API responses in a caller-supplied JSONP callback for every GET request. A script element on any origin can load such a response, which bypasses the same-origin policy entirely rather than negotiating it, and there was no way to turn the behaviour off. In each case the effect is that a page visited by an authenticated operator can read cluster, topology and log data on their behalf. Mitigation Upgrade to 3.1.0, where the Logviewer no longer reflects the request origin in a credentialed response, the CORS filter is configured explicitly, and JSONP wrapping is governed by `ui.enable.jsonp`, which defaults to false. Note that disabling JSONP is a behaviour change for tooling that passes a `callback` query parameter; such tooling should be moved to ordinary JSON requests. Users who cannot upgrade immediately should place the UI, Logviewer and DRPC HTTP endpoints behind a reverse proxy that strips `Access-Control-Allow-Origin` and `Access-Control-Allow-Credentials` from responses and rejects requests carrying a `callback` parameter. Credit The ASF -- found using Claude agents to study the security of open-source projects, validated and reported by Apache Storm.

