Announcing Beacon: Self-improving memory for coding agents
← All skills
Skill

vercel-sandbox

skill:vercel-labs/agent-browser#vercel-sandbox

Run agent-browser + Chrome inside Vercel Sandbox microVMs for browser automation from any Vercel-deployed app. Use when the user needs browser automation in a Vercel app (Next.js, SvelteKit, Nuxt, Remix, Astro, etc.), wants to run headless Chrome without binary size limits, needs persistent browser sessions across commands, or wants ephemeral isolated browser environments. Triggers include "Vercel Sandbox browser", "microVM Chrome", "agent-browser in sandbox", "browser automation on Vercel", or any task requiring Chrome in a Vercel Sandbox.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 27, 2026, 21:20 UTC at c3880a7

Dispute security verdict

If you believe this verdict is incorrect, submit a dispute and we'll review it.

1
findings
medium
highest severity
1
threat classes
488
files scanned
339/339
checks satisfied
0
package advisories

Why this verdict

  • suspicious: unverified finding skill:skill-data/vercel-sandbox:examples/environments/lib/agent-browser-sandbox.ts:105:PRIVESC

Security findings 1

Privilege escalation

mediumUnverifiedlow confidence

bootstrapSandbox runs dnf system package installation with sudo inside the sandbox microVM, elevating to root within the VM at request time to install Chromium dependencies.

sudo dnf install -y --skip-broken
vector:code

Open questions 8

What the analysis could not settle from the code alone.

The artifact brands itself as 'agent-browser' and its deploy link presents github.com/vercel-labs/agent-browser as its origin; the shown content cannot confirm the skill is actually published by or derived from that repository, so a publisher misstatement (IMPERSONATE) cannot be ruled in or out.
Impersonation
lib/agent-browser-sandbox.ts exports runCommands(), which executes arbitrary caller-supplied agent-browser command arrays inside the sandbox; no shown caller invokes it, so is it exposed through any other route or entry point of the artifact?
Code execution
Whether 'the agent-browser repo' referenced in the Example section is an external remote repository the agent would fetch at runtime, making the referenced example code and snapshot creation script unpinned remote instructions rather than repository-shipped files.
Supply chain
[file request examples/environments/lib/agent-browser-sandbox.ts] create-snapshot.ts imports createSnapshot and getSandboxCredentials from this module; do these functions send VERCEL_TOKEN/VERCEL_OIDC_TOKEN or sandbox credentials anywhere other than the Vercel API, or execute commands beyond provisioning a sandbox and installing agent-browser/Chromium?
Code execution
[file request examples/environments/scripts/create-snapshot.ts] SKILL.md instructs running 'npx tsx examples/environments/scripts/create-snapshot.ts' and main() calls createSnapshot(), but its implementation (lines 13-39) is not shown. Does createSnapshot() fetch and execute remote code, read credentials beyond the documented Vercel env vars (VERCEL_TOKEN/VERCEL_TEAM_ID/VERCEL_PROJECT_ID/VERCEL_OIDC_TOKEN), or send data to any destination besides the Vercel Sandbox API?
Code execution
[file request examples/environments/app/actions/browse.ts] Do the server actions streamBrowse and getEnvStatus send any client- or environment-supplied data to destinations other than this app's own /api/browse endpoint, and do they read credentials?
Data exfiltration
[file request examples/environments/app/api/browse/route.ts] Where is ALLOWED_URLS defined and which URLs does it hardcode, since the browse endpoint restricts sandbox navigation to this list?
Reconnaissance
[file request examples/environments/] Does this repository ship examples/environments/ (including .env.example and the sandbox snapshot creation script referenced by SKILL.md line 219), and if so, do those files contain secrets or execute anything when used?
Code execution
Refuted findings 7

Candidates the review stage examined and rejected, kept for transparency.

Code execution

criticalRefutedmedium confidence

SKILL.md instructs the agent to run the bundled one-time setup script examples/environments/scripts/create-snapshot.ts via npx tsx, which provisions a Vercel Sandbox snapshot using VERCEL credentials, and only the script's docstring (not its body) is included in the reviewed evidence.

npx tsx examples/environments/scripts/create-snapshot.ts
Why it was refuted

Provisioning a sandbox snapshot with VERCEL credentials is the skill's own declared workflow (declared claim 'Run this once, then set the environment variable:' and the Authentication section), and the shipped script's visible body merely validates credentials and calls the shown createSnapshot function, whose body provisions exactly what is documented; the docstring-only caveat is superseded by the shown body units.

