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

cgivre pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git


The following commit(s) were added to refs/heads/master by this push:
     new 0c8a40cebe Add draft security threat model (THREAT_MODEL.md + 
SECURITY.md + AGENTS.md) (#3052)
0c8a40cebe is described below

commit 0c8a40cebed60114dcaad1f1c7ec1904b3133272
Author: Jarek Potiuk <[email protected]>
AuthorDate: Fri Jun 26 16:52:16 2026 -0400

    Add draft security threat model (THREAT_MODEL.md + SECURITY.md + AGENTS.md) 
(#3052)
    
    * Add draft security threat model (THREAT_MODEL.md + SECURITY.md + 
AGENTS.md)
    
    Generated-by: Claude Code
    
    * Drop .ratignore — drill's apache-rat-plugin uses pom <excludes> (which 
already covers **/*.md), so .ratignore is unread here and is itself the lone 
unapproved-license file failing RAT
    
    * Fold Drill PMC review (cgivre, PR #3052): contrib/ plugins in scope; 
storage-enumeration is by-design
    
    Generated-by: Claude Opus 4.8 (1M context)
---
 AGENTS.md       |  14 ++++
 SECURITY.md     |  16 +++++
 THREAT_MODEL.md | 200 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 230 insertions(+)

diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000000..f85f410703
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,14 @@
+<!-- SPDX-License-Identifier: Apache-2.0
+     https://www.apache.org/legal/release-policy.html -->
+
+# Agent Guide for drill
+
+This file is read by automated agents (security scanners, code
+analyzers, AI assistants) operating on this repository.
+
+## Security
+
+Security model: [SECURITY.md](./SECURITY.md)
+
+Agents that scan this repository should consult `SECURITY.md` and the
+threat model it links before reporting issues.
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 0000000000..64494239e9
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,16 @@
+<!-- SPDX-License-Identifier: Apache-2.0
+     https://www.apache.org/legal/release-policy.html -->
+
+# Security Policy
+
+## Reporting a Vulnerability
+
+`apache/drill` follows the [Apache Software Foundation security 
process](https://www.apache.org/security/). Please report suspected
+vulnerabilities privately to `[email protected]`; do not open public
+GitHub issues or pull requests for security reports.
+
+## Threat Model
+
+What the project treats as in scope and out of scope, the security
+properties it provides and disclaims, the adversary model, and how
+findings are triaged are documented in [THREAT_MODEL.md](./THREAT_MODEL.md).
diff --git a/THREAT_MODEL.md b/THREAT_MODEL.md
new file mode 100644
index 0000000000..d91288eb7b
--- /dev/null
+++ b/THREAT_MODEL.md
@@ -0,0 +1,200 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+# Apache Drill — Threat Model (v0 draft)
+
+## §1 Header
+
+- **Project:** Apache Drill (`apache/drill`), `master` @ HEAD (2026-06). 
Scope: `apache/drill` only.
+- **Date:** 2026-06-18. **Author:** ASF Security team, drafted via the 
threat-model-producer (Scovetta) rubric at the Drill PMC's request (path 3 — 
chosen by Charles Givre, 2026-06-17).
+- **Status:** DRAFT — under Drill PMC review (Charles Givre, 2026-06). Most 
load-bearing claims remain *(inferred)* pending further PMC confirmation (see 
§14).
+- **Version binding:** versioned with the project; a report against version 
*N* is triaged against the model as it stood at *N*.
+- **Reporting cross-reference:** §8-property violations → report privately per 
the ASF process (`[email protected]` → `[email protected]`); §3/§9 
findings are closed citing this document.
+- **Provenance legend:** *(documented)* = Drill's own docs/repo; 
*(maintainer)* = confirmed by a Drill PMC member through this process; 
*(inferred)* = reasoned from architecture/docs, not yet PMC-ratified — each has 
a matching §14 open question.
+- **Draft confidence:** ~10 documented / 2 maintainer / ~26 inferred (cgivre's 
PR #3052 review folded: `contrib/` plugins in scope + the storage-enumeration 
non-finding).
+
+**What Drill is.** Apache Drill is a **schema-free, distributed SQL query 
engine** for large-scale datasets. A cluster of **Drillbit** daemons 
(coordinated via Apache ZooKeeper) accepts ANSI-SQL queries over JDBC, ODBC, a 
REST API, and a Web UI (default port **8047**), and executes them directly 
against data in configurable **storage plugins** (local/HDFS/S3 files, Hive, 
HBase, Kafka, MongoDB, RDBMS via JDBC, HTTP, …) — discovering schema at query 
time rather than requiring a pre-defined [...]
+
+## §2 Scope and intended use
+
+Intended deployment: a **clustered set of Drillbits** inside an 
operator-controlled, network-isolated cluster, queried by analytics clients. 
Drill also runs in an **embedded** single-JVM mode (developer/laptop) where the 
caller controls everything. *(documented — install docs; inferred that 
clustered behind a perimeter is the security-relevant shape)*
+
+**Caller roles** (Drill is a network service — the role splits):
+
+- **SQL client** — submits queries over JDBC/ODBC/REST. May be authenticated 
or, if auth is disabled, anonymous. The primary untrusted boundary. *(inferred 
— §14 Q1)*
+- **Operator / admin** — configures storage plugins, system/session options, 
security settings, and uploads dynamic UDFs via the Web UI/REST. **Trusted.** 
*(documented — storage-plugin + option config is an admin function)*
+- **Embedding / submitting user under impersonation** — when impersonation is 
enabled, the Drillbit accesses the underlying data source *as* the submitting 
user, delegating authorization to the data source. *(documented — impersonation 
docs)*
+- **Peer Drillbit** — another node in the cluster, authenticated over the 
inter-Drillbit RPC. Trusted once authenticated (§7 Byzantine note). *(inferred 
— §14 Q3)*
+
+**Component families.**
+
+| Family | Entry point | Touches OS/network | In model? |
+| --- | --- | --- | --- |
+| Client RPC / SQL front door | Drillbit user RPC (JDBC/ODBC), the "foreman" | 
network (listens) | **In — primary boundary** *(inferred — §14 Q1)* |
+| Web UI + REST API | `:8047` — query submit, storage-plugin config, profiles, 
options | network (listens) | **In — high value (admin surface)** *(documented 
— Web UI)* |
+| SQL engine | parse → plan (Calcite) → distributed execute | depends on 
plugins | **In** *(inferred)* |
+| Storage plugins | file/HDFS/S3, Hive, HBase, Kafka, Mongo, **JDBC (RDBMS)**, 
**HTTP** | filesystem + network out | **In — file-read / SSRF / connector 
surface** *(documented — storage plugins)* |
+| UDF layer | built-in functions + **dynamic UDFs** (runtime jar upload) | 
in-JVM code execution | **In as code-execution-by-design** *(documented — 
dynamic UDFs)* |
+| Inter-Drillbit RPC | control + data RPC between Drillbits, SASL | network 
(intra-cluster) | **In (boundary is authenticated)** *(inferred — §14 Q3)* |
+| Client connectors | JDBC driver, ODBC driver, C++ client | client trust 
domain | client-side — out (§3) |
+| **`contrib/` storage + format plugins** | connectors/formats bundled + 
maintained with Drill (`contrib/storage-*`, `contrib/format-*`) | filesystem + 
network out | **In — same connector surface as the storage-plugin row** 
*(maintainer — cgivre)* |
+| Tests / examples / sample data | `exec/.../test`, demo code, sample datasets 
| n/a | **Out** *(see §3)* |
+
+## §3 Out of scope (explicit non-goals)
+
+- **The security of the underlying data sources.** HDFS/S3 permissions, the 
RDBMS behind the JDBC plugin, Hive authorization, the Kafka cluster — each 
enforces its own access control. Drill assumes them; it is not responsible for 
their misconfiguration. *(inferred — §14 Q2)*
+- **Dynamic UDFs and storage-plugin configuration as code/connectivity 
execution.** Uploading a UDF jar or configuring a storage plugin is an 
**authorized admin operation**; the code/connection runs with the Drillbit's 
privileges. This is a feature, not a sandbox escape — `BY-DESIGN`. A finding 
that requires admin rights to register a UDF or add a plugin is out of model. 
*(documented — admin function; §14 Q4 confirms the trust line)*
+- **An operator with cluster/root access, the Drillbit service account, or 
direct ZooKeeper write access.** Anyone who controls the cluster processes or 
the coordination store has already won. `OUT-OF-MODEL: adversary-not-in-scope`. 
*(inferred — §14 Q5)*
+- **Embedded / single-user mode**, where the caller owns the JVM, the 
filesystem, and all input — equivalent to an in-process library call. 
*(inferred — §14 Q1)*
+- **SQL injection in an embedding application** that string-concatenates 
untrusted input into Drill SQL — that is the embedding app's bug, not Drill's. 
*(inferred — §11)*
+- **Tests, examples, and sample data** (`exec/.../test`, demo code, sample 
datasets) — not a shipped runtime surface. *(inferred)* **NB:** the `contrib/` 
storage/format **plugins are in scope** — they ship with Drill and are 
PMC-maintained, carrying the same connector trust surface as the core storage 
plugins (§2); only tests/examples/samples are out. *(maintainer — cgivre, PR 
#3052)*
+
+## §4 Trust boundaries and data flow
+
+- **Client → Drillbit (the foreman)** is the primary boundary, over both the 
user RPC (JDBC/ODBC) and the Web UI/REST (`:8047`). The session is 
authenticated when `drill.exec.security.auth` is enabled (PLAIN via PAM/LDAP, 
Kerberos, or custom); every statement is then subject to the configured 
authorization (impersonation + storage permissions + views). Whether SQL text, 
connection properties, and storage-plugin references are treated as untrusted 
at this boundary is the load-bearing tria [...]
+- **Drillbit → data source.** With **impersonation enabled**, the Drillbit 
accesses the source *as the submitting user*, so the source's own ACLs bound 
the query; with impersonation disabled, all access runs as the Drillbit service 
principal and authorization collapses to whatever Drill itself enforces. The 
two modes have materially different blast radii. *(documented — impersonation; 
§14 Q7)*
+- **Drillbit ↔ Drillbit** (control/data RPC) and **Drillbit ↔ ZooKeeper** are 
intra-cluster boundaries assumed to run inside an operator-controlled, 
network-isolated perimeter, optionally SASL/encryption-protected. *(inferred — 
§14 Q3)*
+
+**Reachability precondition (triager's test).** A finding is in-model only if 
it is reachable by an **authenticated low-privilege SQL/REST client** (or an 
anonymous one when auth is a supported-disabled posture, §5a) — i.e. without 
admin rights to configure plugins or upload UDFs, and without control of the 
data source or the cluster host. A finding that requires any of those is 
`OUT-OF-MODEL`. *(inferred — §14 Q1/Q4/Q5)*
+
+## §5 Assumptions about the environment
+
+- A JVM on each Drillbit; Apache ZooKeeper for cluster coordination; the 
cluster network is operator-controlled and not directly exposed to untrusted 
clients except through the intended client RPC / `:8047` endpoints. *(inferred 
— §14 Q5)*
+- Authorization correctness depends on the data sources (and/or Drill views + 
impersonation) enforcing access; Drill does not re-implement source-side ACLs. 
*(inferred — §14 Q2)*
+- **Negative side-effects inventory** *(inferred — §14 Q8; high-value to 
confirm)*: beyond listening on its RPC/Web ports, reading the storage plugins 
it is configured for, writing query profiles + spill files to its configured 
areas, and coordinating via ZooKeeper, a Drillbit is assumed to make **no other 
outbound connections** except those a query explicitly drives 
(JDBC/HTTP/Kafka/Mongo plugins, `SERVICE`-like federation). Confirm there is no 
ambient phone-home / auto-fetch.
+
+## §5a Build-time and configuration variants
+
+The security envelope is set primarily by runtime configuration, not compile 
flags. The load-bearing knobs *(all defaults to be confirmed — §14 Q9; the 
insecure-default question reshapes §8/§10/§11a/§13)*:
+
+| Knob | Effect | Default (to confirm) |
+| --- | --- | --- |
+| `drill.exec.security.auth.enabled` (+ mechanism: PLAIN/Kerberos/…) | Whether 
the client front door authenticates at all. | **disabled** by default 
*(inferred — §14 Q9)* |
+| `drill.exec.impersonation.enabled` | Whether queries run as the submitting 
user against the source (delegating authz) vs. as the Drill service principal. 
| **disabled** by default *(inferred — §14 Q9)* |
+| Wire encryption (SASL / SSL-TLS, client↔Drillbit and inter-Drillbit) | 
Whether sessions + data are in clear on the wire. | **off** unless configured 
*(inferred — §14 Q9)* |
+| Web UI / REST auth (form / SPNEGO) | Whether `:8047` — which can configure 
plugins + upload UDFs — is open. | tied to `auth.enabled` *(inferred — §14 Q9)* 
|
+| Dynamic UDF support (`drill.exec.udf.*`) | Whether authorized users can 
upload UDF jars at runtime. | enabled *(inferred — §14 Q9/Q4)* |
+
+**Insecure-default question (wave 1).** If auth and impersonation ship 
**disabled**, is a multi-user deployment left in that state a `VALID` finding, 
or `OUT-OF-MODEL: non-default-build` (operator is documented as required to 
enable them before exposing Drill)? — §14 Q9.
+
+## §6 Assumptions about inputs
+
+| Surface | Input | Attacker-controllable? | Concern |
+| --- | --- | --- | --- |
+| Client RPC / REST | SQL text | **yes** (authenticated client) | query-driven 
file/URL access, resource cost, planner bugs |
+| Client RPC | JDBC/ODBC connection properties (incl. impersonation target) | 
**yes** | inbound-impersonation / identity spoofing if not gated |
+| Web UI / REST | storage-plugin config JSON, option sets, UDF jar upload | 
**admin only** (trusted) | code/connection execution — by design (§3) |
+| Query execution | file paths / URIs named in queries (`dfs`, `http`, `jdbc` 
plugins) | **yes** | local-file read / SSRF / arbitrary-RDBMS reach, bounded by 
impersonation + plugin config |
+| Storage scan | data files (CSV/JSON/Parquet/Avro…) from configured sources | 
**maybe** (whoever can write the source) | parser robustness / resource use on 
malformed data |
+| Inter-Drillbit RPC | control/data frames | no — authenticated peer | §7 
Byzantine-peer only |
+
+## §7 Adversary model
+
+- **In scope:** an **authenticated low-privilege SQL/REST client** (and, if 
auth-disabled is a supported posture, an anonymous network client reaching the 
client RPC or `:8047`). Capabilities: submit arbitrary SQL, set connection 
properties, drive query-time file/URL access through configured plugins, submit 
pathological queries. Goals: read data outside their authorization, make a 
Drillbit issue outbound requests (SSRF via HTTP/JDBC plugins), read local files 
via the `dfs` plugin, exhau [...]
+- **Network MITM** between client and Drillbit, or between Drillbits, where 
encryption is not configured. *(inferred — §14 Q9)*
+- **Out of scope:** the operator/admin (configures plugins, uploads UDFs — 
trusted, §3); anyone with cluster-host / service-account / ZooKeeper-write 
access (§3); the data sources themselves (§3).
+- **Authenticated-but-Byzantine peer.** A compromised Drillbit holding a valid 
cluster identity could behave arbitrarily over the inter-Drillbit RPC. Drill is 
assumed to make **no cross-node integrity claim** against a malicious 
authenticated peer — full peer trust once authenticated. *(inferred — §14 Q3)*
+
+## §8 Security properties the project provides
+
+*(All (inferred) pending §14; each lists violation symptom + severity.)*
+
+1. **Client authentication (when enabled).** With `auth.enabled`, no SQL/REST 
statement runs before the session authenticates via the configured mechanism. 
*Violation:* unauthenticated query execution against an auth-enabled cluster. 
*Severity:* security-critical. *(inferred — §14 Q9/Q10)*
+2. **Authorization scoping via impersonation + views + storage permissions.** 
A query reads/writes only what the effective identity is permitted at the data 
source (impersonation on) and/or what Drill views/permissions allow. 
*Violation:* a low-priv client reading data it is not authorized for, or 
bypassing a view. *Severity:* security-critical (CVE-class). *(inferred — §14 
Q7/Q10)*
+3. **No arbitrary code execution or plugin reconfiguration for a non-admin 
client.** Registering UDFs and configuring storage plugins are admin-gated; a 
plain SQL client cannot reach them. *Violation:* a non-admin causing code exec 
/ plugin change / arbitrary file or URL access beyond their authorization. 
*Severity:* security-critical. *(inferred — §14 Q4)*
+4. **Inbound-impersonation is gated.** A client cannot assume an arbitrary 
user identity unless the operator configured a proxy/impersonation policy 
permitting it. *Violation:* identity spoof via connection properties. 
*Severity:* critical. *(inferred — §14 Q6)*
+5. **Memory safety on the JVM** for well-formed input, to the extent the JVM 
provides it. *(inferred)*
+6. **Bounded/fair resource use** — *deferred.* Whether a single expensive 
query can exhaust a Drillbit (heap/direct memory/CPU) or whether per-query 
memory limits + queues bound it is a §14 question; stated as a property only if 
the PMC confirms a guarantee. *(inferred — §14 Q11)*
+
+## §9 Security properties the project does *not* provide
+
+- **No sandbox around dynamic UDFs or storage-plugin configuration.** 
Code/connections an authorized admin registers run with the Drillbit's 
privileges — by design. *(inferred — §14 Q4)*
+- **No protection when auth/impersonation are left disabled** (if that is a 
non-default posture, §5a) — an open, impersonation-off Drillbit exposes its 
service-principal access to any client. *(inferred — §14 Q9)*
+- **No defense against query-driven SSRF / local-file read beyond what plugin 
config + impersonation bound.** The `http`/`jdbc`/`dfs` plugins exist to reach 
those resources; restricting them is operator config, not an engine guarantee. 
*(inferred — §14 Q2)*
+- **No hard resource-fairness / anti-DoS guarantee** unless §14 Q11 says 
otherwise — a sufficiently expensive query may degrade a Drillbit.
+- **Not a security boundary over its data sources** — Drill does not add 
confidentiality/integrity on top of a source that lacks it.
+- **Well-known classes (SQL-engine / connector):** SSRF via outbound-connector 
plugins, local-file disclosure via filesystem plugins, decompression/parser 
resource attacks on scanned files, and SQL injection in *embedding* apps — the 
standard risks of a federated query engine that reaches arbitrary configured 
sources. *(inferred)*
+
+## §10 Downstream (operator) responsibilities
+
+- **Enable authentication and impersonation** before exposing Drill to more 
than one trusted user; do not run a multi-user cluster with the shipped 
auth-off / impersonation-off defaults. *(inferred — §14 Q9)*
+- **Lock down the Web UI / REST (`:8047`)** — it can configure storage plugins 
and upload UDFs; restrict it to admins and protect it with auth + TLS.
+- **Restrict who can configure storage plugins and upload dynamic UDFs** to 
trusted admins (these are code/connectivity-execution surfaces).
+- **Configure wire encryption** (SASL/SSL) on client↔Drillbit and 
inter-Drillbit links on untrusted networks.
+- **Network-isolate** the Drillbit cluster + ZooKeeper from untrusted 
networks; give data-source credentials least privilege.
+
+## §11 Known misuse patterns
+
+- Exposing the client RPC or `:8047` to an untrusted network **with 
auth/impersonation disabled**.
+- Granting storage-plugin-config or UDF-upload rights to untrusted users (= 
handing them code execution + arbitrary connectivity).
+- Configuring a `dfs`/`http`/`jdbc` plugin broadly (e.g. filesystem root, open 
egress) and exposing it to low-priv query clients without impersonation.
+- Treating Drill as an authorization layer over a data source that has none.
+- String-concatenating untrusted input into Drill SQL in an embedding 
application.
+
+## §11a Known non-findings (recurring false positives)
+
+*(v0 seed — the PMC will own the authoritative list; §14 Q12.)*
+
+- **"A dynamic UDF / storage plugin can run arbitrary code or reach any 
URL/file."** By design — both are admin-authorized operations. `BY-DESIGN` 
unless a non-admin can reach them. *(inferred)*
+- **"The REST API / Web UI accepts requests without authentication."** Only 
when auth is disabled — a non-default/operator-chosen posture (pending §14 Q9), 
not a Drill defect. `OUT-OF-MODEL: non-default-build`.
+- **"A query can read an arbitrary local file via the `dfs` plugin."** 
In-model only if it crosses the impersonated identity's authorization or the 
configured workspace; otherwise it is the operator's plugin-scope choice. 
*(inferred — §14 Q2/Q7)*
+- **"Drill can enumerate / read the files, schemas, or storage systems it is 
pointed at."** That is the **function** of a federated query engine — exposing 
configured storage to SQL is the point of Drill, not a vulnerability. 
`KNOWN-NON-FINDING` / `BY-DESIGN`. In-model **only** if the access crosses the 
authenticated identity's authorization (reading data an impersonated user 
shouldn't, or bypassing a Drill view — §8.2). *(maintainer — cgivre, PR #3052: 
"yes… that's the point of Drill".)*
+- **"SQL injection in Drill"** where the untrusted string was concatenated by 
an *embedding app* — that app's bug (§11), not Drill's.
+- **Dependency-tail CVEs** (Calcite, Hadoop, Jackson, Netty, a transitive jar) 
from an SCA scan — triage upstream unless Drill's own code reaches the 
vulnerable path with untrusted input.
+
+## §12 Conditions that would change this model
+
+- A new client-facing surface or a change to the auth/impersonation defaults 
(§5a).
+- A new storage plugin or connector with a new outbound/trust surface.
+- Sandboxing UDFs, or moving plugin config out of the admin-only trust tier.
+- A report that cannot be routed to a §13 disposition → revise §8/§9.
+
+## §13 Triage dispositions
+
+| Disposition | Meaning | Licensed by |
+| --- | --- | --- |
+| `VALID` | A §8 property breaks via an in-scope (authenticated low-priv / 
anonymous-if-supported) client on a realistic config. | §8, §6, §7 |
+| `VALID-HARDENING` | A §11 misuse is too easy (e.g. an over-broad default 
plugin scope). | §11 |
+| `OUT-OF-MODEL: trusted-input` | Requires admin-tier input (plugin config / 
UDF jar) or data the operator already trusts. | §6 |
+| `OUT-OF-MODEL: adversary-not-in-scope` | Requires operator / cluster-host / 
ZooKeeper / data-source control. | §7 |
+| `OUT-OF-MODEL: unsupported-component` | Lands in tests, examples/sample 
data, or embedded single-user mode. (NB: `contrib/` storage/format plugins are 
**in** scope — §2.) | §3 |
+| `OUT-OF-MODEL: non-default-build` | Only manifests with 
auth/impersonation/encryption left at a discouraged setting. | §5a |
+| `BY-DESIGN: property-disclaimed` | Concerns a property §9 disclaims 
(UDF/plugin code exec, SSRF-by-config, data-source security). | §9 |
+| `KNOWN-NON-FINDING` | Matches §11a. | §11a |
+| `MODEL-GAP` | Unroutable. | triggers §12 |
+
+## §14 Open questions for the maintainers
+
+**Wave 1 — scope & intended use**
+
+- **Q1.** Confirm the in-scope surface is "an authenticated SQL/REST client at 
the Drillbit front door (JDBC/ODBC/REST/Web UI), in a clustered multi-user 
deployment", with embedded single-user mode out of scope. Anything to add?
+- **Q2.** Confirm Drill is *not* responsible for the underlying data sources' 
own access control — that HDFS/S3/RDBMS/Hive/Kafka security is theirs, and 
Drill's job is to honor it (via impersonation/views), not replace it.
+- **Q4.** Confirm dynamic-UDF upload and storage-plugin configuration are 
**admin-only, code/connectivity-execution-by-design** — i.e. a finding that 
requires those rights is out of model.
+- **Q5.** Confirm operators with cluster-host / Drillbit-service-account / 
ZooKeeper-write access (and the data sources themselves) are out of model.
+
+**Wave 2 — auth, impersonation, defaults**
+
+- **Q9.** *(reshapes §5a/§8/§10/§11a/§13)* What are the shipped **defaults** 
for `security.auth.enabled`, `impersonation.enabled`, wire encryption, and 
Web-UI auth — and is "left at the default in a multi-user deployment" a `VALID` 
finding or `OUT-OF-MODEL: non-default-build`?
+- **Q6.** At the client→Drillbit boundary, are SQL text, connection 
properties, and inbound-impersonation targets all treated as untrusted (i.e. is 
identity-spoof via connection properties prevented unless an explicit proxy 
policy permits it)?
+- **Q7.** Which impersonation posture is the supported/recommended one, and 
does authorization fully delegate to the data source when it's on?
+- **Q10.** What does Drill claim to uphold given a valid authenticated session 
(auth, authz scoping, others) — confirm the §8 list.
+
+**Wave 3 — boundaries, resources, false-friends**
+
+- **Q3.** Inter-Drillbit + ZooKeeper trust: confirm these are assumed 
network-isolated, the RPC is authenticated (SASL), and Drill makes no integrity 
claim against a Byzantine authenticated peer.
+- **Q8.** Confirm the §5 "no ambient side effects" inventory — beyond its 
ports, configured plugins, profile/spill writes, and ZooKeeper, a Drillbit 
makes no other outbound connection except those a query drives.
+- **Q11.** Is super-linear CPU/memory in query/data size a bug, or is bounding 
it the operator's job (per-query memory limits, queues)? Is a hang on a 
pathological query a security issue? Or is no resource guarantee made?
+- **Q12.** *(Partially answered — cgivre, PR #3052: storage/filesystem 
enumeration via Drill is by-design, not a finding — folded into §11a. More 
welcome.)* What do scanners/researchers most often report against Drill that 
you consider a non-finding? (Feeds §11a.)

Reply via email to