blob: 99eae8efa3e835289a9abe6a8370d23dc538401d [file] [view]
# Security Model
This document orients a security reviewer human or automated/LLM agent to
**where the code that needs auditing actually lives** in this repository, and to
the trust-boundary references that apply to it.
It is intentionally brief. It is a **map to scanning targets**, not a full threat
model. The detailed, per-platform trust models live in the SDK repositories (see
3](#3-which-trust-model-applies)).
---
## 1. The `main` branch has no TEE code
`main` is the **landing page** for the Teaclave ecosystem. Its `crates/`, `sgx/`,
and `trustzone/` directories contain only `README.md` showcase pointers there
is **no enclave, no Trusted Application, and nothing compiled into a TEE** on
this branch. There is therefore no trust boundary or Trusted Computing Base to
audit on `main` itself. A security scan of the Teaclave codebase should target
the branches below, not `main`.
---
## 2. Scanning targets (branches that contain code)
| Branch | Status | Where the code is | What it is |
|---|---|---|---|
| **`experimental-web3`** | **Active / latest** | `vm/wallet-gateway/` | A TEE-backed crypto-wallet custody gateway the current focus. **Start here.** |
| `cleanroom` | Prototype (2022) | repo root (`attestation/`, `services/`, `executor/`, `dcap/`, `edl/`, `function/`, `rpc/`, `sdk/` …) | An earlier SGX FaaS-style platform prototype. |
| `legacy` | Deprecated | `services/`, `docs/` | The original Teaclave FaaS framework. Already carries its own security docs: `docs/threat-model.md`, `docs/mutual-attestation.md`, `docs/service-internals.md`, `docs/access-control.md`. |
### 2.1 `experimental-web3` → `vm/wallet-gateway/` (primary target)
A multi-crate wallet gateway that custodies keys and signs blockchain
transactions inside a TEE. The **trust boundary is visible in the workspace
layout** the task runner is split into a trusted and an untrusted half:
- **Trusted (inside the TEE):** `task-runner-tee` and the key/credential material
it handles (`credential-manager`, the signing/wallet logic). This is the TCB
private keys and plaintext must never leave it.
- **Untrusted (host / normal world):** `api-server` and `webapi` (the public
client-facing edge), `task-runner-normal`, `db-service` / `db-manager`
(persistence in untrusted storage), `net` (outbound calls to **external,
attacker-influenced** services such as blockchain RPC `net/.../btc_rpc.rs`
and price oracles `net/.../asset_price.rs`), and `authority-server`'s host
surface.
**Attacker-controlled inputs a scanner should focus on:**
- Every client request entering `api-server` / `webapi`.
- Every response from `net` (blockchain RPC, price feeds) — external data is
untrusted; never base a signing or balance decision on it without validation.
- Everything read back from `db-service` / `db-manager` — persisted data lives in
untrusted storage and must be encrypted/authenticated; treat reads as
adversarial.
- The boundary crossing between `task-runner-normal` and `task-runner-tee`.
Key questions: do wallet private keys and unencrypted secrets ever cross out of
`task-runner-tee`? Is data persisted by `db-service` sealed/authenticated before
it leaves the TEE? Are external feed responses validated before they influence a
signature or a balance?
### 2.2 `cleanroom` and `legacy`
Both are SGX FaaS-style platforms (frontend / management / storage / scheduler /
execution / access-control services, each split into an untrusted `app/` wrapper
and a trusted `enclave/`, joined by mutually-attested TLS). `legacy` already
documents its trust model under `docs/`; `cleanroom` is an earlier prototype of
the same shape. Audit these against the SGX trust model below; do not duplicate
`legacy`'s existing threat-model docs.
---
## 3. Which trust model applies
The applications on these branches are built on the Teaclave TEE SDKs, so the
**authoritative trust-boundary methodology is the SDK security models** use
them as the reference when auditing:
- **Intel SGX targets** (the FaaS platforms, and SGX builds of the gateway):
[Teaclave SGX SDK `docs/security-model.md`](https://github.com/apache/teaclave-sgx-sdk/blob/main/docs/security-model.md)
untrusted host vs. enclave, the ECALL/OCALL edge, OCALL results are
untrusted.
- **Arm TrustZone targets:**
[Teaclave TrustZone SDK `docs/security-model.md`](https://github.com/apache/teaclave-trustzone-sdk/blob/main/docs/security-model.md)
Normal World vs. Secure World, treat all parameters crossing into the TA as
attacker-controlled.
- **Dependencies linked into any of the above:**
[Teaclave Dependency Crates `docs/security-model.md`](https://github.com/apache/teaclave-crates/blob/main/docs/security-model.md)
everything linked into the trusted side is part of the TCB.
The common rule across all of them: **the TEE side is trusted; everything else
the host OS, clients, the network, external feeds, and persisted storage is
attacker-controlled and must be validated at the boundary.**
---
## 4. Reporting vulnerabilities
Security issues should be reported privately first, per
[`SECURITY.md`](../SECURITY.md), before any public disclosure.