Architecture threats
Trust boundaries, OAuth, collector ingest, database writes, storage, and MCP read-only access.
Security architecture
Breakwater uses a layered threat-modeling approach: architecture threats, attacker scenarios, privacy risks, abuse paths, and detection engineering, validated against OWASP Top 10 (2021). Eight categories are fully addressed; one partial gap (HSTS) is tracked for remediation. The goal is simple: discovery evidence should be useful without turning the platform into a scanning or attack surface risk.
Trust boundaries, OAuth, collector ingest, database writes, storage, and MCP read-only access.
Attacker objectives, customer impact, ranked scenarios, and release-blocking controls.
User telemetry, asset metadata, customer reports, and privacy-preserving analytics.
How bad outcomes happen through combined failures, not isolated control gaps.
Protected data, adversary vocabulary, defensive controls, audit, and detection coverage.
No cloud LAN scanning, exploitation, remediation, offensive graphing, or device-write actions in this phase.
The DFD separates browser, identity provider, Breakwater cloud, customer network, database, object storage, and AI clients. The red trust boundaries are the places where authentication, authorization, validation, and audit controls must be enforced.
STRIDE is the architecture lens. It validates that identity, ingest, storage, UI, and MCP flows have explicit controls against spoofing, tampering, repudiation, disclosure, denial of service, and privilege escalation.
| Stage | Breakwater application | Output |
|---|---|---|
| 1. Objectives | Protect customer discovery evidence while proving the cloud cannot scan private LANs directly. | Discovery-only security objective and release boundaries. |
| 2. Technical scope | Browser, Google OAuth/Cognito, Lambda API, policy signer, collector, Postgres, object storage, MCP clients. | DFD and route/component inventory. |
| 3. Decomposition | Trust boundaries between untrusted browser, IdP, Breakwater cloud, customer LAN, storage, and AI clients. | Data-flow and trust-boundary mapping. |
| 4. Threat analysis | Cloud scanner abuse, inventory poisoning, prompt/tool injection, tenant data exposure, collector compromise. | Ranked threat scenarios. |
| 5. Vulnerability analysis | Missing nonce check, weak tenant filter, excessive telemetry, unsigned collector binary, permissive MCP action. | Control gap backlog and negative tests. |
| 6. Abuse modeling | Failure trees for forged report, confused deputy, and adversarial evidence strings. | AND/OR misuse chains with required blockers. |
| 7. Risk decision | High risks require prevention, detection, owner, validation evidence, and residual-risk signoff. | GO/NO-GO gate. |
Attacker asks an AI connector to scan a private or third-party network. Breakwater refuses cloud-side scanning and redirects to authorized local collector workflow.
Attacker uploads fake discovery results. Required controls are signed policy, nonce, schema validation, tenant scope, checksums, and audit trail.
Attacker attempts to make an AI connector reveal secrets or execute unsafe work. MCP remains read-only and returns bounded discovery summaries.
Only login, documentation, static assets, and OAuth endpoints are public. App, telemetry, reports, and data routes require sessions or MCP auth.
Every high-risk scenario must have prevention, detection, owner, and residual-risk decision before production.
GOBreakwater needs product telemetry so AI assistants can analyze user friction, but the default posture should minimize sensitive identity, route, object, and network details.
Goal: Poison discovery results
OR upload without authorization [cost: medium]
AND steal token [cost: medium, probability: medium]
AND bypass signed policy [cost: high, probability: low]
AND replay or forge nonce [cost: high, probability: low]
OR tamper with collector output [cost: medium]
AND compromise collector host [cost: medium, probability: medium]
AND alter report file [cost: low, probability: medium]
AND evade checksum/schema checks [cost: high, probability: low]
OR mislead operator through MCP [cost: medium]
AND inject hostile hostname/banner evidence [cost: low, probability: medium]
AND trigger AI summary without evidence escaping [cost: medium, probability: medium]
AND hide confidence caveats [cost: medium, probability: low]
The detection model maps protected data and adversary behaviors to durable audit and privacy-safe telemetry. It also gives MCP a read-only analytics surface for usage, friction, and login-denial review.
| Model | Use in Breakwater | Expected output |
|---|---|---|
| STRIDE | Architecture, trust boundaries, APIs, auth, DB, storage, MCP. | Threat table, controls, residual risk. |
| PASTA | Business-risk and attacker-scenario prioritization. | Ranked scenarios and release-blocking controls. |
| LINDDUN | Privacy modeling for telemetry, asset metadata, users, reports. | Privacy threat list and minimization controls. |
| NIST SP 800-154 | Data-centric modeling for reports, evidence, audit, exports. | Protected data inventory and data-flow risk register. |
| MITRE ATT&CK / D3FEND | Detection vocabulary and defensive countermeasure mapping. | Detection map, audit requirements, and response playbooks. |
Risk is scored as likelihood multiplied by impact on a 1 to 5 scale. Residual risk is accepted only when the listed validation evidence exists and no critical/high control is missing.
| Threat | Likelihood | Impact | Risk | Required controls | Validation evidence |
|---|---|---|---|---|---|
| Hosted connector abused as a cloud scanner | 4 | 5 | 20 High | Cloud-scan refusal, local collector-only workflow, read-only MCP | Scanner refusal tests, MCP live prompts, health scope text |
| Inventory poisoning through forged collector upload | 3 | 5 | 15 High | Signed policy, nonce replay block, schema validation, checksum, audit | Collector attestation tests, ingest negative tests, audit rows |
| Indirect prompt injection through discovery evidence | 4 | 4 | 16 High | Evidence escaping, read-only tools, instruction stripping, source labeling | Adversarial hostname/banner fixtures and MCP response tests |
| MCP confused deputy across connected servers | 3 | 5 | 15 High | Tenant-bound tokens, minimal scopes, no cross-server delegation | MCP authorization and tool-call provenance tests |
| Collector binary supply-chain compromise | 3 | 5 | 15 High | Signed release, SBOM, SLSA provenance, checksum verification | Release attestation and install-script verification |
| Prompt injection causes unsafe AI behavior | 3 | 4 | 12 Medium | Read-only MCP tools, evidence caveats, no device-write actions | MCP tool descriptor review, adversarial prompt tests |
| SSRF through import, URL enrichment, or collector callback surfaces | 3 | 4 | 12 Medium | URL allowlists, private IP block, metadata IP denylist, egress review | SSRF negative fixtures for 169.254.169.254 and RFC1918 targets |
| User telemetry over-collects private information | 3 | 4 | 12 Medium | Actor hash, metadata deny-list, size limits, aggregate analytics | Telemetry sanitizer tests, DB sample review |
| Forced browsing exposes app data before login | 2 | 5 | 10 Medium | Public asset allowlist, session gate, no-store responses | Unauthenticated route tests and curl probes |
| Tenant isolation filter bug leaks another customer run | 2 | 5 | 10 Medium | Tenant-scoped queries, RLS evaluation, cross-tenant negative tests | Multi-tenant isolation test pack and DB policy review |
| Signing key compromise enables forged policies | 2 | 5 | 10 Medium | KMS/HSM-backed storage, rotation, emergency revocation, key IDs | Rotation runbook and compromise recovery drill |
| DNS rebinding targets browser or collector-local endpoints | 2 | 4 | 8 Medium | Host header validation, loopback protection, collector API binding rules | DNS rebinding fixture tests |
| Customer deletion request misses object storage or backups | 2 | 4 | 8 Medium | Deletion workflow, retention labels, backup disclosure, audit exceptions | Retention/deletion propagation test |
| HSTS header missing — browsers cannot enforce HTTPS preload (A05 gap) | 2 | 3 | 6 Medium | Add Strict-Transport-Security header to all Lambda responses | Response header audit confirming max-age=63072000; includeSubDomains present on all routes |
| MCP endpoint deployed without authentication (MCP_AUTH_MODE=none misconfiguration) | 2 | 5 | 10 Medium | MCP_AUTH_MODE=none deploy guard in CI/CD, environment variable validation on Lambda startup, deployment checklist item | Deploy guard tests and pre-production smoke test confirming MCP bearer auth is required |
Test Google OAuth success, OAuth state failure, logout, unauthorized app access, JWKS validation, and allowed/denied policy decisions.
Test valid report, wrong scope, expired policy, replayed nonce, malformed schema, oversized metadata, and checksum mismatch.
Test ChatGPT and Claude prompts for summary, evidence, scan requests, unsafe requests, and prompt-injection attempts.
Test telemetry deny-list, actor hashing, object ID hashing, source IP hashing, and absence of raw tokens/secrets in site_events.
Map every DFD flow to route, auth requirement, data store, audit event, and test evidence before release.
Critical/high threats require passing automated tests and documented residual risk. Missing critical/high evidence is a NO-GO.
Track indirect prompt injection through evidence strings, tool poisoning, cross-server context leakage, token passthrough, and confused-deputy behavior across multiple connected MCP servers.
Publish signed collector binaries, checksums, SBOM, SLSA provenance target, reproducible-build status, release key ownership, and install-script verification.
Document what happens if the customer host running the collector is compromised, including credential storage, network permissions, task limits, and cloud-side revocation.
Maintain negative tests for metadata IPs, RFC1918 callback misuse, URL import adapters, controller integrations, browser-origin assumptions, and collector-local endpoints.
State whether isolation is application-filtered, Postgres RLS-backed, schema-per-tenant, account-per-tenant, or private-customer deployment. Include cross-tenant negative tests.
Document algorithm, key length, key ID, storage boundary, KMS/HSM decision, rotation cadence, compromise recovery, and cryptographic agility plan.
Define deletion propagation across Postgres, object storage, exports, backups, logs, audit exceptions, and customer-owned deployments.
Track independent security assessment reports, SOC 2/ISO roadmap, bug bounty or vulnerability disclosure, incident response runbooks, breach notification SLA, and post-incident threat-model updates.
Record how signed policies and archived evidence migrate if algorithms are retired, including post-quantum watch items for long-lived evidence stores.
The production Lambda API handler, React frontend, MCP integration, and collector ingest pipeline were assessed against OWASP Top 10 2021. Eight categories are addressed with explicit controls. One category has a partial gap (missing HSTS header). One category requires ongoing assurance work (component vulnerability scanning).
| OWASP Category | Status | Controls in place | Open items |
|---|---|---|---|
| A01 — Broken Access Control | GOOD | RS256 JWT validation, tenant-scoped queries, MCP read-only tools, session gate on all app routes | None identified |
| A02 — Cryptographic Failures | GOOD | RS256 JWT (asymmetric), timingSafeEqual for HMAC comparison, httpOnly + sameSite=lax + secure cookies, no plaintext secrets in storage | None identified |
| A03 — Injection | GOOD | Parameterized queries throughout, textContent rendering for user-influenced data, evidence records returned as structured JSON not raw strings | None identified |
| A04 — Insecure Design | GOOD | Local-first collector architecture (cloud never scans LANs), discovery-only scope, signed bounded policies, read-only MCP enforcement | None identified |
| A05 — Security Misconfiguration | PARTIAL | Content-Security-Policy present, X-Content-Type-Options: nosniff present, X-Frame-Options present | HSTS (Strict-Transport-Security) header missing from Lambda responses. Add strict-transport-security: max-age=63072000; includeSubDomains. Tracked in risk register. |
| A06 — Vulnerable and Outdated Components | MONITOR | npm and Go module dependency management in place | No confirmed automated dependency vulnerability scanning (Dependabot or equivalent) for Lambda, frontend, or Rust collector. Required for enterprise security review. |
| A07 — Identification and Authentication Failures | GOOD | Google OAuth with PKCE, state cookie validation, timingSafeEqual for HMAC comparison, session expiry, allow-list domain check | None identified |
| A08 — Software and Data Integrity Failures | GOOD | Signed collector policies (HMAC-SHA256), nonce replay tracking, schema validation on ingest, checksum verification, policy expiry enforcement | None identified |
| A09 — Security Logging and Monitoring Failures | GOOD | Structured site_events audit table with records for login, logout, policy issue, collector upload, MCP access, and login denial; each row includes actor hash, tenant, IP, and user-agent | None identified |
| A10 — Server-Side Request Forgery | GOOD | No user-controlled URL inputs in the Lambda handler, collector operates local-only with outbound-only egress, no URL import or enrichment surfaces exposed | None identified |
The Lambda handler does not currently emit a Strict-Transport-Security header. Browsers cannot preload HTTPS for subsequent requests. Fix: add strict-transport-security: max-age=63072000; includeSubDomains to the shared response headers object. Low-complexity, one-line change. Tracked in the risk register below.
Automated dependency vulnerability scanning for the Lambda handler, React frontend, and Rust collector binary is not confirmed in CI. Add Dependabot, Snyk, or equivalent with a policy to remediate critical/high CVEs within a defined SLA. Required before enterprise security review.