NornGate Trust Topology & DigitalOcean Infrastructure
SBS-AI-Security-Report
1. Document Control
| Field | Value |
|---|---|
| Title | SBS AI Security Report: NornGate Trust Topology & DigitalOcean Infrastructure |
| Date | August 21, 2026 |
| Version | 21.0 |
| Scope | norngate-core application, NornGate Light Paper topology, DigitalOcean Infrastructure, Legacy Data Ingestion, Business Unit Compartmentalization, and 3rd-Party Audit Manifest |
| Audience | SBS Executive Leadership, Board of Directors, Security/Compliance Teams, and Authorized 3rd-Party Auditors |
| Classification | Confidential β restricted distribution |
Purpose: To establish NornGate's and SBS's underlying infrastructure security posture as a verifiable contract β what controls exist, what is missing, and what work is committed β ensuring every claim is understood by executive stakeholders and technically verifiable by external auditors.
Threat Model Summary: (a) External unauthenticated attacker against public endpoints; (b) Prompt-injected AI agent or hostile content processed by agents running on the host; (c) Malicious/compromised third-party npm plugin or adapter (supply chain); (d) Cross-tenant actor; (e) Malicious or compromised board operator (insider); (f) Attacker with host/LAN/backup access; (g) Lateral movement between Dev and Prod environments; (h) Lateral movement between internal business units (Compartments); (i) Malicious data injected via legacy system ingestion (Data Poisoning).
2. List of Acronyms
| Acronym | Expansion |
|---|---|
| AI | Artificial Intelligence |
| API | Application Programming Interface |
| AuthN/Z | Authentication and Authorization |
| BCDR | Business Continuity and Disaster Recovery |
| CCPA | California Consumer Privacy Act |
| CORS | Cross-Origin Resource Sharing |
| CSP | Content Security Policy |
| CSRF | Cross-Site Request Forgery |
| CVE | Common Vulnerabilities and Exposures |
| DB | Database |
| DLQ | Dead-Letter Queue |
| DLP | Data Loss Prevention |
| DoS | Denial of Service |
| DoW | Denial of Wallet |
| DR | Disaster Recovery |
| GDPR | General Data Protection Regulation (EU) |
| HITL | Human-in-the-Loop |
| HSTS | HTTP Strict Transport Security |
| IaC | Infrastructure as Code |
| JWT | JSON Web Token |
| LHN | Ledger Hub Networks, LLC |
| LGPD | Lei Geral de ProteΓ§Γ£o de Dados (Brazil) |
| LLM | Large Language Model |
| MCP | Model Context Protocol |
| npm | Node Package Manager |
| OCR | Optical Character Recognition |
| OWASP | Open Web Application Security Project |
| PII | Personally Identifiable Information |
| RBAC | Role-Based Access Control |
| RCE | Remote Code Execution |
| RLS | Row Level Security |
| RPO | Recovery Point Objective |
| RTO | Recovery Time Objective |
| SBS | Spanish Broadcasting System, Inc. |
| SCA | Software Composition Analysis |
| SQL | Structured Query Language |
| SQLi | SQL Injection |
| SSRF | Server-Side Request Forgery |
| SOW | Scope of Work |
| TLS | Transport Layer Security |
| VPC | Virtual Private Cloud |
| XSS | Cross-Site Scripting |
3. Executive Summary
NornGate is a multi-gated AI orchestrator with strong, well-implemented design invariants. The architecture is defined by the 5-Gate Taxonomy (G0-G4) and the Realm Trust Topology (Asgard to Jotunheim). Core application strengths include:
- Credential Starvation: AI agents never hold raw credentials. G1 (Tyr) resolves the minimum-scope credential for an approved action, injects it at execution, and revokes it on completion. A prompt-injected agent has nothing durable to exfiltrate.
- Origin Isolation: Untrusted code and agent-rendered content execute in Jotunheim and are served from a separate registrable domain, preventing cookie theft against the control plane in Asgard.
- Deterministic Gates: Every consequential action transits an explicit, deterministic gate. Deterministic means decided by policy code, never LLM judgment. Fail-closed means an unreachable or erroring gate results in denial.
- Telemetry Substrate (The Norns): Every gate decision writes to Urd (audit log/past) before execution, monitored by Verdandi (real-time metrics/present), with Skuld (forecasting/future) ensuring system health.
Build Phase Context & Audit Commitment: It is critical to note that The Dash platform is currently in its foundational deployment phase. The gaps identified in this reportβparticularly those related to DigitalOcean infrastructure and host accessβare "Day 0" findings discovered during the active build process. These gaps are scheduled to be fully remediated before the platform processes live production data.
Upon completion of the foundational installation and gap remediation, Ledger Hub Networks will conduct rigorous internal and external security audits. Furthermore, SBS retains the option to engage an independent third-party security firm (such as Certek) to perform a comprehensive penetration test and compliance validation prior to production go-live.
Infrastructure Context (DigitalOcean As-Built): While NornGate's application-layer architecture is robust, the underlying DigitalOcean infrastructure is currently in a "Day 0" remediation state. Critical environmental gaps were identified during infrastructure auditing, including: plaintext credentials committed to operational changelogs, shared flat VPC networking between Dev and Prod, absent cloud/host firewalls on production droplets, unmitigated egress paths, and shared root SSH access. All infrastructure findings are tracked in the Build Register with active remediation workstreams.
4. The NornGate Trust Topology (Realms & Gates)
Subdomain = Realm. The marketing metaphor and the routing topology are the same diagram. Trust gradient runs from Asgard (highest privilege) to Jotunheim (zero standing privilege).
4.1 The 5-Gate Execution Model
A gate is a deterministic, fail-closed checkpoint. No execution path produces an external side effect without transiting these gates:
| Gate | Name / Owner | Enforces | Placement |
|---|---|---|---|
| G0 | Ingress β The Gate / Warden | AuthN/Z, tenant resolution, rate limits, schema validation | System edge; nothing enters unauthenticated |
| G1 | Policy β Tyr | Deterministic pre-execution policy: tool permissions, credential scope, RBAC | Before every tool call, every realm crossing |
| G2 | Approval β HITL | Human approval for side effects above a configured risk class | Before external side effects (writes, spend, sends) |
| G3 | Sandbox β Jotunheim Boundary | Egress control, no standing credentials, origin isolation | Around all untrusted code and tool calls |
| G4 | Quality β Forseti | Consensus/judging on contradictory agent outputs; structured-output validation | Before results leave the system |
4.2 Realms β Trust Zones
- Midgard (
norngate.com): User-facing tier. Humans live here; sessions terminate here. - Asgard (
asgard.): Control plane / governance. Policy, scheduling, admin. Zero-trust access only. - Vanaheim (
vanir.): Federated external integrations. Third-party APIs with negotiated trust. - Jotunheim (
jotun.): Sandboxed / untrusted execution. Unvetted code + untrusted agent tool-calls. Outside Asgard control by design. - Valhalla (
valhalla.): Success archive. Immutable audit trail of completed jobs. - Helheim (
hel.): Dead-letter queue (DLQ). Jobs that did not "die gloriously."
4.3 Failure Semantics & Business Continuity (BCDR)
- Two Afterlives: Valhalla (immutable success archive) and Helheim (DLQ). A job is in exactly one afterlife, keeping the audit append-only and completion metrics honest.
- Hermod (DLQ Reprocessor): Classifies before retrying. Transient failures get capped exponential backoff. G1/G2 denials surface to a human queue β retrying a denial is an escalation attempt, not resilience.
- RagnarΓΆk (DR Drill): The scheduled DR/chaos drill. The myth ends in rebirth β exit criterion is verified recovery: state restored from checkpoints, gates re-armed fail-closed, Norn telemetry confirming steady state.
- BCDR Targets: The infrastructure is designed for an RPO (Recovery Point Objective) of < 24 hours via nightly encrypted database backups to SFO3, and an RTO (Recovery Time Objective) of < 4 hours for critical control plane restoration via infrastructure-as-code (IaC) redeployment.
5. Operational Context β Closed System
The organization declares NornGate operates as a Closed System:
- System Closed: NornGate is not exposed directly to the internet; all access is mediated through gateway-type connections.
- Data Non-Exposed: Data managed by the system is never exposed outside the operational perimeter.
- Risk Modulation: This deployment model reduces the probability of exposure for most breaches. Realistic exploitation scenarios concentrate on insider threats, supply chain (npm packages), and lateral movement, rather than direct external attack.
Technical Honesty Note: The closed system context is a declared risk factor, not a code-implemented control. It modulates probability but does not alter the intrinsic severity of the documented gaps. Critical and High findings remain in active remediation as part of the foundation build-out.
6. Layered Security Architecture
"[committed]" = exists in doc/plans or spec; "[recommendation]" = proposal from this report.
| Layer | Name | Status | Dominant Risk |
|---|---|---|---|
| 0 | Host & Deployment (DigitalOcean) | π΄ Gap (Day 0) | Shared root SSH, plaintext creds in changelog (SBS-33, SBS-34) |
| 1 | Network & Transport (VPC & Firewalls) | π΄ Gap (Day 0) | Shared flat VPC, missing firewalls, open egress (SBS-35, SBS-36, SBS-39) |
| 2 | Auth & Authz (G0/G1) | π‘ Partial | No rate limiting; shared dev secret (SBS-05, SBS-07) |
| 3 | Multi-Tenant & Compartment Isolation | π‘ Partial | No RLS: second line of defense absent (SBS-11) |
| 4 | Execution & Containment (G3/G4) | π‘ Partial | Untrusted code without real sandbox; open host egress; hallucination risk (SBS-01, SBS-02, SBS-03) |
| 5 | Secrets, Data & PII (G1) | π‘ Partial | Leakage to server.log; key co-located with backups (SBS-04, SBS-10) |
| 6 | Audit & Observability (The Norns) | π‘ Partial | Falsifiable log, no integrity/retention (SBS-15) |
Layer 0 β Host & Deployment (DigitalOcean) β π΄ Gap (Day 0)
- Present: Dedicated SBS-owned DigitalOcean account; phishing-resistant MFA enforced at account root; Docker 29.1.3 / Compose 2.40.3 deployed; Prod application server isolated via jump-host/bastion pattern through monitor-servers.
- Gaps: Root SSH login enabled fleet-wide with a single shared SSH keypair (SBS-33); shared
sbsRootaccount withNOPASSWD:ALLand docker group equivalence (SBS-33); plaintext credentials (shared root, GitHub, Wiki, Grafana) discovered inSERVER_CHANGELOG.md(SBS-34); production OS standardization pending (mix of Ubuntu 24.04 and 26.04). - Roadmap: [committed] Rotate all compromised credentials and migrate to Vault; strip credentials from changelog history; create per-person named SSH users with scoped sudo; disable direct root login.
Layer 1 β Network & Transport (VPC & Firewalls) β π΄ Gap (Day 0)
- Present: DigitalOcean VPCs utilized for private networking; Prometheus/Grafana internal services bind to
127.0.0.1behind nginx TLS; Wiki TLS live via Let's Encrypt. - Gaps: Dev and Prod environments share a flat VPC (
default-nyc2), breaking the DevβProd isolation rule (SBS-35); No Cloud Firewalls or host firewalls (ufw/nftables) exist on Prod or Dev dropletsβpublic interfaces are protected solely by service bind addresses (SBS-36); Wiki droplet is in NYC1 (cross-region), forcing unencrypted metric scraping over the public internet (SBS-37); Production apex DNS (sbsdash.com) currently resolves to an undocumented Dev-Gitlab-server, not Prod (SBS-38). - Roadmap: [committed] Rebuild fleet into dedicated
prod-vpc-nyc2anddev-vpc-nyc2; deploy 4 tag-scoped Cloud Firewalls immediately; repoint apex DNS tosbsdash-server-prod; rebuild Wiki in NYC2.
Layer 2 β Auth & Authz (G0 / G1) β π‘ Partial
- Present: Better Auth with required secret;
boardMutationGuardanti-CSRF; API keys 192 bits hashed (SHA-256); JWT HS256 with strictalg/expchecks; timing-safe comparisons. - Gaps: No rate limiting on auth/keys/invites (SBS-05); sign-up open by default in private (SBS-16); shared dev secret signs JWTs (SBS-07); agent keys lack expiration (SBS-19).
- Roadmap: [committed] Tier 2/3 agent auth; [recommendation] Global rate limiting; independent JWT secret with entropy validation.
Layer 3 β Multi-Tenant & Compartment Isolation β π‘ Partial
- Present:
company_idandcompartment_idNOT NULL withassertCompanyAccess/assertCompartmentAccessenforced at application layer; cross-tenant boundary tests; object storage prefixed with${companyId}/${compartmentId}/anti-traversal. SBS internal business units (HR, Finance, Sales) are isolated into distinct Compartments. - Gaps: Isolation only at application layer β no RLS (Row Level Security) (SBS-11). A single missed filter or SQLi exposes the whole instance.
- Roadmap: [recommendation] Postgres RLS or scoped DB roles as a second line of defense. (See Appendix D for Business Unit mapping).
Layer 4 β Execution & Containment (G3 Jotunheim Boundary) β π‘ Partial
- Present:
low_trust_reviewpreset with fail-closed resolution; runtime containment requiringsandboxdriver + isolated workspace; quarantine of output with source-trust tagging; sandbox callback bridge with allowlist. - Gaps: Local CLI agents run unsandboxed on host inheriting server env, using
--dangerously-skip-permissions(SBS-02); plugin workers lack real OS isolation (SBS-03); external adapters load in-process viaimport()(SBS-01); built-in sandbox providerfakeis a no-op but accepted by containment check (SBS-25); No egress control exists on any droplet, allowing potential LLM01 exfiltration (SBS-39). - Hallucination & Liability Containment: All outward-facing AI generation (Sol Vega scripts, automated client communications) must transit G4 (Forseti - Output Arbitration). G4 enforces structured-output validation and fact-checking against the 40-year model baseline. Any AI output lacking sufficient grounding confidence is routed to the Helheim DLQ for human review, preventing brand-damaging hallucinations from executing.
- Roadmap: [committed] Centralized low-trust enforcement;
adapter_managed/cloud_sandboxmodes; deploy nftables default-deny outbound with strict allowlists. [recommendation] Blockfakeprovider for low-trust; run workers in microVMs (gVisor/Firecracker).
Layer 5 β Secrets, Data, & PII (G1 Credential Starvation) β π‘ Partial
- Present: AES-256-GCM encryption at rest; master key 0600 with health check; AWS provider with SigV4; no reveal endpoint (100% board-only management); just-in-time secret injection as env vars before spawn; redaction in logs/transcripts.
- PII & Privacy Controls: Listener data ingested via the LaMusica app and geofence engine is subject to strict data minimization. NornGate enforces CCPA/LGPD/GDPR compliance by design through anonymized cohort targeting (no targeting an audience of one) and just-in-time data resolution, ensuring personal identifiers are never persistently stored alongside behavioral profiles.
- Gaps:
reqBodywith secrets leaks toserver.logon HTTP β₯400 errors (SBS-04); master key co-located with DB/backups (SBS-10); plugin configs stored in clear while secret-refs disabled (SBS-22); backups unencrypted (SBS-23). - Roadmap: [committed] Company-scoped plugin secret-refs; [recommendation] Structural logger redaction; master key rotation; encrypted backups.
Layer 6 β Audit & Observability (The Norns) β π‘ Partial
- Present: Activity log company-scoped with ~239 instrumentation points and structural sanitization; transactional approvals; budget hard-stop; run logs confined with sha256; telemetry opt-out with hashed private refs.
- Gaps: Activity log falsifiable by board (manual POST, no hash-chain) (SBS-15); no retention/rotation for
activity_logorserver.log(SBS-18); unaudited read access to run logs. - Roadmap: [committed] "Immutable audit" for escalation routes; pluggable
RunLogStore. [recommendation] Hash-chain/sign log entries + end-to-end request-ID; restrict manual activity POST; configurable retention.
7. Prioritized Findings Matrix
Remediation States: π Active Remediation Β· π Planned Β· π Under Evaluation. All Critical and High findings have active remediation work in progress to be resolved before production go-live.
| ID | Sev. | State | Domain | Description | Recommendation |
|---|---|---|---|---|---|
| SBS-01 | Critical | π Active | Supply Chain | External adapters: import() in-process + npm install without --ignore-scripts β RCE |
--ignore-scripts, out-of-process worker, integrity pinning |
| SBS-02 | Critical | π Active | Execution | Local CLI agents unsandboxed on host, inherit env, use --dangerously-skip-permissions |
Dedicated user/seccomp/sandbox; env denylist; restrict --allowedTools |
| SBS-03 | Critical | π Active | Plugins | Plugin workers lack real sandbox (fs/net open); VM sandbox dead code; http.outbound doesn't limit process net |
OS isolation/microVM; document as "trusted code" if not sandboxed |
| SBS-04 | High | π Active | Secrets/Logging | reqBody (with secrets) logged to server.log on β₯400 errors; only authorization redacted |
Structural redaction of reqBody/reqQuery in logger |
| SBS-05 | High | π Active | Auth/API | No rate limiting on login, invites, claim, webhooks (SPEC Β§16 requires it) | Global + endpoint-specific rate limiting |
| SBS-06 | High | π Active | Deploy/DB | Fixed PG credentials norngate/norngate + port 5432 published to host |
Random credentials per install; do not publish 5432 |
| SBS-07 | High | π Active | Secrets/Auth | Dev secret norngate-dev-secret signs sessions and JWTs (shared fallback) |
Mandatory independent JWT secret; entropy validation |
| SBS-08 | High | π Active | Webhooks | Plugin webhooks public, no host-level signature verification or rate limit | Optional HMAC at host + ingestion throttling |
| SBS-09 | High | π Active | SSRF | Native HTTP adapter: fetch arbitrary URLs without private IP filtering; cloud metadata reachable |
Reuse plugin SSRF guard in HTTP adapter |
| SBS-10 | High | π Active | Secrets | Master key co-located with DB and backups | Key outside data volume; encrypted backups; fix guide |
| SBS-11 | High | π Active | Multi-tenant | Isolation only at app layer: no RLS, single DB user with total access | Postgres RLS or scoped DB roles |
| SBS-12 | High | π Active | Auth | Cloud tenant token provisions instance_admin to any user; replayable |
Per-request nonce/timestamp; declared roles |
| SBS-13 | Medium | π Planned | HTTP | Guards trust X-Forwarded-Host without trust proxy |
Configure trust proxy or validate real Host |
| SBS-14 | Medium | π Planned | HTTP | No CORS or global security headers; SPA lacks CSP/HSTS | helmet + restrictive CSP |
| SBS-15 | Medium | π Planned | Audit | Activity log falsifiable by board; no hash-chain or request-ID | Integrity (hash-chain), request-ID, restrict manual POST |
| SBS-16 | Medium | π Planned | Auth | Sign-up open by default; browser claim available in authenticated/private |
DISABLE_SIGN_UP=true by default; claim notification |
| SBS-17 | Medium | π Planned | SSRF | Portability import accepts arbitrary HTTPS hostnames | Host allowlist + private IP blocking |
| SBS-18 | Medium | π Planned | Logging | Workspace-operation and plugin logs lack secret redaction | Apply redactSensitiveText to both pipelines |
| SBS-19 | Medium | π Planned | Creds | Agent API keys never expire; JWT lacks jti/revocation |
Key expiration/rotation; short TTL + denylist |
| SBS-20 | Medium | π Planned | Containers | Main container starts as root; no cap_drop; image not reproducible |
USER in image, hardening, digest pinning |
| SBS-21 | Medium | π Planned | Invites | Invite tokens ~41 bits vs 192 bits elsewhere | Increase entropy to β₯128 bits |
| SBS-22 | Medium | π Planned | Secrets/Plugins | Sensitive plugin config in clear while secret-refs disabled | Complete company-scope redesign |
| SBS-23 | Medium | π Planned | Data | Sessions/OAuth tokens in clear in DB; backups unencrypted | Hash session tokens; encrypt backups |
| SBS-24 | Medium | π Planned | Telemetry | Telemetry allows arbitrary dimensions from plugins (exfil channel) | Sanitize/limit plugin dimensions |
| SBS-25 | Medium | π Planned | Low-trust | Containment check accepts fake (no-op) sandbox provider |
Reject fake for low-trust runs |
| SBS-26 | Medium | π Planned | Low-trust | Possible boundary escape via PATCH executionPolicy |
Deny executionPolicy mutation to low-trust actors |
| SBS-27 | Low | π Eval | Realtime | WS accepts ?token= in URL; credential bypass in local_trusted |
Header/Sec-WebSocket-Protocol only |
| SBS-28 | Low | π Eval | CLI/MCP | CLI tokens in plain JSON; MCP static bearer in env | OS keyring; short-lived tokens |
| SBS-29 | Low | π Eval | Audit | x-norngate-run-id trusted without validation β attribution forgery |
Validate runId or ignore for none actors |
| SBS-30 | Low | π Eval | Disclosure | openapi.json public; /api/health exposes mode/status |
Require auth for openapi; minimize public health |
| SBS-31 | Low | π Eval | Plugins | Plugin manifest executed in-process during discovery | Declarative JSON manifest or isolated discovery |
| SBS-32 | Low | π Eval | Integrations | openclaw-gateway allows ws://; private key in clear config |
Require wss:// outside loopback; move key to secret-ref |
| SBS-33 | Critical | π Active | Host Access | Root SSH enabled fleet-wide; single shared SSH keypair for root/sbsRoot; sbsRoot has NOPASSWD:ALL and docker group |
Per-person named users; disable root SSH; scoped sudo; restrict sbsRoot to break-glass |
| SBS-34 | Critical | π Active | Secrets/Ops | Plaintext credentials (root, GitHub, Wiki, Grafana) committed to SERVER_CHANGELOG.md |
Rotate all credentials; migrate to Vault; purge git history; enforce distinct per-service creds |
| SBS-35 | High | π Active | Network | Dev and Prod share flat VPC (default-nyc2), breaking required DevβProd isolation |
Rebuild droplets into dedicated prod-vpc-nyc2 and dev-vpc-nyc2 |
| SBS-36 | Critical | π Active | Firewalls | No Cloud Firewalls or host firewalls (ufw/nftables) active on Prod or Dev droplets | Deploy 4 tag-scoped DO Cloud Firewalls; activate host firewalls mirroring admit set |
| SBS-37 | Medium | π Active | Network | Wiki droplet in NYC1 cannot join NYC2 VPC; scraped over public internet unencrypted | Rebuild Wiki in NYC2 to rebind to private VPC networking |
| SBS-38 | High | π Active | DNS | Prod apex DNS (sbsdash.com) points to undocumented Dev-Gitlab-server, not Prod |
Repoint A record to sbsdash-server-prod (107.170.72.145) upon proxy/TLS readiness |
| SBS-39 | High | π Active | Egress | No egress control on any droplet; all outbound traffic open (LLM01 exfiltration risk) | Deploy nftables default-deny outbound with strict allowlists (Anthropic, GitHub, OS mirrors) |
8. Security Roadmap & Incident Response
Committed in Project (Sources: doc/plans/, specs, LH-SBS-INF-001; state π΅):
- Agent Auth Tier 2/3: JWT signing key rotation, invite expirations, long-lived credential renewal.
- Low-Trust Enforcement: Centralized enforcement layer, content-trust tagging, denial regression tests.
- Plugin Secret-Refs: Company-scoped end-to-end (post-PAP-2394 redesign).
- Immutable Audit: Hash-chained, signed action records for escalation routes (Valhalla archive integrity).
- RagnarΓΆk DR Drills: Scheduled chaos drills with verified recovery (Trickster running destruction in Jotunheim under G3).
- Infrastructure Remediation (LH-SBS-INF-001): Rebuild fleet into dedicated VPCs; deploy Cloud Firewalls; migrate to per-person SSH users; deploy Vault; deploy nftables egress control.
- Pre-Launch Security Audits: Upon completion of the foundational installation and gap remediation, conduct rigorous internal and external security audits. SBS retains the option to engage an independent third-party security firm (such as Certek) to perform a comprehensive penetration test and compliance validation prior to production go-live.
Incident Response (IR) & AI Containment:In the event of a confirmed breach or agent compromise, NornGate supports an instant "Kill Switch" revocation of all agent JWTs and API keys. The IR playbook mandates immediate isolation of the Jotunheim sandbox realm, followed by forensic extraction of the Urd (audit log) to determine blast radius. SBS IT Leadership will be notified within 24 hours of any Critical-severity security event.
Recommended by this Report (Mapped to findings):
- Immediate: Global rate limiting (SBS-05); structural logger redaction (SBS-04);
--ignore-scripts+ out-of-process adapter loading (SBS-01). - High Priority: helmet/CSP/HSTS (SBS-14); independent JWT secret (SBS-07); random PG credentials (SBS-06); block
fakesandbox in low-trust (SBS-25); anti-SSRF in HTTP adapter (SBS-09). - Medium Priority: Audit log hash-chain (SBS-15); Postgres RLS (SBS-11); master key rotation & encrypted backups (SBS-10, SBS-23); CI security scanning.
9. Shared Responsibility Model
Security and compliance are jointly shared between Ledger Hub Networks (LHN) and Spanish Broadcasting System (SBS) IT.
| Entity | Responsibilities |
|---|---|
| Ledger Hub Networks (LHN) | NornGate application architecture (G0-G4 gates); IaC code generation and maintenance; AI agent sandboxing and containment logic; audit logging (Urd) generation; cryptographic secret vault architecture. |
| SBS IT Infrastructure | DigitalOcean account-level security (MFA); execution of IaC firewalls and VPC segmentation; physical backup retention validation; enforcement of per-person SSH access; network-level egress enforcement. |
10. Appendix A β Audit Scope & Technical Manifest
(This appendix is provided specifically for third-party security auditors and AI red-team firms to define the technical attack surface, rules of engagement, and testing scope.)
10.1 Technology Stack & Attack Surface
The Dash and NornGate platform are composed of the following authorized technologies. Auditors should focus vulnerability scanning and exploitation attempts against these specific frameworks and versions.
- Cloud Infrastructure: DigitalOcean (Droplets, VPCs, Cloud Firewalls).
- Operating Systems: Ubuntu 24.04 LTS / 26.04 LTS.
- Containerization: Docker 29.1.3, Docker Compose 2.40.3.
- Web Servers / Proxies: Nginx 1.28.3, Caddy 2.11.
- Backend Application Stack: Node.js (Express), Rust (Cargo), Python (scripts/adapters).
- Frontend Application Stack: React (NornGate Console), Vue 3 / Vite (SBS Intranet).
- Databases: PostgreSQL, MongoDB, Redis.
- Authentication: Better Auth (Session management), JWT HS256 (Agent auth).
- AI/LLM Integration: Anthropic API (High-end reasoning), Open-Weight Models via OpenRouter / DigitalOcean GPUs (Kimi/Z.ai for routine orchestration).
- AI Tooling: Model Context Protocol (MCP) for agent-tool communication.
- Legacy Data Ingestion: WideOrbit, Oracle, WideOrbit Automation, MusicMaster, SIMS TV, CounterPoint, ADP, and unknown Digital Systems. Ingestion methods include MCP, direct API, Raw Data Dumps (SFTP/DB exports), and Report OCR Scraping.
10.2 Target Environment & Access Points
The audit scope is limited to the following SBS-owned operational surfaces.
In-Scope URLs:
sbsdash.com/admin.sbsdash.com/clients.sbsdash.com(Primary Tenant Surfaces)solvega.sbsdash.com(Public Sol Vega splash site / video delivery)monitor.sbsdash.com(Grafana / Prometheus observability stack)wiki.sbsdash.com(BookStack documentation portal)
In-Scope Infrastructure:
- DigitalOcean Droplets residing in the NYC2 region (Prod, Dev, Monitor).
- The NornGate application codebase (White-Box access to be provided via private GitHub repository invitation).
10.3 Rules of Engagement (RoE)
The auditor agrees to the following constraints to protect SBS's production environment and live broadcast capabilities:
- Testing Methodology: White-Box testing is authorized. Source code, IaC configurations, and infrastructure access (via jump host) will be provided.
- No Denial of Service (DoS): Auditors are prohibited from executing volumetric DDoS attacks or aggressive fuzzing that degrades the availability of
solvega.sbsdash.comor the underlying DigitalOcean droplets. Resource exhaustion tests must be coordinated and throttled. - No Cloud Provider Attacks: Attempts to compromise the underlying DigitalOcean hypervisor, control plane, or physical infrastructure are strictly out of scope.
- Third-Party API Safety: Auditors must not attempt to breach, overwhelm, or extract data from third-party LLM providers (e.g., Anthropic, OpenRouter). Prompt injection tests must be self-contained and not designed to elicit harmful content from the foundational LLM itself, but rather to test NornGate's G1/G3 containment boundaries.
- Data Handling: Any PII, API keys, or secrets discovered during the audit must be handled under strict confidentiality, not exfiltrated, and securely destroyed at the conclusion of the engagement.
10.4 AI Red-Team Mandate
While traditional web application testing (OWASP Top 10) is required, SBS mandates that a minimum of 40% of the auditor's effort be focused on AI-specific threat vectors (OWASP LLM Top 10). The auditor must specifically attempt to:
- G1 Policy Bypass (Tyr): Attempt to craft prompts that trick Workflow Agents into executing tool calls or data mutations outside their assigned RBAC scope.
- G3 Sandbox Escape (Jotunheim): Attempt to break out of the agent execution environment to access the host server's filesystem, environment variables, or the Asgard control plane.
- Credential Starvation Circumvention: Attempt to force the AI to leak injected just-in-time credentials or API keys to the console, logs, or external endpoints.
- Denial of Wallet (DoW): Attempt to trigger infinite agent loops or excessive token consumption to test the effectiveness of the NornGate
budget hard-stopauto-pause mechanism. - Data Poisoning (Skuld/Mimir): Analyze how historical data is ingested. Attempt to inject anomalous or malicious data via legacy API ingestion to see if it degrades the 40-Year Model's targeting intelligence.
- Hallucination Exploitation (G4 Forseti): Attempt to generate outward-facing content (e.g., Sol Vega scripts, automated emails) that bypasses structured-output validation to produce brand-damaging or legally liable statements.
11. Appendix B β Data Flow & Trust Boundary Architecture
(This appendix maps the logical flow of data across the NornGate Realms, explicitly identifying trust boundaries and the gates that enforce them. Auditors should use this to plan cross-boundary penetration tests.)
11.1 Trust Boundaries & Data Flow Map
Boundary 1: The Edge (Internet β Midgard)
- Flow: User/Client Request (HTTP/HTTPS) β
api.norngate.com/sbsdash.com. - Gate Enforced: G0 (The Gate / Warden) β AuthN/Z, tenant resolution, rate limits, schema validation.
- Data State: Untrusted input. No access to internal services until G0 passes.
Boundary 2: Control Plane Entry (Midgard β Asgard)
- Flow: Authenticated User Request β Yggdrasil (Orchestrator Core).
- Gate Enforced: G1 (Tyr) / G0 (Warden) β RBAC verification, session validation.
- Data State: Trusted session context. User can view dashboards and trigger workflows, but cannot execute code or access raw data directly.
Boundary 3: Agent Execution (Asgard β Jotunheim)
- Flow: Orchestrator dispatches task to AI Agent (Odin/Thor) β Agent spawns in Sandbox.
- Gate Enforced: G1 (Tyr) / G3 (Jotunheim Boundary) β Pre-execution policy check, tool permission validation, sandbox initialization.
- Data State: Agent is provided with minimum-scope, just-in-time credentials (Credential Starvation). Agent output is tagged as
quarantinediflow_trust_reviewis active.
Boundary 4: External LLM Communication (Jotunheim β Vanaheim)
- Flow: AI Agent requires reasoning β API call to Anthropic / OpenRouter.
- Gate Enforced: G3 (Egress Control) β nftables/firewall allowlist permits traffic only to approved LLM endpoints (e.g.,
api.anthropic.com). - Data State: Data leaves the SBS perimeter. PII is minimized/redacted prior to payload construction by G1. Return payload is treated as untrusted hostile content.
Boundary 5: Data Persistence (Jotunheim/Asgard β Niflheim/Database)
- Flow: Agent or Orchestrator writes result to PostgreSQL/MongoDB β Audit event written to Valhalla/Urd.
- Gate Enforced: G1 (Tyr) / G4 (Forseti) β Structured output validation, SQL sandbox keyword banlist,
company_idenforcement. - Data State: Data is encrypted at rest (AES-256-GCM for secrets). Audit log entry is append-only.
Boundary 6: External Side Effects (Jotunheim β Vanaheim/Internet)
- Flow: AI Agent attempts to send email, post to social media, or modify a third-party API (e.g., Audacy invoice generation).
- Gate Enforced: G2 (HITL Approval) β Action is parked. Human Board member must explicitly approve the prepared action.
- Data State: Zero execution occurs until human approval token is provided.
11.2 Legacy System Ingestion Boundary (SBS Internal Systems β Jotunheim/Asgard)
The Dash aggregates 40 years of SBS historical and operational data. This data lives in disparate, legacy systems (WideOrbit, Oracle, WideOrbit Automation, MusicMaster, SIMS TV, CounterPoint, ADP, and unknown Digital Systems). Data is collected via four distinct ingestion paths, all strictly governed by G1/G3:
- MCP / API Integration: For modern systems (WideOrbit, Oracle, ADP), NornGate utilizes Model Context Protocol (MCP) and direct APIs. G1 enforces read-only, minimum-scope credentials just-in-time. The API connection is terminated in Jotunheim.
- Raw Data Dump: For systems that only support scheduled exports (e.g., MusicMaster logs, SIMS TV traffic), CSV/SQL dumps are pushed via SFTP to an isolated staging directory in Jotunheim. A Low-Trust Agent parses the file, strips PII, and validates the schema before writing to Asgard.
- Report OCR Scraping: For legacy systems with no API or export capability (e.g., unknown Digital Systems, legacy CounterPoint reports), PDF/visual reports are ingested. OCR processing is executed by a Low-Trust Agent in Jotunheim. The raw report is quarantined, and only the extracted, structured JSON data passes G4 validation to enter the Asgard data lake.
- Data Poisoning Prevention: Because legacy ingestion is a primary vector for Data Poisoning (Threat AI-T4), all ingested data is compared against historical baselines (Skuld). Anomalous data (e.g., a sudden 500% spike in a specific demographic) triggers a G1 denial, quarantining the data in Helheim for human review before it can degrade the 40-Year Model.
12. Appendix C β Role-Based Access Control (RBAC) Matrix
(This matrix defines the strict least-privilege access model for all human and non-human actors within NornGate. Auditors should use this to write automated tests attempting to escalate privileges or cross tenant boundaries.)
| Actor / Role | Environment / Realm | Permissions & Capabilities | Explicit Denials (Fail-Closed) |
|---|---|---|---|
| SBS Board / Admin | Midgard / Asgard | Read dashboards, approve G2 actions, manage user invites, rotate secrets metadata (no view), configure budget limits. | Cannot view raw secret values. Cannot bypass G1 policy. Cannot execute code directly. |
| SBS IT / System Admin | Asgard / Host Layer | SSH access (per-person named users), Docker container management, firewall rule deployment via IaC, database backup restoration. | No access to tenant data payloads. No access to NornGate application root without break-glass. |
| Human User (Employee) | Midgard | Read assigned compartment data, submit tasks to Workflow Agents, view personal audit history. | Cannot create new agents. Cannot alter G1 policies. Cannot access other compartments' data. |
| Workflow Agent | Jotunheim | Execute approved tool calls, read/write to assigned DB schema, call allowlisted external APIs (via G3 egress). | No standing credentials. Cannot mutate executionPolicy. Cannot access host filesystem. Cannot bypass G4 output validation. |
| Guardian Agent | Jotunheim / Asgard | Enforce policy (Tyr), tag output trust levels, quarantine low-trust content. | Cannot execute external side effects. Cannot approve its own generated content. |
| Low-Trust Agent | Jotunheim (Isolated) | Process untrusted external content (e.g., support tickets, social media scraping, OCR report ingestion). | Output strictly quarantined. No direct DB write access. No access to secrets vault. Egress restricted to specific endpoints. |
13. Appendix D β Business Unit Compartmentalization & Data Movement Policy
(This appendix details how SBS internal departments and external end-users are contained, how cross-department data movement is restricted by an Orchestrator traffic blacklist, and the specific Read/Write mappings enforced by G1 (Tyr).)
13.1 Business Unit Containment (Compartments)
SBS does not operate on a flat internal network. Internal business units (HR, Finance, Sales, Traffic, Marketing) are isolated into distinct Compartments within the NornGate control plane (Asgard).
- Network Isolation: Each Compartment operates on its own dedicated Docker Compose network. Cross-Compartment traffic is denied by network non-membership. An agent in the Sales Compartment cannot natively route traffic to the HR Compartment's database container.
- Schema Isolation: Data services (PostgreSQL, MongoDB, Redis) enforce per-Compartment separation. A Compartment can only read/write to its explicitly assigned database schema.
- Agent Containment: Workflow Agents are scoped strictly to their assigned Compartment. An HR Agent processing onboarding cannot execute tool calls against the Traffic/Continuity ad log.
13.2 Orchestrator Traffic Blacklist (Data Loss Prevention)
To prevent lateral movement of sensitive data between departments, the Orchestrator Core (Yggdrasil), enforced by G1 (Tyr), operates a strict Data Movement Blacklist. This acts as an internal Data Loss Prevention (DLP) layer.
- Policy-as-Code: G1 evaluates every attempted data transfer or tool call between Compartments against a deterministic policy file.
- Denied Transfers (Examples):
- HR β Marketing: PII (Employee SSNs, home addresses) is blacklisted from being passed into Marketing campaign generation agents.
- Finance β Sales: Raw GL/banking credentials are blacklisted from being passed into Sales media deck generation.
- Traffic β Marketing: Unrevealed advertising rate cards are blacklisted from Marketing's promotional output.
- Enforcement: If an agent attempts to cross a Compartment boundary with blacklisted data payloads, G1 denies the action, logs the violation to Urd, and routes the job to Helheim (DLQ) for administrative review.
13.3 Business Unit Read/Write Access Matrix
Access to data within Compartments is strictly governed by RBAC. The following matrix maps the Read (R) and Read/Write (RW) permissions for SBS core business units.
| Business Unit | HR Data | Finance/GL | Sales/CRM | Traffic/Inventory | Marketing Ops |
|---|---|---|---|---|---|
| HR | RW | R (Budget codes only) | Deny | Deny | Deny |
| Finance | R (Payroll metadata) | RW | R (Revenue tracking) | R (Billing reconciliation) | Deny |
| Sales | Deny | R (Client billing status) | RW | R (Avails/Inventory) | R (Campaign performance) |
| Traffic | Deny | R (Invoicing) | R (Client spots) | RW | Deny |
| Marketing | Deny | Deny | R (Audience targets) | Deny | RW |
(Note: "R" requires G1 policy validation. "RW" requires G1 validation for reads, and G2 (Human-in-the-Loop) approval for writes that impact external systems or financial state.)
13.4 End-User Containment (Credential Rights)
External end-users (LaMusica app listeners, SBS Intranet viewers, Sol Vega interactors) are strictly contained by scoped credential rights enforced at G0 (The Gate).
- Authentication: End-users authenticate via Better Auth (OAuth/Email) or receive scoped, short-lived JWTs.
- Realm Restriction: End-users exist exclusively in Midgard. Their credentials explicitly deny access to the Asgard control plane, Jotunheim agent execution environments, and all internal Business Unit Compartments.
- Data Scope: An end-user JWT only permits access to their own individual behavioral profile and interaction history (e.g., their chat history with Sol Vega, their location fence data). They cannot query global audience data, advertiser metrics, or other users' PII.
- Action Constraint: End-users can submit input (e.g., song requests, chat messages) which are routed to Low-Trust Agents in Jotunheim. End-users possess zero direct execution credentials; all side effects (ad insertion, content generation) are handled by agents acting on their behalf, strictly governed by G1-G4.
14. Appendix E β AI Compute & Inference Strategy
(This appendix outlines the tiered AI compute architecture for auditors. Understanding this 80/20 split is critical for testing Denial of Wallet (DoW) and egress control mechanisms.)
14.1 The 80/20 Inference Split
To balance high-end AI reasoning with strict cost control (AI Unit Economics), NornGate does not route all traffic to premium external APIs. Compute is split across two distinct tiers:
- 80% Routine Orchestration (Open-Weight Models): The vast majority of agent executionβincluding log reconciliation, DAI assembly, traffic routing, and standard content generationβis handled by open-weight LLMs (specifically GLM / Kimi). These models are hosted in-house, meaning inference costs drop to near-zero (just compute electricity).
- 20% Complex Reasoning (Premium API): High-stakes, nuanced tasksβsuch as Sol Vega scriptwriting, complex contextual ad arbitration, and meta-reasoning (Odin agent)βare routed via API to Anthropic (Claude).
14.2 Infrastructure Scaling Roadmap
The hardware hosting the 80% open-weight tier scales deliberately across three phases to protect SBS's capital expenditure:
- Phase 0/1 (Agility - Current): Initial deployment routes traffic through OpenRouter. This allows rapid integration and testing of multiple models without heavy upfront capital expenditure.
- Phase 2/3 (Scaling): As inference volume grows, compute migrates to rented DigitalOcean GPU clusters. This lowers marginal costs, secures data processing environments within the VPC, and tests sustained load before hardware is purchased.
- Phase 4+ (Maturity): Once usage patterns are proven and optimized, SBS will acquire dedicated H200 GPU infrastructure. This drives inference costs to the floor and ensures complete sovereign control of the 40-Year Model and the 80% open-weight tier.
14.3 Auditor Implications
- Denial of Wallet (DoW) Testing: Auditors testing DoW (Threat AI-T2) should understand that infinite loops targeting the Anthropic API will trigger the
budget hard-stop(Hermod). However, loops targeting the open-weight tier (GLM/Kimi) will primarily consume local DigitalOcean GPU resources, testing the container resource limits (CPU/RAM) rather than token budget. - Egress Testing: Egress allowlists (G3) must explicitly permit traffic to OpenRouter, Anthropic, and DigitalOcean internal GPU endpoints, but deny all other external AI APIs.
15. Appendix F β AI-Specific Threat Vector Matrix
(While NornGate addresses the OWASP LLM Top 10, this matrix maps the specific AI attack vectors relevant to SBSβs deployment of The Dash. Auditors must specifically target these vectors during the Red-Team engagement.)
| Threat ID | OWASP LLM Mapping | Attack Vector Description | NornGate Mitigation (Gate) | Auditor Testing Goal |
|---|---|---|---|---|
| AI-T1 | LLM01: Prompt Injection | Attacker submits malicious input via LaMusica app chat or social media scraper, instructing the agent to ignore previous rules and exfiltrate data. | G1 (Tyr) / G3 (Jotunheim): Agents have zero standing credentials (Credential Starvation). Even if tricked, they lack API keys to exfiltrate data. Egress is firewalled. | Attempt to trick Sol Vega into returning DB connection strings or API keys via the chat interface. |
| AI-T2 | LLM08: Excessive Agency / DoW | Attacker triggers a recursive loop in a Workflow Agent (e.g., infinite podcast generation), draining the Anthropic API token budget (Denial of Wallet). | G1 (Tyr) / Hermod: budget hard-stop auto-pause. Scheduler skips invocation if agent is paused or over budget. |
Attempt to trigger an infinite agent loop and verify that the budget hard-stop terminates the process before exceeding the $12k/mo cap. |
| AI-T3 | LLM02: Insecure Output Handling | LLM returns a payload containing malicious script (XSS) or SQL injection, which the system executes without sanitization. | G4 (Forseti): Structured-output validation and consensus/judging. Output must match strict JSON schema before leaving Jotunheim. | Inject a payload via LLM response designed to drop a database table or execute XSS in the admin console. |
| AI-T4 | LLM04: Data Poisoning | Attacker slowly feeds anomalous data into the 40-Year Model via legacy API ingestion (e.g., WideOrbit, SIMS TV) or OCR scraping, skewing ad targeting to benefit a competitor. | G1 (Tyr) / Skuld: Continuous data-integrity monitoring. Anomalous data fed via legacy APIs or OCR is flagged and quarantined before model degradation. | Attempt to push malformed audience demographic data via the WideOrbit API adapter or a crafted OCR report and verify it is quarantined. |
| AI-T5 | LLM05: Supply Chain Vulnerability | A third-party npm plugin or adapter is compromised (typosquatting) and attempts to execute malicious code inside the NornGate host. | G0/G1 / Host Hardening: npm install --ignore-scripts enforcement. External adapters load out-of-process. Plugin capability gating denies unknown operations. |
Submit a mock malicious plugin with a postinstall script and attempt to execute it via the adapter loader. |
| AI-T6 | LLM06: Sensitive Info Disclosure | LLM accidentally includes PII or secrets from its training context/prompt in its generated response to a user. | G1 (Tyr) / Layer 5: PII data minimization. Just-in-time credential injection. Redaction pipelines in run logs and transcripts. | Attempt to trick the agent into repeating the system prompt or revealing the just-in-time Anthropic API key. |
16. Closing & Next Steps
The transition of Spanish Broadcasting System into an AI-native media ecosystem is a monumental undertaking that requires an uncompromising commitment to security. This report outlines the robust architectural design of NornGateβanchored by the 5-Gate Taxonomy, Credential Starvation, and strict Business Unit Compartmentalizationβwhich provides a fundamentally secure foundation for The Dash.
While the "Day 0" infrastructure and application gaps identified herein are inherent to an active foundational deployment, they are explicitly tracked, actively remediated, and will be fully closed before any live production data transits the platform. The closed-system deployment model further mitigates exposure during this critical build phase.
Security is not a static achievement but a continuous operational discipline. Upon completion of the foundational installation, Ledger Hub Networks will execute comprehensive internal and external security audits. We fully support and welcome SBS's option to engage an independent third-party security firm (such as Certek) to perform final penetration testing, AI Red-Team validation, and compliance certification prior to production go-live.
The Dash is designed to be the strongest amplifier SBS has ever had; NornGate ensures that this amplification never comes at the cost of data integrity, listener privacy, or operational security. We are committed to delivering a platform that is not only intelligent and profitable but inherently trustworthy.
Document End.Confidential β Ledger Hub Networks, LLC Γ Spanish Broadcasting System, Inc.