Add security threat model and wire AGENTS.md -> SECURITY.md -> THREAT_MODEL.md

**This is a v0 draft proposal for the Zeppelin PMC to review — please correct, reject, or discuss as needed.** The maintainer is the decision-maker; nothing here is a requirement. The threat model does not need to be "finished" for anything downstream — it just makes automated security review (and triage of inbound reports) far less noisy.

**Context.** The ASF Security team is preparing the project for an automated agentic security scan we're piloting. Those scans run against a threat model that tells the scanner what's in scope, what's by-design, and what counts as a real finding — without one, the output buries maintainers in noise. This PR proposes the discoverable model plus the wiring the scanner needs.

**What's in this PR:**
- **`THREAT_MODEL.md`** (new) — a v0 security threat model written from Zeppelin's public docs + codebase, following the [threat-model-producer rubric](https://gist.github.com/potiuk/da14a826283038ddfe38cc9fe6310573). Every claim carries a provenance tag: *(documented)* (from your docs/site) or *(inferred)* (our guess from code/docs, for you to confirm / correct / strike). Draft confidence ~18 documented / 24 inferred.
- **`SECURITY.md`** (was an empty file) — disclosure pointer + link to the threat model.
- **`AGENTS.md`** — a `## Security` section so the `AGENTS.md → SECURITY.md → THREAT_MODEL.md` chain resolves for automated tooling. The existing developer guidance is unchanged.

**The framing to sanity-check first:** Apache Zeppelin runs user notebook code by design, so RBAC (Shiro + notebook ACL + URL ACL + impersonation) is the boundary, **not a sandbox** — a `%sh` command from a run-capable user is the product working, not RCE. The model treats interpreter execution as in-scope only when it crosses an authn/authz or tenant boundary.

**What we'd need from the PMC:**
1. **§14 wave 1 (the important one):** rule on the insecure defaults — is anonymous-by-default / public-notebooks / impersonation-off the *supported production posture* (a report against it is `VALID`), or a dev-convenience operators are expected to change (`OUT-OF-MODEL: non-default-build`)? This reshapes the whole model.
2. Walk the §14 questions (waves 1–3) — a one-line confirm / correct / strike per question is enough; each *(inferred)* tag becomes *(maintainer)* as you answer.

If you'd rather own the drafting yourselves, close the PR and we'll wait — entirely your call.


Closes #5268 from potiuk/asf-security/threat-model-2026-06-05.

Signed-off-by: Jongyoul Lee <jongyoul@gmail.com>
3 files changed
tree: faad9444d214f463ee3ecdc0cab4472ad1f02070
  1. .github/
  2. .husky/
  3. .mvn/
  4. angular/
  5. bigquery/
  6. bin/
  7. build-tools/
  8. cassandra/
  9. conf/
  10. dev/
  11. docs/
  12. elasticsearch/
  13. examples/
  14. file/
  15. flink/
  16. flink-cmd/
  17. groovy/
  18. hbase/
  19. helium-dev/
  20. influxdb/
  21. java/
  22. jdbc/
  23. k8s/
  24. licenses/
  25. livy/
  26. markdown/
  27. mongodb/
  28. neo4j/
  29. notebook/
  30. python/
  31. rlang/
  32. scripts/
  33. shell/
  34. spark/
  35. spark-submit/
  36. sparql/
  37. testing/
  38. zeppelin-client/
  39. zeppelin-client-examples/
  40. zeppelin-common/
  41. zeppelin-distribution/
  42. zeppelin-examples/
  43. zeppelin-integration/
  44. zeppelin-interpreter/
  45. zeppelin-interpreter-integration/
  46. zeppelin-interpreter-parent/
  47. zeppelin-interpreter-shaded/
  48. zeppelin-jupyter/
  49. zeppelin-jupyter-interpreter/
  50. zeppelin-jupyter-interpreter-shaded/
  51. zeppelin-plugins/
  52. zeppelin-server/
  53. zeppelin-test/
  54. zeppelin-web/
  55. zeppelin-web-angular/
  56. .asf.yaml
  57. .gitattributes
  58. .gitignore
  59. AGENTS.md
  60. Dockerfile
  61. LICENSE
  62. mvnw
  63. mvnw.cmd
  64. NOTICE
  65. pom.xml
  66. README.md
  67. Roadmap.md
  68. SECURITY-README.md
  69. SECURITY.md
  70. STYLE.md
  71. THREAT_MODEL.md
README.md

Apache Zeppelin

Documentation: User Guide
Mailing Lists: User and Dev mailing list
Continuous Integration: core frontend rat
Contributing: Contribution Guide
Issue Tracker: Jira
License: Apache 2.0

Zeppelin, a web-based notebook that enables interactive data analytics. You can make beautiful data-driven, interactive and collaborative documents with SQL, Scala and more.

Core features:

  • Web based notebook style editor.
  • Built-in Apache Spark support

To know more about Zeppelin, visit our web site https://zeppelin.apache.org

Getting Started

Install binary package

Please go to install to install Apache Zeppelin from binary package.

Build from source

Please check Build from source to build Zeppelin from source.