This is an automated email from the ASF dual-hosted git repository.
rzo1 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/storm-site.git
The following commit(s) were added to refs/heads/main by this push:
new 0a33a551e7 Add security model
0a33a551e7 is described below
commit 0a33a551e7381bfbda629a2bc79780948c1647cf
Author: Richard Zowalla <[email protected]>
AuthorDate: Mon Apr 13 19:48:45 2026 +0200
Add security model
---
_includes/header.html | 1 +
releases/2.8.6/SECURITY.md | 2 +
security-model.md | 127 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 130 insertions(+)
diff --git a/_includes/header.html b/_includes/header.html
index 2df7941eea..862ff718a9 100644
--- a/_includes/header.html
+++ b/_includes/header.html
@@ -30,6 +30,7 @@
<ul class="nav navbar-nav">
<li><a href="/index.html" id="home">Home</a></li>
<li><a href="/getting-help.html" id="getting-help">Getting
Help</a></li>
+ <li><a href="/security-model.html"
id="security-model">Security</a></li>
<li><a href="/about/integrates.html" id="project-info">Project
Information</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"
id="documentation">Documentation <b
diff --git a/releases/2.8.6/SECURITY.md b/releases/2.8.6/SECURITY.md
index 41cf254f74..c9a76d4c06 100644
--- a/releases/2.8.6/SECURITY.md
+++ b/releases/2.8.6/SECURITY.md
@@ -10,6 +10,8 @@ Apache Storm offers a range of configuration options when
trying to secure
your cluster. By default all authentication and authorization is disabled but
can be turned on as needed.
+For the assumptions, trust boundaries, and scope of what Storm considers a
security vulnerability, see the [Apache Storm Security
Model](/security-model.html). Reading it first is recommended before reporting
security issues.
+
## Firewall/OS level Security
You can still have a secure storm cluster without turning on formal
diff --git a/security-model.md b/security-model.md
new file mode 100644
index 0000000000..e6c5c152a3
--- /dev/null
+++ b/security-model.md
@@ -0,0 +1,127 @@
+---
+layout: default
+title: Security Model
+---
+# Apache Storm Security Model
+
+This document describes the security model of Apache Storm: the assumptions,
trust boundaries, and guarantees the project makes with respect to security. It
is intended to help operators deploy Storm securely and to help security
researchers understand which behaviors are expected and which constitute
genuine vulnerabilities.
+
+For instructions on how to configure Storm's security features, see [Running
Apache Storm Securely](https://storm.apache.org/releases/current/SECURITY.html).
+
+## Reporting Security Vulnerabilities
+
+The Apache Software Foundation takes a very active stance in eliminating
security problems and denial of service attacks against its products. We
strongly encourage people to report security problems privately using the
security mailing list of the ASF Security Team before disclosing them in a
public forum.
+
+Please note that the security mailing list should only be used for reporting
undisclosed security vulnerabilities and managing the process of fixing such
vulnerabilities. We cannot accept regular bug reports or other queries at this
address. All mail sent to this address that does not relate to an undisclosed
security problem in our source code will be ignored.
+
+Before reporting vulnerabilities, please read and understand this security
model. Some potential issues that are valid for internet-facing applications
are expected behavior in Storm's deployment model. Understanding the security
model helps save time for both reporters and the Storm security team.
+
+The private security mailing address is:
[[email protected]](mailto:[email protected])
+
+## Fundamental Assumption: Trusted Deployment Environment
+
+Apache Storm is designed to operate within trusted infrastructure. The
cluster, including Nimbus, Supervisors, Workers, ZooKeeper, the Storm UI, and
the Logviewer, is expected to run on a private network that is not directly
accessible from the public internet. All components are intended to be accessed
only by authorized operators and applications within the trusted network
boundary.
+
+This assumption underpins the entire security model. Many components do not
include defenses against attacks that assume public internet exposure, because
such exposure falls outside the intended deployment model.
+
+## Trusted Configuration
+
+The Storm configuration file (`storm.yaml`) is treated as a fully trusted
input. An actor with write access to `storm.yaml` has effective administrative
control over the entire Storm cluster, including the ability to reconfigure any
component, change authentication and authorization settings, alter network
bindings, and disable security features entirely.
+
+Protecting `storm.yaml` through file system permissions and OS-level access
controls is an operational responsibility. Modification of this file by an
unauthorized party implies a deeper infrastructure compromise and is out of
scope for Storm's runtime security protections.
+
+This applies equally to other configuration files used by Storm, such as
`multitenant-scheduler.yaml`, JAAS configuration files, and DRPC ACL files.
+
+## User Types and Trust Levels
+
+### Deployment Managers / Cluster Administrators
+
+Deployment managers have the highest level of access and control. They install
and configure Storm, manage `storm.yaml`, and make decisions about
authentication, authorization, and network topology. They are trusted with full
control of the cluster. Their responsibilities include securing the
configuration files, setting up appropriate authentication mechanisms,
restricting network access to cluster components, and configuring reverse
proxies where necessary.
+
+### Topology Submitters
+
+Users who submit topologies execute arbitrary code on Storm workers. This
model inherently trusts topology submitters; they can run any code within the
context of the worker process. When multi-tenancy is required, the multi-tenant
scheduler and `supervisor.run.worker.as.user` settings provide OS-level
isolation, but topology submitters must still be authorized and trusted users.
+
+Access to topology submission should be restricted to trusted users via
Kerberos authentication and the `SimpleACLAuthorizer` (or equivalent), and
further limited through `nimbus.users` and `nimbus.groups`.
+
+### UI / API Users
+
+Users who access the Storm UI or REST API can view cluster state and,
depending on authorization, perform state-changing operations such as killing,
activating, deactivating, or rebalancing topologies. Authenticated UI users
with administrative privileges are trusted to perform these operations. The
Storm UI does not guarantee protection against actions initiated by the
authenticated user themselves.
+
+## Storm UI, Logviewer, and DRPC HTTP
+
+### Not Internet-Facing
+
+The Storm UI (default port 8080), Logviewer (default port 8000), and DRPC HTTP
endpoint are internal cluster services. They must not be exposed to the public
internet. Operators should restrict access to these ports using firewall rules,
limiting connections to trusted hosts within the cluster network.
+
+### Reverse Proxy Recommended
+
+For production deployments, these services should be placed behind a reverse
proxy such as Apache httpd or nginx. The reverse proxy should provide TLS
termination with current cipher suites, CSRF token validation or same-origin
enforcement, security response headers (`X-Frame-Options`,
`X-Content-Type-Options`, `Content-Security-Policy`,
`Strict-Transport-Security`), rate limiting and request filtering, and
centralized access logging.
+
+### CORS and Same-Origin Policy
+
+The Storm UI sets permissive CORS headers (`Access-Control-Allow-Origin: *`)
by default. This is acceptable within the trusted network model where the UI is
not internet-accessible. Operators who need stricter origin controls should
configure them at the reverse proxy layer. This is documented behavior, not a
vulnerability.
+
+### CSRF Protection
+
+The Storm UI REST API does not include built-in Cross-Site Request Forgery
protection. Because the UI is designed to be accessible only from within a
trusted network, CSRF risk is mitigated by network-level access controls.
Operators requiring additional CSRF protection should configure it via their
reverse proxy or a custom servlet filter through `ui.filter`. We do strive to
follow HTTP semantics (using POST for state-changing operations) and welcome
hardening reports in this area.
+
+### Authentication
+
+By default, the Storm UI has no authentication enabled. Operators should
configure a servlet filter via `ui.filter` (for example, using Kerberos/SPNEGO
via `AuthenticationFilter` from hadoop-auth) or rely on their reverse proxy for
authentication. The Storm UI is not safe to operate without authentication if
any untrusted user can reach it.
+
+## Logs and Information Disclosure
+
+Storm logs may contain sensitive information including stack traces with
internal paths and class names, configuration values, topology data, and
credentials or tokens if passed through tuple data. Logs are not intended to be
safe for exposure to untrusted users. Access to the Logviewer should be
restricted to authorized operators through the same mechanisms used for the UI
(authentication filters, network restrictions, or reverse proxy controls). The
`logs.users` and `logs.groups` setti [...]
+
+## Authentication and Authorization
+
+Storm provides pluggable authentication via Kerberos/SASL and pluggable
authorization via `SimpleACLAuthorizer`. By default, both are disabled.
Operating Storm without authentication and authorization is only appropriate in
fully trusted, single-tenant environments where all network access is
controlled. In multi-tenant or security-sensitive deployments, operators must
enable Kerberos authentication, configure `SimpleACLAuthorizer` on Nimbus,
configure `ImpersonationAuthorizer` if impers [...]
+
+Storm does not protect against brute-force password guessing or account
enumeration. These protections should be provided at the infrastructure level
(Kerberos KDC configuration, network controls, or reverse proxy rate limiting).
+
+## Impersonation
+
+Storm supports user impersonation (submitting requests on behalf of another
user). Without `nimbus.impersonation.authorizer` configured, any authenticated
user can impersonate any other user. When deploying a secured cluster,
operators must always configure `nimbus.impersonation.authorizer` alongside
`nimbus.authorizer`.
+
+## Serialization
+
+Storm uses Kryo for tuple serialization. The setting
`topology.fall.back.on.java.serialization` must not be set to `true` in
production, as Java native deserialization is vulnerable to arbitrary code
execution from untrusted data. Storm defaults to requiring explicit class
registration, which is the safe configuration.
+
+## ZooKeeper Communication
+
+When ZooKeeper SSL is enabled, hostname verification is disabled by default
(`storm.zookeeper.ssl.hostnameVerification: false`). Without hostname
verification, a man-in-the-middle attacker with any valid CA-signed certificate
could intercept Storm-to-ZooKeeper communication. Production deployments should
enable hostname verification.
+
+## Network Encryption
+
+Storm supports TLS for Thrift RPC communication (Nimbus, Supervisors) and
Netty messaging (worker-to-worker) via mTLS. Enabling transport encryption is
recommended for deployments where network traffic may traverse untrusted
segments. The deprecated `BlowfishTupleSerializer` should not be used; it
employs a 64-bit block cipher vulnerable to birthday attacks.
+
+## Test Utilities in Production JARs
+
+Storm includes certain classes intended for development and testing (such as
`TestingFilter`) in its production JAR. These classes can be enabled through
`storm.yaml` configuration. Since `storm.yaml` is a trusted input, the ability
to enable test utilities through configuration is not a security vulnerability;
it is equivalent to any other configuration change an administrator can make.
However, operators should be aware that misconfiguring these settings can
weaken security.
+
+## What Is and Is Not a Security Vulnerability
+
+Based on this security model, the following are **not** considered security
vulnerabilities:
+
+- Issues that require write access to `storm.yaml` or other trusted
configuration files.
+- Issues that require the Storm UI, Logviewer, or DRPC HTTP endpoints to be
exposed to the public internet, contrary to deployment guidance.
+- Permissive default CORS headers on internal services that are not intended
to be internet-facing.
+- Absence of built-in CSRF protection on internal services behind
network-level access controls.
+- Information disclosure through logs or API endpoints that are restricted to
trusted network access.
+- Enabling test utilities through configuration (which requires trusted
configuration access).
+- Version disclosure on internal endpoints.
+
+The following **are** considered security vulnerabilities and should be
reported:
+
+- Authentication or authorization bypass that does not require trusted
configuration access.
+- Privilege escalation within the authorization model (for example, a
non-admin user gaining admin capabilities without configuration changes).
+- Remote code execution through untrusted input processed by Storm components
(not topology code submitted by trusted users).
+- Issues that compromise the security of a cluster deployed according to our
documented recommendations.
+
+We welcome security hardening suggestions even for areas outside the formal
vulnerability scope. Reports that improve HTTP semantics compliance, add
defense-in-depth measures, or improve the security posture of the default
configuration are appreciated and will be addressed as hardening improvements.
+
+## Questions About Known Security Problems
+
+Questions about whether a vulnerability applies to your particular deployment,
obtaining further information on a published vulnerability, or availability of
patches and new releases should be addressed to the [dev mailing
list](https://storm.apache.org/community.html).
+