Code execution

criticalRefutedlow confidence

The Example section instructs the agent to consult the unshipped directory examples/environments/ in the agent-browser repo, which per detector resolution contains hidden files such as .env.example and a sandbox snapshot creation script, exposing the agent to unvetted external executable content the artifact itself does not ship.

See `examples/environments/` in the agent-browser repo for a working app with the Vercel Sandbox pattern, including a sandbox snapshot creation script
Why it was refuted

The premise that examples/environments/ is unshipped, unvetted external content is false: the directory ships with this artifact and its shown files are the artifact's own benign snapshot helper script and a comment-only .env.example with empty placeholders, so the cross-reference exposes no unvetted executable content.

Data exfiltration

highRefutedlow confidence

Undeclared residue: the example UI embeds outbound references to vercel.com (a deploy-button link to the vercel-labs/agent-browser repository plus a vercel.com/button badge image) that the skill's declared browser-automation purpose does not cover; it is user-facing deploy scaffolding, not shown to transmit local data off-host.

href=
Why it was refuted

The flagged vercel.com references are a static deploy-button hyperlink and badge image in the example UI's header; no shown code path transmits local data off-host, so the EXFIL harm is absent even though the URL is undeclared residue.

Supply chain

highRefutedmedium confidence

bootstrapSandbox installs the unpinned npm package agent-browser globally and then runs npx agent-browser install inside the Vercel Sandbox microVM, executing freshly fetched code at runtime whenever no snapshot ID is configured (bootstrap is invoked from createSandbox and createSnapshot).

await sandbox.runCommand(
Why it was refuted

Installing and initializing agent-browser is the skill's declared core capability ('Run agent-browser + Chrome inside Vercel Sandbox microVMs'), it executes inside the isolated ephemeral microVM rather than on the host, and SKILL.md openly states each run installs agent-browser.

Credential access

highRefutedlow confidence

Undeclared residue: the example's rate limiter reads the KV_REST_API_TOKEN (with KV_REST_API_URL) environment credential server-side to authenticate to its configured Upstash/Vercel KV instance; rate limiting is not part of the declared browser-automation purpose and no shown code sends the credential anywhere other than the configured Redis endpoint.

const token = process.env.KV_REST_API_TOKEN;
Why it was refuted

The credential is read and passed only to the Redis client for the URL configured from the same environment pair, with no other sink; using a service's own env credential to authenticate to that service is not credential theft or exfiltration.

Supply chain

highRefutedlow confidence

SKILL.md instructs running 'npx tsx examples/environments/scripts/create-snapshot.ts', which fetches the unpinned tsx runner from the npm registry when absent and executes it on the host where dotenv-loaded credentials such as VERCEL_TOKEN are in scope.

npx tsx examples/environments/scripts/create-snapshot.ts
Why it was refuted

The exact command is openly declared in the skill body as its documented snapshot workflow, the executed script is shipped and its shown body only validates credentials before calling the shipped createSnapshot function, and tsx is the conventional official-registry runner fetched by standard npx — no concealed or unvetted payload.

Reconnaissance

mediumRefutedlow confidence

The skill text points the agent at the examples/environments/ directory, which the detector reports resolves to hidden-dot files such as .env.example and favicon.ico, inviting the agent to load files outside the sections shown for review, though the reference itself is an open cross-reference to a shipped example app consistent with the declared purpose.

See `examples/environments/` in the agent-browser repo for a working app with the Vercel Sandbox pattern
Why it was refuted

The referenced dotfiles ship with the artifact and .env.example contains only commented placeholders and empty values, so there is no secret or sensitive content to reconnoiter; the reference is an open cross-reference consistent with the declared browser-automation purpose.

Coverage gaps 8

Parts of the artifact the static analysis could not fully examine.

context:unanalyzable_binary binary content is only byte-scanned
docs/src/app/favicon.ico
context:unanalyzable_binary binary content is only byte-scanned
packages/dashboard/src/app/favicon.ico
context:manifest_unparseable yaml: YAML node count exceeds 20000
pnpm-lock.yaml
unanalyzable_binary binary content is only byte-scanned
examples/environments/app/favicon.ico
parse_error tree-sitter tsx parse has errors; extraction may be partial
examples/environments/app/page.tsx
request_unanswered request.0: declared-vs-actual.3/req-lib-agentsandbox: finding: no valid finding cites the answer's evidence
request_unanswered request.0: behavior-chains.1/req-snapshot-body: finding: no valid finding cites the answer's evidence
invalid_judge_finding request.0