Skip to content

docs: add SECURITY.md with threat model and disclosure policy - #109

Merged
Nic-dorman merged 1 commit into
mainfrom
nic/v2-332-add-security-md
May 20, 2026
Merged

Nic-dorman merged 1 commit into
mainfrom
nic/v2-332-add-security-md

Conversation

@Nic-dorman

Copy link
Copy Markdown
Member

Summary

Publishes the project's security policy ahead of v1.0 — the first SECURITY.md across the WithAutonomi org (verified by sweeping sibling repos: ant-client, ant-node, ant-protocol, self_encryption, evmlib, ant-ui, indelible, and org-level .github — none currently carry one).

What's in the policy

  • Threat model — antd is a local daemon by design, has no built-in auth on REST or gRPC, and now binds to loopback by default (paired with feat(antd)!: bind to 127.0.0.1 by default on REST and gRPC #107). Wallet keys are read from env, never logged or persisted. Cryptographic primitives owned by upstream ant-core, ant-protocol, and self_encryption.
  • In-scope reports — RCE/priv-esc in antd, wallet-key leakage, auth-bypass on any auth layer we introduce later, cryptographic-correctness flaws in code paths we own (external-signer, payment modes, SDK wire handling), supply-chain compromise, sensitive-data exposure in SDK code paths.
  • Out-of-scope — operator-misconfigured 0.0.0.0 bindings, upstream-library issues (redirected to their repos), P2P-network attacks (route to ant-node / ant-protocol), theoretical findings without concrete impact, missing security headers on documented-unauthenticated routes.
  • Disclosure flowGitHub Private Vulnerability Reporting as the preferred channel (enabled on the repo as part of this change — verified live). dev@maidsafe.net as the email fallback (the only @maidsafe.net role address publicly attested in WithAutonomi repos — used in self_encryption/Cargo.toml). 3-business-day acknowledgement, 10-business-day triage, 90-day default disclosure window.
  • Supported versions — v1.x only. Pre-v1.0 releases get an upgrade-path note, not backports.
  • Dependency hygiene — refs cargo audit --locked in CI today, foreshadows the cargo-deny + per-ecosystem rollout (V2-333 / V2-334).
  • Operator hardening checklist — loopback-default guidance, firewall/mTLS recommendations for externally-bound deployments, external-signer mode for environments that should not hold the wallet key, log-level guidance, SHA256 checksum verification (GPG signing tracked as a post-v1.0 follow-up).

Repo settings change

  • Enabled Private Vulnerability Reporting via gh api -X PUT repos/WithAutonomi/ant-sdk/private-vulnerability-reporting. Verified {"enabled":true}. This is what makes the PVR link in SECURITY.md functional.

README

  • Adds a top-level ## Security section linking to SECURITY.md, sitting between Documentation and License.

Test plan

Publishes the project's security policy ahead of v1.0:

- Threat model — antd is a local daemon, no built-in auth, loopback
  binding by default; wallet keys read from env, never logged or
  persisted; cryptographic primitives owned by upstream ant-core,
  ant-protocol, and self_encryption.
- In/out-of-scope sections so we are not flooded with operator-
  misconfiguration reports or upstream-library reports.
- Disclosure flow — GitHub Private Vulnerability Reporting as the
  preferred channel; dev@maidsafe.net as an email fallback. Default
  disclosure window 90 days; 3-business-day acknowledgement and
  10-business-day triage targets.
- Supported versions — v1.x receives security fixes; pre-v1.0 does
  not (upgrade path documented).
- Operator hardening checklist for deployments that need network-
  reachable antd.

PVR enabled on the repo so the report link in SECURITY.md is live.
README links to SECURITY.md from a new top-level Security section.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@Nic-dorman
Nic-dorman merged commit 0567979 into main May 20, 2026
@Nic-dorman
Nic-dorman deleted the nic/v2-332-add-security-md branch May 20, 2026 11:22
Nic-dorman added a commit that referenced this pull request May 21, 2026
Cuts v0.8.0 atop v0.7.1. Substantial breaking-change roll-up of the
put/get rename, the private-file PUT/GET gap close, and several minor
surface cleanups -- bundled here so the v1.0 cut can ship stable on top.

## Breaking (antd daemon)

- feat(antd)!: bind to 127.0.0.1 by default on REST and gRPC (#107).
  Previously bound 0.0.0.0; use --bind-rest / --bind-grpc to override.
- chore: remove dead graph_entry surface from antd proto + 5 SDKs (#92).
  GraphService and its 4 RPCs are gone; REST mounts dropped.
- chore: remove dir_upload_public / dir_download_public surface (#95).
  Use file_put_public on a directory path instead; the daemon recurses.
- feat(antd)!: normalize put/get convention + close private-file PUT and
  GET gaps (#115). Method renames across proto + REST + SDKs:
    data_put_private    -> data_put
    data_get_private    -> data_get
    file_upload_public  -> file_put_public
    file_download_public -> file_get_public
  New: file_put / file_get for the private file path (previously only
  the public variant existed). New typed results: DataPutResult,
  DataPutPublicResult, FilePutResult, FilePutPublicResult; PutResult
  is now annotated as chunk_put only.

## Additive

- feat(antd): honor payment_mode on gRPC put/cost paths and REST cost
  endpoints (#114). Optional kwarg threaded through every put/cost
  signature; empty/omitted maps to "auto" so older clients keep working.
- feat: external-signer public uploads + single-chunk prepare/finalize
  across 15 SDKs (#90).
- docs+spec: openapi.yaml refreshed for the v1.0 surface, including
  POST /v1/chunks/prepare and /v1/chunks/finalize for single-chunk
  external-signer publish (#126).

## SDK fan-out (PaymentMode + put/get convention, all 15)

#116 antd-go, #117 antd-py/ruby/elixir, #118 antd-rust, #119 antd-csharp,
#120 antd-java, #121 antd-swift, #122 antd-dart, #123 antd-kotlin,
#124 antd-cpp, #125 antd-js/php/zig/lua, #127 antd-mcp.

## SDK example + build fixes

- fix(antd-go): make 03-files example self-contained and runnable (#91)
- fix(examples): make 04-files runnable across cpp/rust/elixir/lua/php/ruby/zig (#93)
- fix(examples): runnable dart 04_files + java Example03Files; add java Example03Chunks (#94)
- feat: gRPC transport example for antd-py and antd-rust (#113)
- feat(antd-py): 07_external_signer example + ant-dev dispatcher entry (#98)
- feat(antd-js): 07-external-signer example + antd-py empty-payments fix (#99)
- feat(rust/go): 07-external-signer examples (#100)
- feat(antd-csharp): 07_external_signer example (#101)
- feat(antd-java): 07_external_signer example (#102)
- feat(antd-kotlin): 07_external_signer example (#103)
- feat(antd-dart): 07_external_signer example (#104)
- feat(antd-ruby): 07_external_signer example (#105)
- feat(antd-php): 07_external_signer example (#106)
- chore(antd-kotlin): drop stale GraphDescendant from local proto copy (#108)

## Docs / infra

- docs: external-signer flow reference + ABI + python smoke test (#97)
- docs: add SECURITY.md with threat model and disclosure policy (#109)
- docs!: refresh per-SDK READMEs + llms-full.txt + openapi.yaml for v1.0 surface (#126)
- ci: add Go lint + test + vuln scanning for antd-go (#112)
- ci: extend antd-rust to sibling-repo parity (fmt + clippy + audit + doc) (#111)
- ci: skip antd/openapi.yaml and llms-full.txt from triggering CI (#128)
- chore(scripts): add full-stack + integration sweep helpers (#96)
- fix(antd-rust): regenerate Cargo.lock to unbreak --locked CI (#110)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant