Skip to content
Integration / Vercel

Connect Vercel to CYBRET.

CYBRET reads your Vercel team, the deployments and edge functions that ship from it, and the environment-variable schema that decides what the runtime sees. Preview deployments are first-class in the attack graph; they're where most of the real exposures live.

What CYBRET sees on Vercel

Projects, deployments, edge code, environment shape.

The Vercel integration is access-token based against the Vercel REST API. CYBRET reads what it needs to reason about preview-vs-production paths, edge function code, and integration installations. We never read environment-variable values; we read names and which environments they apply to.

  • Teams and projects: all projects in the team, framework, root directory, build command, output directory, custom domains.
  • Deployments: production and preview deployments with their git SHA, target branch, alias mappings, ready state, runtime logs index.
  • Environment variables: names and which environments they apply to (production, preview, development). Values are never read.
  • Edge code: the deployed function code (Edge Functions, Edge Middleware, Serverless Functions) and the routing config that maps URLs to them.
  • Integrations: installed Vercel integrations and the scopes they hold against the team.
  • Custom domains and aliases: the alias graph including preview wildcards, production aliases, and the SSL configuration.
  • Telemetry: audit log via the Vercel API, deployment webhook for runtime correlation.
Three real attack-path examples

What we find in the first week.

Vercel paths almost always involve preview deployments and the assumptions teams make about them. These three are the most common on first connect.

1. Preview deployment env vars include production secrets

Env var STRIPE_SECRET_KEY set for "all environments" → preview deployment URL is on a public wildcard subdomain → preview app makes API calls to the same prod Stripe.

The team has "all environments" checked on every variable to avoid the friction of separate dev / prod values. CYBRET reads the env-var schema (names and environments only), joins it to the alias graph and Stripe-style key prefixes, and surfaces the preview-leaks-prod pattern. The fix is splitting environments and using a non-prod Stripe in preview.

2. Edge middleware auth bypassed via X-Forwarded-Host

Edge middleware reads req.headers.get('x-forwarded-host') for routing decisions → auth check is conditional on the host → an attacker-supplied host bypasses the gate.

The middleware was written to handle multi-tenant routing; one of the branches doesn't apply auth. CYBRET reads the middleware source, classifies the host-header trust pattern, and pairs it with the deployed routing config. The fix is usingreq.nextUrl.host or validating against an allowlist.

3. Git integration deploys from a compromised PR

Vercel Git integration auto-deploys preview from any PR → preview deployment runs an attacker-supplied edge function → the function sees production env vars (from #1) and the production Stripe.

The supply-chain risk compounds the env-var risk. CYBRET resolves the chain across GitHub (PR rights), Vercel (auto-deploy configuration), and the env-var topology to surface the path. The remediation is layered: branch protection on Git, deployment protection on Vercel, environment splits on env vars.

How the integration works

One team-scoped access token.

The Vercel integration uses a team-scoped access token with read scope. We support both the official Vercel Marketplace integration flow (preferred for Vercel Cloud) and the manual-token flow for enterprise customers who manage tokens centrally.

  1. Open the CYBRET console and go to Integrations → Vercel.
  2. Click Install Vercel Marketplace integration. You'll be redirected to Vercel to authorize CYBRET against the team.
  3. Or, for manual configuration: create a personal access token in your Vercel team settings, scoped to the team, and paste it into the CYBRET vault.
  4. Select the projects in scope. We recommend team-wide for first build; per-project scoping is supported for trial.
  5. Configure deployment webhooks pointing at the CYBRET runtime endpoint. CYBRET provides the URL and verification token.
  6. The first inventory pass typically completes inside ten minutes. Vercel nodes appear in Exposure Intelligence as edge function code indexes.

Disconnect by uninstalling the Marketplace integration or revoking the access token. CYBRET stops ingesting at the next poll.

Permissions and data scope

Read-only. Env-var names but never values.

The integration uses a team-scoped read access token. Nothing in the default scope grants a write to projects, deployments, env vars, or domains. Edge function source is read; environment-variable values are not. The Vercel API itself doesn't return decrypted values to the access token; we don't request the encrypted blob either. There is no agent installed on Vercel's side.

For runtime detection, deployment webhooks deliver events to the customer-tenancy CYBRET deployment over TLS with a per-tenant verification token. Customers running CYBRET self-hosted in an air-gapped configuration can ingest webhooks via an outbound proxy that they control.

How Vercel maps to the three CYBRET products

Where Vercel data shows up in the platform.

Exposure Intelligence is the product that benefits most. The reachable-path engine treats Vercel preview deployments as first-class nodes in the graph and resolves env-var schema and edge function code into the application layer of the path. Vercel-only customers (small teams shipping marketing or product front-ends) often see the highest-impact findings on first connect.

Validation uses Vercel context to issue proof-of-exploit against the right alias. When CYBRET claims a preview deployment leaks a production secret, Validation issues the request against the preview URL with a non-destructive observability call rather than a destructive payload.

Runtime Detection consumes deployment webhooks and the audit log to flag suspicious deployments in flight. A deployment that adds a new env-var reference, exposes a new route, or changes the production alias becomes a runtime event tied to the affected paths.

FAQ

Questions security engineers actually ask.

How does authentication work?

A team-scoped Vercel access token, held in a per-tenant CYBRET vault. The Marketplace install flow is preferred for Vercel Cloud; manual tokens are supported for enterprise customers who centralize token management.

Where does the Vercel data live?

Inside the CYBRET deployment in your VPC. EU customers run an EU-resident control plane; US customers run a US one. We do not move Vercel data to a multi-tenant SaaS backend.

Do you read environment-variable values?

No. We read variable names and the environments they apply to. Values are never requested or stored. Edge function source is read into the analysis sandbox in your CYBRET tenant.

Vercel Pro vs Enterprise?

Both supported. Enterprise customers benefit additionally from CYBRET's reasoning over Audit Logs and Deployment Protection configuration; Pro customers get the inventory and edge analysis paths.

How do you handle Vercel API rate limits?

CYBRET respects the standard rate-limit envelope and uses concurrency limits per project. Teams with thousands of projects complete first build inside a few hours; deployment indexing is incremental from then on.

Self-hosted alternative (Netlify, Cloudflare Pages)?

On the integrations roadmap. Cloudflare Pages support is in beta with the same scopes model. Netlify is planned next.

Next step

Connect Vercel →

Preview deployments become first-class in the attack graph. The first env-var-leak path usually resolves inside the first hour.

Connect VercelSee Exposure Intelligence