Watch the defenses work
Three hands-on demos. Each one lets you play the attacker, then shows exactly how Relay stops it — using the same checks that run in the real product. Everything here runs live in your browser on synthetic data.
Tenant isolation
Relay is multi-tenant. Signed in for one client, try to read another client's rows — Postgres Row-Level Security decides what actually comes back.
Relay keeps every client's data in one shared database — like one apartment building full of tenants. Each client must only ever see their own rows.
alice@brightside-dental.comselect * from ghl_opportunities where client_id = 'a1a1a1a1-…-apexlaw';
Takeaway — Tenancy is enforced by an RLS policy in the database — client_id IN (accessible_client_ids()) — so it runs before any application code. A cross-tenant read isn't an error, it's silently zero rows, and even a leaked anon key can only read what the signed-in user is allowed to.
OAuth state forgery
Connecting a social account round-trips through OAuth. The state is signed so an attacker can't forge a callback that repoints a grant — or links their own account — to someone else's dashboard.
Connecting a social account is like a coat check: Relay hands you a ticket on the way out to Facebook and checks it on the way back. The ticket carries a wax-seal signature only Relay's server can make.
demo-meta-app-secret (server-only · never shipped to the browser)Takeaway — The state is HMAC-SHA256 signed with a server-only secret and verified in constant time, behind a 10-minute TTL. Tamper one byte of the payload and the recomputed signature no longer matches; forgery and replay both fail before any token is exchanged.
SSRF guard
Reports embed the client's logo from a client-supplied URL. Point it at an internal address and the egress guard has to stop the server from ever fetching it.
Reports show the client's logo from a URL someone typed in, so Relay's server goes and fetches it. But the server sits inside the private network and can reach things outsiders can't — including the cloud's secret-keys service (the mistake behind the Capital One breach).
http://169.254.169.254/latest/meta-data/Takeaway — Before fetching, the guard enforces an http/https whitelist and blocks loopback, link-local / cloud-metadata, and private IP ranges — and only forwards the session cookie to our own origin. The headless renderer can't be turned into a window into internal infrastructure.