This is an automated email from the ASF dual-hosted git repository.

frankgh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git


The following commit(s) were added to refs/heads/trunk by this push:
     new df6b4fb46c Establish the Security Model for Cassandra
df6b4fb46c is described below

commit df6b4fb46cc0b4f67696d4858be2d54e4acb0940
Author: Francisco Guerrero <[email protected]>
AuthorDate: Mon May 18 17:05:10 2026 -0700

    Establish the Security Model for Cassandra
    
    patch by Francisco Guerrero; reviewed by Stefan Miklosovic for 
CASSANDRA-21392
---
 doc/modules/cassandra/pages/reference/index.adoc   |   3 +-
 .../cassandra/pages/reference/security-model.adoc  | 628 +++++++++++++++++++++
 2 files changed, 630 insertions(+), 1 deletion(-)

diff --git a/doc/modules/cassandra/pages/reference/index.adoc 
b/doc/modules/cassandra/pages/reference/index.adoc
index 642b9e0810..1879b8d463 100644
--- a/doc/modules/cassandra/pages/reference/index.adoc
+++ b/doc/modules/cassandra/pages/reference/index.adoc
@@ -6,4 +6,5 @@
 * xref:reference/native-protocol.adoc[Native Protocol specification]
 * xref:reference/sai-virtual-table-indexes.adoc[SAI virtual table]
 * xref:reference/static.adoc[Static columns]
-* xref:reference/vector-data-type.adoc[Vector data type]
\ No newline at end of file
+* xref:reference/vector-data-type.adoc[Vector data type]
+* xref:reference/security-model.adoc[Security Model]
diff --git a/doc/modules/cassandra/pages/reference/security-model.adoc 
b/doc/modules/cassandra/pages/reference/security-model.adoc
new file mode 100644
index 0000000000..c47cfad741
--- /dev/null
+++ b/doc/modules/cassandra/pages/reference/security-model.adoc
@@ -0,0 +1,628 @@
+= Apache Cassandra Security Model
+
+== Overview
+
+This document outlines the security model for Apache Cassandra, identifying 
potential security threats,
+trust boundaries, and the security controls that protect against them. *This 
threat model assumes
+that Apache Cassandra has been configured correctly from a security point of 
view, with its strongest
+security settings applied*, including authentication (password-based or mutual 
TLS-based),
+authorization (`CassandraAuthorizer`), TLS encryption for all communication 
channels
+(client-to-node and node-to-node), and JMX bound to the local interface only 
with Cassandra integrated
+authentication. Threats are evaluated against this hardened baseline -- not 
against Cassandra's
+out-of-the-box defaults. Vulnerability reports that do not adhere to the 
assumptions outlined in this
+document may not be accepted.
+
+This threat model is informed by
+https://cassandra.apache.org/doc/latest/cassandra/operating/security.html[Cassandra's
 own security documentation].
+
+== System Architecture
+
+Apache Cassandra is a distributed NoSQL database system with the following key 
components:
+
+* *Client Applications*: Applications that connect to Cassandra via the CQL 
binary protocol to
+  read/write data
+* *Client Drivers*: Official Apache Cassandra drivers (e.g., Java driver, 
Python driver) that
+  implement the CQL binary protocol on behalf of client applications
+* *Cassandra Nodes*: Individual database servers forming a peer-to-peer cluster
+* *Inter-node Communication*: Gossip protocol and data replication channels 
between Cassandra nodes
+* *Storage Layer*: On-disk SSTables, commit logs, and hints
+* *JMX Interface*: Java Management Extensions interface for monitoring and 
administration
+* *System Keyspaces*: Internal keyspaces (e.g., `system_auth`, 
`system_schema`) that store cluster
+  metadata, authentication, and authorization data
+
+== Root of Trust
+
+The root of trust for a Cassandra deployment converges to:
+
+* *The infrastructure operator*: The party responsible for provisioning and 
maintaining the underlying
+  hardware, operating system, JVM, and network infrastructure on which 
Cassandra runs
+* *The Cassandra distribution*: The integrity of the Apache Cassandra software 
itself, verified through
+  official Apache release signatures and checksums (signed with keys from the
+  https://downloads.apache.org/cassandra/KEYS[Apache Cassandra PMC KEYS file])
+* *The JVM*: Cassandra runs on the Java Virtual Machine; the security 
properties of the JVM (including
+  its TLS implementation, cryptographic providers, and sandboxing) are assumed 
to be correct
+
+Before deploying Cassandra in a security-sensitive environment, operators 
should verify the authenticity
+of the distribution and ensure the underlying infrastructure meets their trust 
requirements.
+
+== User Types
+
+Apache Cassandra distinguishes the following user types with different trust 
levels:
+
+=== Trusted Users
+
+* *Infrastructure Operators / Administrators*: Users with OS-level access to 
nodes running Cassandra.
+  They have access to configuration files (`cassandra.yaml`, 
`cassandra-env.sh`), data directories, JMX
+  interfaces, and can start/stop nodes. These users are fully trusted. It is 
the responsibility of the
+  organization to restrict who holds this role guided by the principle of 
least privilege.
+* *Database Administrators (Superusers)*: Users with Cassandra superuser 
roles. They can
+  create/alter/drop roles, keyspaces, and tables, and grant/revoke 
permissions. They are trusted within
+  the CQL authorization model but should not require OS-level access.
+* *Application Developers*: Users who write applications that connect to 
Cassandra. They are trusted
+  to use the CQL API correctly, construct safe queries, and manage credentials 
securely within their
+  applications.
+
+=== Untrusted Users
+
+* *Database Users (Non-superuser Roles)*: Authenticated users with limited, 
explicitly granted
+  permissions. They are not trusted beyond the permissions assigned to their 
role. The authorization
+  subsystem (`CassandraAuthorizer`) enforces their access boundaries.
+* *Unauthenticated Network Actors*: Any party with network access to 
Cassandra's client or
+  inter-node ports who has not authenticated. Under this threat model's 
assumed configuration, all
+  communication channels require authentication and TLS, and JMX is bound to 
localhost only, so
+  unauthenticated connection attempts are rejected. These actors remain a 
threat only if they can
+  exploit vulnerabilities in the TLS handshake, authentication protocol, or 
network stack itself.
+* *External Clients and End Users*: Users of applications that interact with 
Cassandra indirectly.
+  Their input should never be trusted by the application layer and must be 
validated before being
+  passed to CQL queries.
+
+== Data Sources
+
+=== Trusted Sources
+
+Cassandra trusts the following data sources. It is the responsibility of the 
deployer to protect them:
+
+* *Configuration files* (`cassandra.yaml`, `cassandra-env.sh`, 
`cassandra-rackdc.properties`,
+  `jmxremote.password`): These control all security-critical behavior 
including encryption,
+  authentication, and authorization settings. Deployers must ensure that 
untrusted parties do not
+  have write access to these files and that they are transmitted only over 
confidential channels.
+* *System keyspaces* (`system_auth`, `system_schema`, `system`): These 
internal tables store
+  authentication credentials, role definitions, permissions, and schema 
metadata. Cassandra trusts their
+  contents. Deployers must ensure the `system_auth` keyspace has adequate 
replication (recommended: RF
+  3-5 per datacenter) and that direct manipulation via tools like 
`sstableloader` is restricted to
+  trusted operators.
+* *JMX interface*: Operations performed through JMX are trusted to be 
legitimate administrative actions.
+  JMX is bound to the local interface only, secured with Cassandra integrated 
authentication and
+  authorization, and configured with fine-grained MBean permissions. Deployers 
must maintain these
+  controls and audit JMX access.
+* *Environment variables and JVM system properties*: These configure 
security-critical behaviors such
+  as SSL keystore paths, JMX settings, and JAAS configuration. Deployers must 
protect the execution
+  environment.
+* *SSL/TLS key material*: Keystores, truststores, and PEM files used for 
client-to-node, node-to-node,
+  and JMX encryption. Deployers must protect these files with appropriate 
filesystem permissions and
+  manage certificate lifecycle (Cassandra supports hot reloading of SSL 
certificates).
+* *Pluggable extension points, service provider interfaces (SPIs), and 
operator-supplied JARs*:
+  Cassandra exposes numerous extension points that operators select via 
`cassandra.yaml` or that are
+  discovered from the classpath at startup. Examples include authentication 
and authorization plugins
+  (`IAuthenticator`, `IAuthorizer`, `INetworkAuthorizer`, `IRoleManager`, 
`IInternodeAuthenticator`,
+  `ICIDRAuthorizer`), topology, partitioning, and seed selection 
(`IEndpointSnitch`, `IPartitioner`,
+  `ISeedProvider`), TLS material providers (`ISslContextFactory`), storage and 
data-path components
+  (`ICompressor`, `SSTableFormat.Factory`), audit and startup hooks 
(`IAuditLogger`, `StartupCheck`),
+  per-table triggers (`ITrigger`), CQL constraint providers 
(`ConstraintProvider`), and any other
+  interface or `java.util.ServiceLoader` SPI that Cassandra resolves at 
runtime. User-defined functions
+  and aggregates loaded as Java code, and any other JAR placed on the 
Cassandra classpath
+  (including the `triggers/` directory) fall in the same category. These 
implementations run in-process
+  with the full privileges of the Cassandra JVM and can invoke any Cassandra 
internal, read or modify
+  any data the process can access, and observe any in-memory state. The Apache 
Cassandra project does
+  *not* control the security properties of third-party implementations and 
cannot make guarantees about
+  them. Deployers are responsible for sourcing such components only from 
trusted vendors, reviewing or
+  auditing their behavior, restricting who can publish JARs to a node's 
classpath or trigger/UDF
+  directories, and treating them with the same care as the Cassandra 
distribution itself.
+
+=== Untrusted Sources
+
+Cassandra does *not* trust the following, and its security controls are 
designed to mediate access from
+them:
+
+* *CQL queries from client connections*: All client requests are subject to 
authentication and
+  authorization checks. Either `PasswordAuthenticator`, 
`MutualTlsWithPasswordFallbackAuthenticator`, or
+  `MutualTlsAuthenticator` is active alongside `CassandraAuthorizer`, and all 
connections require TLS.
+  Applications should use parameterized queries and never interpolate 
untrusted input directly into CQL
+  strings.
+* *Data content written by clients*: Cassandra does not validate or sanitize 
the content of data written
+  to user tables. It is the application's responsibility to validate data 
before writing.
+* *Inter-node messages from unauthorized sources*: With inter-node encryption
+  (`internode_encryption: all`) and mutual TLS active, unauthorized nodes 
cannot join the cluster or inject
+  traffic. The residual threat is exploitation of vulnerabilities in the TLS 
implementation or certificate
+  validation logic.
+
+== Client Driver Trust Model
+
+Apache Cassandra client drivers (Java driver, Python driver, and other 
official drivers) operate under
+a trust model that mirrors the server-side assumptions in this document. 
Drivers assume they are
+connecting to a properly configured, non-compromised Apache Cassandra server. 
The trust relationship
+between a driver and a server is bidirectional:
+
+* The server authenticates and authorizes the client based on credentials or 
mutual TLS certificates
+  presented by the driver.
+* The driver, in turn, trusts that the server it is connected to is 
legitimate. With mutual TLS and
+  certificate validation against a configured truststore, the driver verifies 
the server's identity
+  at the TLS layer before exchanging any CQL traffic.
+
+Once the TLS handshake succeeds and the driver is connected to an 
authenticated server, the driver
+treats CQL protocol responses (result rows, schema metadata, server events) as 
well-formed and within
+protocol bounds. Drivers do not, in general, perform exhaustive validation 
that every length field,
+type code, or value in a server response conforms to the declared schema -- 
doing so would duplicate
+the server's own correctness guarantees and impose significant overhead on the 
protocol fast path
+(including native/Cython-accelerated parsing paths).
+
+Consequently, scenarios that require a *malicious or compromised 
Cassandra-compatible server*
+returning crafted protocol responses to attack a connected driver are outside 
the trust boundary of
+this threat model. If an attacker controls the server endpoint the driver is 
connected to, the
+attacker already has full access to every read and write the application 
performs through that
+connection; a client-side process crash, memory corruption, or resource 
exhaustion triggered by
+crafted response bytes is strictly less severe than the server compromise 
itself.
+
+Bugs of this nature (for example, insufficient bounds checking when parsing 
server responses,
+mishandling of malformed protocol frames, or driver crashes on out-of-spec 
server replies) remain
+legitimate correctness and robustness issues and should be reported through 
the project's normal bug
+tracker. They are not, however, treated as security vulnerabilities under this 
threat model.
+
+== Threats
+
+=== 1. Unauthorized Data Access (CWE-284: Improper Access Control)
+
+*Threat*: Attackers gain unauthorized access to data stored in Cassandra 
despite authentication and
+authorization being active.
+
+*Attack Vectors*:
+
+* Compromised or weak credentials allowing an attacker to authenticate as a 
legitimate user
+* Exploiting overly permissive role grants that expose data beyond intended 
scope
+* Direct access to SSTable files on disk, bypassing CQL-level access controls
+* Exploiting vulnerabilities in the authentication or authorization subsystem 
to bypass access checks
+* Compromised JMX credentials exposing data through MBean operations
+
+*Active Controls*:
+
+* *Authentication*: `PasswordAuthenticator`, 
`MutualTlsWithPasswordFallbackAuthenticator`, or
+  `MutualTlsAuthenticator` is active; the default `cassandra` superuser 
account has been disabled and
+   replaced with a dedicated superuser. All client connections must 
authenticate via credentials or
+   mutual TLS client certificates.
+* *Authorization*: `CassandraAuthorizer` enforces role-based access control 
with keyspace and
+  table-level permissions via `GRANT`/`REVOKE`. Permissions follow an 
allowlist model (no access
+  unless explicitly granted).
+* *File System Permissions*: OS-level access to data directories, commit logs, 
and saved caches is
+  restricted to the Cassandra process user. Where the Apache Cassandra Sidecar 
(control plane) is
+  deployed alongside a node, it shares filesystem access with the Cassandra 
process for operations
+  such as bulk import/export (data directories), CDC consumption (commit log 
directory), and live
+  data migration. The Sidecar process is treated as a co-located trusted 
component subject to the
+  same operator-level protections as the Cassandra process itself.
+* *JMX Authentication*: JMX is bound to the local interface only 
(`LOCAL_JMX=yes`), eliminating
+  remote JMX attack surface. Cassandra integrated auth (`CassandraLogin` JAAS 
config) provides
+  authentication even for local access.
+* *Inter-node Encryption*: `server_encryption_options` with 
`internode_encryption: all` and mutual
+   TLS prevents unauthorized cluster participants.
+
+*Residual Risks*:
+
+* Credential theft or brute-force attacks against authenticated accounts
+* Privilege creep through accumulated role grants over time
+* Compromise of an infrastructure operator who has OS-level access to data 
files
+
+=== 2. Data in Transit Interception (CWE-319: Cleartext Transmission of 
Sensitive Information)
+
+*Threat*: Attackers intercept data transmitted between clients and nodes, or 
between nodes, despite
+TLS being active on all channels.
+
+*Attack Vectors*:
+
+* Exploiting vulnerabilities in the TLS implementation or cipher suite 
negotiation
+* Compromised or weak certificates enabling man-in-the-middle attacks
+* Exploiting certificate validation flaws during SSL hot reloading
+* Attacks against the certificate authority or key material
+
+*Active Controls*:
+
+* *Client-to-Node Encryption*: `client_encryption_options` is configured with 
`enabled: true` and
+  `optional: false`, requiring TLS for all client connections.
+* *Node-to-Node Encryption*: `server_encryption_options` is configured with 
`internode_encryption: all`
+  and mutual TLS certificate validation.
+* *JMX Localhost Binding*: JMX is bound to the local interface only 
(`LOCAL_JMX=yes`), so JMX traffic
+  does not traverse the network. This eliminates the risk of JMX 
data-in-transit interception without
+  requiring JMX SSL.
+* *Certificate Management*: CA-signed certificates are used with properly 
configured truststores for
+  mutual authentication. Cassandra's SSL certificate hot reloading (polling 
every 10 minutes, or
+  triggered via `nodetool reloadssl`) supports certificate rotation without 
downtime.
+* *FIPS Compliance*: Where required, FIPS-compliant settings are configured at 
the JVM level.
+
+*Residual Risks*:
+
+* Compromise of private key material or certificate authority
+* Vulnerabilities in JVM TLS implementation (e.g., protocol downgrade attacks)
+* Brief window during certificate rotation where old/new certificates coexist
+
+=== 3. Data Tampering and Integrity (CWE-345: Insufficient Verification of 
Data Authenticity)
+
+*Threat*: Attackers modify data without authorization or corrupt data 
integrity despite active
+access controls.
+
+*Attack Vectors*:
+
+* Authenticated users exploiting overly broad `MODIFY` permissions to alter 
data outside their
+  intended scope
+* Direct manipulation of SSTable files on disk by a compromised OS-level 
account
+* Use of offline tools (`sstableloader`, `sstablescrub`) by a compromised 
operator to overwrite
+  system or user tables
+* Exploiting vulnerabilities in the authorization subsystem to bypass write 
restrictions
+
+*Active Controls*:
+
+* *Fine-grained Authorization*: `MODIFY` permissions are granted only to roles 
that require write
+  access, scoped to specific keyspaces and tables.
+* *Audit Logging*: Audit logging is enabled for security-relevant categories 
that strike a balance
+  between compliance and scalability on large systems. The recommended 
categories to include are
+  AUTH, DCL, DDL, ERROR, OTHER, which captures authentication events, data 
control
+  language (`GRANT`/`REVOKE`), data definition language (schema changes), 
errors, and other
+  administrative operations. Capturing every `DML` (data modification) 
statement is generally not
+  tenable at scale; deployers may opt in to `DML` auditing for specific 
keyspaces or roles where
+  regulatory requirements demand it.
+* *File System Permissions*: SSTable files, commit logs, and hints are 
protected with restrictive
+  OS-level permissions. Access to `sstableloader` and other offline tools is 
restricted to trusted
+  operators or the control plane process (i.e. Cassandra Sidecar).
+* *Inter-node Authentication*: Mutual TLS on inter-node channels prevents 
unauthorized nodes from
+  joining the cluster and injecting data.
+
+*Residual Risks*:
+
+* A compromised infrastructure operator can bypass all CQL-level access 
controls via direct file
+  manipulation
+* Application-level logic errors that allow authenticated users to write 
unintended data within
+  their granted permissions
+* *Application-level Integrity* _(developer responsibility)_: Implement 
checksums or application-level
+  signatures where data integrity guarantees beyond Cassandra's internal 
mechanisms are required
+
+=== 4. Denial of Service (CWE-400: Uncontrolled Resource Consumption)
+
+*Threat*: Attackers disrupt Cassandra availability despite authentication 
requirements.
+
+*Attack Vectors*:
+
+* Authenticated users executing resource-exhaustive queries (full table scans, 
unbounded reads,
+  excessive tombstone reads)
+* Authenticated users opening excessive connections to exhaust connection pools
+* Compromised JMX credentials used to trigger disruptive operations (e.g., 
compaction, repair on
+  overloaded nodes) -- requires local access to the node since JMX is 
localhost-bound
+* TLS handshake abuse to exhaust CPU resources on client or inter-node ports
+* Network-level flooding against gossip or native transport ports 
(infrastructure-layer attack)
+
+*Active Controls*:
+
+* *Authentication Barrier*: All client connections must authenticate, 
preventing anonymous abuse.
+  TLS is required, raising the cost of connection flooding.
+* *Rate Limiting*: Client connection limits and native transport request 
throttling are configured.
+* *Resource Limits*: Read/write request timeouts, query result size limits, 
and tombstone thresholds
+  are set in `cassandra.yaml`.
+* *JMX Security*: JMX is bound to the local interface only, eliminating remote 
JMX attack surface.
+  Local JMX access is secured with Cassandra integrated auth.
+* *Network Security*: Firewalls and network segmentation are in place. All 
non-essential ports are
+  closed.
+* *Monitoring and Alerting*: Unusual traffic patterns, query latency spikes, 
and resource exhaustion
+  conditions are monitored.
+
+*Residual Risks*:
+
+* Authenticated users with legitimate credentials can still craft expensive 
queries within their
+  permissions
+* TLS handshake cost amplification from unauthenticated network actors
+* *Query Best Practices* _(developer responsibility)_: Use prepared 
statements, avoid `ALLOW FILTERING`
+  in production, set appropriate page sizes, and ensure queries are 
partition-aware
+
+=== 5. Privilege Escalation (CWE-269: Improper Privilege Management)
+
+*Threat*: Attackers elevate privileges beyond their authorized level despite 
active RBAC and JMX
+authorization.
+
+*Attack Vectors*:
+
+* Exploiting overly permissive role grants that accumulate over time 
(privilege creep)
+* Credential theft targeting superuser or DBA accounts
+* Exploiting vulnerabilities in the `CassandraAuthorizer`, 
`PasswordAuthenticator`,
+  `MutualTlsWithPasswordFallbackAuthenticator` or `MutualTlsAuthenticator` to 
bypass access checks
+* Exploiting inconsistencies between CQL authorization and JMX authorization 
scopes
+* Exploiting role hierarchy (`GRANT role TO role`) to gain unintended 
transitive permissions
+
+*Active Controls*:
+
+* *Default Superuser Disabled*: The default `cassandra` role has been removed 
or disabled (`ALTER
+  ROLE cassandra WITH SUPERUSER = false AND LOGIN = false`) and replaced with 
a dedicated superuser.
+  When `PasswordAuthenticator` (or the password fallback path of
+  `MutualTlsWithPasswordFallbackAuthenticator`) is in use, the dedicated 
superuser is protected by a
+  strong password. When `MutualTlsAuthenticator` is in use, the dedicated 
superuser is a passwordless
+  role bound to a specific administrative mTLS identity (client certificate) 
via the configured
+  certificate-to-role mapping; password-based login is not required and is not 
the only acceptable
+  hardening for the superuser role.
+* *Principle of Least Privilege*: Permissions are granted at the minimum 
necessary scope using `GRANT`
+  statements scoped to specific keyspaces, tables, or MBeans.
+* *Role Separation*: Administrative (superuser), operational (JMX), and 
application roles are separated.
+  Cassandra's role hierarchy (`GRANT role TO role`) is used to manage 
permissions cleanly.
+* *Unified JMX Authorization*: Cassandra integrated JMX auth (`CassandraLogin` 
JAAS config +
+  `AuthorizationProxy`) unifies CQL and JMX access control with fine-grained 
MBean permissions.
+* *Inter-node Encryption*: Mutual TLS prevents unauthorized manipulation of 
`system_auth` tables via
+  crafted inter-node messages.
+
+*Residual Risks*:
+
+* Privilege creep if role grants are not periodically audited (`LIST ALL 
PERMISSIONS`)
+* Compromise of a superuser account grants full cluster control
+* Complex role hierarchies may create unintended transitive permission paths
+
+=== 6. Information Disclosure (CWE-200: Exposure of Sensitive Information)
+
+*Threat*: Attackers gain access to sensitive system information, metadata, or 
credentials despite active
+access controls.
+
+*Attack Vectors*:
+
+* Authenticated users with overly broad permissions reading `system_auth` 
tables (role definitions,
+  hashed credentials, permission grants) or other deployment-restricted 
resources
+* Compromised JMX credentials exposing configuration details, memory state, 
and operational metrics
+  beyond intended scope -- requires local access to the node since JMX is 
localhost-bound
+* Log files containing sensitive information (credentials, query data, stack 
traces) accessible to unauthorized parties
+* CQL error messages revealing internal system details to authenticated 
non-superuser clients
+* Timing or error-based information leakage through CQL query responses
+
+*Active Controls*:
+
+* *System Table Permissions*: Access to `system_auth` (which stores role 
definitions, hashed
+  credentials, and permission grants) is restricted -- non-superusers must be 
explicitly granted
+  `SELECT` to read it. DDL against local and replicated system keyspaces is 
blocked by the
+  authorization layer regardless of grants (only replication parameters of 
replicated system
+  keyspaces may be altered by sufficiently privileged users).
+* *Schema and Topology Metadata (intentionally exposed)*: `system_schema` 
(schema metadata) and the
+  topology-bearing tables in the `system` keyspace (`local`, `peers_v2`, 
size/table estimates) are
+  readable by every authenticated user by design. Drivers and CQL tooling 
depend on this -- for
+  example, `DESCRIBE schema;` and routine driver bootstrap require it. Schema 
and cluster topology
+  are therefore not treated as confidential under this model; the deployment 
relies on the trust
+  placed in authenticated clients (see the Client Driver Trust Model above).
+* *JMX Access Control*: JMX is bound to the local interface only, restricting 
access to users with
+  local access to the node. Fine-grained MBean permissions limit what 
authenticated JMX users can
+  observe. Monitoring roles are granted only `SELECT` and `DESCRIBE`.
+* *Log Management*: Access to log files is restricted at the OS level. 
Production log levels are
+  configured to avoid logging sensitive data.
+
+*Residual Risks*:
+
+* Schema, keyspace/table/column names, and cluster topology are readable by 
every authenticated user
+  by design; deployers must not encode sensitive information into schema 
identifiers and should
+  treat that metadata as non-confidential
+* Authenticated users may infer data distribution through permitted query 
patterns
+* Log files may inadvertently contain sensitive data if log levels are changed 
during debugging
+* *Log Hygiene* _(developer responsibility)_: Do not log credentials, 
authentication tokens, or
+  sensitive user data. Document which log levels may contain sensitive 
information.
+* *Error Handling* _(framework responsibility)_: Cassandra should avoid 
exposing internal stack
+  traces or system details in CQL error responses to non-superuser clients.
+
+=== 7. Supply Chain and Dependency Attacks (CWE-1357: Reliance on 
Insufficiently Trustworthy Component)
+
+*Threat*: Attackers compromise Cassandra through malicious or vulnerable 
dependencies or tampered
+distribution packages.
+
+*Attack Vectors*:
+
+* Compromised third-party libraries included in the Cassandra distribution
+* Tampered distribution packages obtained from unofficial sources
+* Vulnerable dependencies with known CVEs
+* Compromised build infrastructure or release process
+
+*Active Controls*:
+
+* *Verified Distribution*: Cassandra is obtained from official Apache 
distribution channels with
+  release signatures verified against the
+  https://downloads.apache.org/cassandra/KEYS[Apache Cassandra PMC KEYS file]. 
Artifacts without
+  valid signatures are not used.
+* *Dependency Management* _(framework)_: The Apache Cassandra project checks 
the quality of its
+  dependencies and monitors for known vulnerabilities.
+* *Security Patches*: Security updates are applied promptly. The
+  mailto:[email protected][Cassandra security mailing list] is 
monitored for vulnerability
+  announcements.
+* *JVM Updates*: The underlying JVM is kept up-to-date with security patches, 
as Cassandra inherits the
+  JVM's cryptographic and network security properties.
+
+*Residual Risks*:
+
+* Zero-day vulnerabilities in dependencies that have not yet been disclosed or 
patched
+* Compromise of the Apache release infrastructure itself
+
+=== 8. Log Injection (CWE-117: Improper Output Neutralization for Logs)
+
+*Threat*: Attackers inject malicious content into log files through crafted 
input, hiding malicious
+activity or corrupting log analysis. This threat applies even with all 
security features enabled,
+as authenticated users can submit crafted data through legitimate CQL 
operations.
+
+*Attack Vectors*:
+
+* Crafted CQL query strings or data values that inject log control characters
+* Manipulated client connection metadata (e.g., role names) appearing in log 
output
+* Exploitation of structured log format parsing through specially crafted 
values
+
+*Active Controls*:
+
+* *Authentication Barrier*: Only authenticated users can submit queries, 
limiting the attack surface
+to known identities and providing an audit trail.
+
+*Residual Risks*:
+
+* Authenticated users can still inject log content through legitimate CQL 
operations
+* *Structured Logging* _(framework responsibility)_: Where possible, use 
structured log formats (JSON,
+  etc.) that properly escape special characters.
+* *Log Validation* _(deployer responsibility)_: Use log aggregation systems 
that are resilient to
+  injection attacks.
+* *Input Awareness* _(developer responsibility)_: Be aware that 
client-supplied values may appear in
+  Cassandra logs. Do not rely on unstructured log output for security-critical 
decisions.
+
+=== 9. Improper Neutralization of Special Elements in CQL (CWE-138)
+
+*Threat*: Attackers exploit improperly constructed CQL queries to execute 
unauthorized operations.
+This is an application-layer threat that persists regardless of Cassandra's 
security configuration,
+as it targets how client applications construct queries.
+
+*Attack Vectors*:
+
+* CQL injection through string concatenation of untrusted input into queries 
within client applications
+* Exploitation of application-level query construction flaws to escalate 
operations within the
+  permissions of the application's database role
+
+*Active Controls*:
+
+* *Authorization Boundary*: Even if CQL injection succeeds, the injected 
operations are limited to
+  the permissions of the authenticated application role. Fine-grained 
authorization limits the blast
+  radius.
+* *Audit Logging*: Injected queries that fall within audited categories (e.g., 
authentication, DCL,
+  DDL, errors) are captured in audit logs, supporting detection and forensic 
analysis. Detection of
+  injection within DML statements requires opting in to DML auditing for the 
targeted scope.
+
+*Residual Risks*:
+
+* Within the application role's permissions, an attacker can read, modify, or 
delete any data the role
+  has access to
+* *Parameterized Queries* _(developer responsibility)_: Always use prepared 
statements with bound
+  parameters.
+  Never concatenate untrusted input into CQL query strings.
+* *Input Validation* _(developer responsibility)_: Validate and sanitize all 
user input at the
+  application boundary before constructing CQL queries.
+
+== Responsibility Matrix
+
+[cols="4,^1,^1,^1",options="header"]
+|===
+| Responsibility | Deployer | Developer | Framework
+| Maintain authentication configuration and credential strength | X | |
+| Maintain authorization and role-based access control | X | |
+| Maintain TLS encryption on all channels | X | |
+| Protect configuration files, key material, and certificates | X | |
+| Manage firewall rules and network segmentation | X | |
+| Maintain appropriate replication for `system_auth` | X | |
+| Rotate credentials and certificates periodically | X | |
+| Audit role grants and permissions regularly | X | |
+| Maintain JMX security and access restrictions | X | |
+| Monitor and respond to security events | X | |
+| Use parameterized CQL queries | | X |
+| Validate user input before passing to CQL | | X |
+| Manage application credentials securely | | X |
+| Avoid logging sensitive data | | X |
+| Prevent log injection in structured log layouts | | | X
+| Verify integrity of dependencies | | | X
+| Provide secure defaults and security documentation | | | X
+|===
+
+== Security Configuration Baseline
+
+This threat model assumes the following security configuration is active. All 
threats and residual
+risks are evaluated against this hardened baseline:
+
+. *Authentication*: `PasswordAuthenticator`, 
`MutualTlsWithPasswordFallbackAuthenticator` or
+  `MutualTlsAuthenticator` is configured (not `AllowAllAuthenticator`). The 
default `cassandra`
+  superuser account is removed or disabled. A dedicated superuser is in use. 
When using
+  `PasswordAuthenticator` (or the password fallback path of
+  `MutualTlsWithPasswordFallbackAuthenticator`), strong passwords are 
enforced. When using
+  `MutualTlsAuthenticator`, the dedicated superuser is a passwordless role 
bound to a specific
+  administrative mTLS identity, and client certificate validation is enforced 
through the TLS
+  truststore. Either form -- a strong password under password-based 
authentication, or a passwordless
+  role bound to an administrative certificate identity under mutual TLS -- 
satisfies this baseline.
+. *Authorization*: `CassandraAuthorizer` is configured (not 
`AllowAllAuthorizer`). Permissions
+  follow an allowlist model -- no access is granted unless explicitly assigned 
via `GRANT`.
+. *Client-to-Node Encryption*: `client_encryption_options` is enabled with 
`optional: false`,
+  requiring TLS for all client connections.
+. *Node-to-Node Encryption*: `server_encryption_options` is configured with
+  `internode_encryption: all` and mutual TLS with certificate validation.
+. *JMX Security*: JMX is bound to the local interface only (`LOCAL_JMX=yes` in 
`cassandra-env.sh`),
+  restricting access to the localhost. JMX uses Cassandra integrated 
authentication and authorization
+  (`CassandraLogin` JAAS config + `AuthorizationProxy`). If remote JMX access 
is operationally required,
+  it must be enabled with SSL and Cassandra integrated auth; however, 
localhost-only binding is the
+  recommended and assumed configuration.
+. *`system_auth` Replication*: The `system_auth` keyspace is configured with 
`NetworkTopologyStrategy`
+  and a replication factor of 3-5 per datacenter.
+. *Audit Logging*: Audit logging is enabled with the 
`AUTH,DCL,DDL,ERROR,OTHER` categories to
+  capture authentication, authorization changes, schema changes, errors, and 
administrative operations.
+  This baseline balances compliance and scalability; auditing `DML` is opt-in 
and should be scoped to
+  specific keyspaces or roles where required.
+. *Network Security*: Firewalls and network segmentation are in place. All 
non-essential ports are closed.
+
+== Security Assumptions
+
+This threat model further assumes:
+
+. *Cassandra has been configured correctly from a security point of view*, 
with all security features
+  enabled and properly configured as described in the Security Configuration 
Baseline above
+. Cassandra is deployed on trusted infrastructure with proper OS-level 
security hardening
+. Network infrastructure is secured with appropriate firewalls and segmentation
+. Infrastructure operators and administrators are trusted and follow security 
best practices
+. The underlying JVM is kept up-to-date with security patches
+. Physical security of servers is maintained
+. The Cassandra distribution has been obtained from official Apache channels 
and verified with release signatures
+. SSL/TLS key material is properly generated, stored, and rotated
+. Credentials are strong, unique, and managed through a secure credential 
management process. For
+  password-based authentication this means strong, rotated passwords; for 
mutual TLS authentication
+  this means properly issued, scoped, and rotated client certificates whose 
subject identity is bound
+  to a specific Cassandra role (which may be passwordless)
+. Any pluggable implementation of a Cassandra interface or SPI 
(authenticators, authorizers, snitches,
+  seed providers, partitioners, compressors, SSL context factories, audit 
loggers, triggers, UDFs,
+  startup checks, etc.) and any JAR placed on the Cassandra classpath is 
sourced from a trusted vendor
+  and treated as part of the trusted code base; third-party implementations 
are outside the control of
+  the Apache Cassandra project
+
+== Vulnerability Reporting Scope
+
+Vulnerability reports against Apache Cassandra should adhere to the 
assumptions and trust boundaries
+defined in this threat model. This model assumes a correctly configured, fully 
hardened Cassandra
+deployment. Specifically:
+
+* Reports that assume a trusted user (administrator, infrastructure operator) 
is the attacker are
+  *out of scope*, as these users are inherently trusted with full system 
access.
+* Reports that require OS-level or physical access to Cassandra nodes are *out 
of scope*, as
+  infrastructure security is a prerequisite assumption.
+* Reports that require security features to be disabled or misconfigured 
(e.g., using
+  `AllowAllAuthenticator` or unencrypted connections) are *out of scope*, as 
this threat model
+  assumes correct security configuration.
+* Reports demonstrating bypass of enabled authentication, authorization, or 
encryption controls
+  are *in scope* and will be treated with appropriate severity.
+* Reports demonstrating vulnerabilities that persist despite correct security 
configuration
+  (e.g., flaws in the `PasswordAuthenticator`, 
`MutualTlsWithPasswordFallbackAuthenticator`,
+  `MutualTlsAuthenticator`, `CassandraAuthorizer`, or TLS implementation) are 
*in scope*.
+* Reports against Apache Cassandra client drivers (Java, Python, etc.) that 
require a malicious
+  or compromised Cassandra server returning crafted CQL protocol responses are 
*out of scope*.
+  Drivers assume they are connected to a trusted, properly configured Apache 
Cassandra server,
+  with TLS verifying server trust where applicable. Such reports should be 
filed as correctness
+  or robustness bugs through the project's normal bug tracker.
+
+To report a vulnerability, follow the https://www.apache.org/security/[Apache 
Security Team process].
+
+== Out of Scope
+
+The following are considered out of scope for this threat model:
+
+* Vulnerabilities in the underlying operating system, JVM, or hardware
+* Physical attacks on servers
+* Social engineering attacks targeting administrators
+* Application-level vulnerabilities in client code
+* Backup and disaster recovery security (covered separately)
+* Side-channel attacks: While we acknowledge that timing or 
resource-usage-based side channels may exist,
+  they are out of scope for the current threat model. Where practical, we will 
adopt software hardening to
+  mitigate known side-channel vectors.
+* Log masking: It is the developer's responsibility to ensure sensitive data 
is properly masked before
+  passing it to CQL or logging. Third-party frameworks should be used for this 
purpose.
+* Denial of service at the network/infrastructure layer (e.g., volumetric 
DDoS) -- this is an infrastructure
+  concern, not a Cassandra application concern.
+* Driver-side bugs triggered by responses from a malicious or compromised 
Cassandra-compatible server
+  (e.g., crashes, buffer overflows, or resource exhaustion in driver protocol 
parsers when fed crafted server
+  replies). Drivers operate under the assumption that they are connected to a 
trusted, properly configured
+  Apache Cassandra server; an attacker who controls the server endpoint is 
already past the trust boundary
+  that drivers protect. These should be filed as correctness bugs rather than 
security vulnerabilities.
+
+== References
+
+* 
https://cassandra.apache.org/doc/latest/cassandra/operating/security.html[Apache
 Cassandra Security Documentation]
+* https://cassandra.apache.org/doc/latest/cassandra/configuration/[Apache 
Cassandra Configuration Reference]
+* https://cve.mitre.org/[CVE Database]
+* https://www.apache.org/security/[Apache Security Team]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to