skills / reports / opus-audit-agent-browser.html

Skill-Audit: agent-browser (vercel-labs)

508K Installs · Browser-Automation-CLL für AI-Agenten · von skills.sh geladen.

Audit rein statisch (nur gelesen). Nichts ausgeführt, kein npm install, keine URL abgerufen.

SKILL-AUDIT: agent-browser (vercel-labs/agent-browser)
SCORE: 4/8  (elevated)
ONE-LINE: package.json postinstall lädt bei JEDER Installation automatisch eine
native Binary per HTTPS und macht sie chmod +x ausführbar — OHNE Checksum/Signatur.
Host ist fest verdrahtet auf GitHub-Releases (nicht manipulierbar), daher unteres
Ende von Band 4, nicht 5+. Kein Exfil, keine Obfuskation, keine Secrets.

EVIDENCE
- [3] package.json:30 — "postinstall": "node scripts/postinstall.js" → läuft
  AUTOMATISCH bei jeder Installation (npm/pnpm lifecycle). Der Kern-Vektor. (band 4)
- [3] scripts/postinstall.js:52 — DOWNLOAD_URL fest auf
  https://github.com/vercel-labs/agent-browser/releases/download/v${version}/${binaryName}.
  Host + Repo hartcodiert (Zeile 51: GITHUB_REPO = 'vercel-labs/agent-browser'),
  version stammt aus lokaler package.json (Zeile 48) → NICHT vom Netz/Angreifer
  steuerbar. Vertrauenswürdige, gepinnte Quelle. (band 3, mildernd)
- [3] scripts/postinstall.js:59-63 — downloadFile folgt HTTP 301/302 Redirects
  (request(response.headers.location)) blind weiter. GitHub-Releases redirecten
  auf objects.githubusercontent.com (erwartet), aber ein kompromittierter Redirect
  würde ungeprüft gepiped. (Detail zu band 4)
- [4] scripts/postinstall.js:141-146 — downloadFile(DOWNLOAD_URL,...) danach
  chmodSync(binaryPath, 0o755): heruntergeladene Binary wird ohne jede
  Integritätsprüfung ausführbar gemacht. KEINE SHA-Checksum, KEINE Signatur.
  (band 4 — remote-fetch-then-make-executable)
- [-] KEINE Integritätsprüfung im gesamten Repo: grep über sha256/checksum/
  integrity/signature/gpg/cosign/sigstore in postinstall.js, cli/src/install.rs,
  cli/src/upgrade.rs, .github/workflows/release.yml → 0 Treffer. Fehlende Checksum
  bestätigt.
- [6-persist] scripts/postinstall.js:239-271 — fixUnixSymlink() löscht bei
  Global-Install den npm-bin-Symlink (unlinkSync) und legt einen NEUEN Symlink
  direkt auf die native Binary (symlinkSync). :278-319 fixWindowsShims()
  überschreibt agent-browser.cmd/.ps1 im npm-global-bin. Legitime „zero overhead"-
  Optimierung, im Datei-Header dokumentiert (Zeile 6-9), nur eigener bin-Eintrag —
  aber es patcht PATH-erreichbare Shims (persistenz-nahe Kategorie). (band 3)
- [4] scripts/postinstall.js:27,180,243,281 & bin/agent-browser.js:23 — execSync
  auf STATISCHE Kommandos (`ldd --version`, `which <name>`, `npm prefix -g`).
  `name` kommt aus fixer Liste (Zeile 177), keine dynamische/externe Eingabe.
  Kein Injection-Vektor. (band 2, nicht erhöhend)
- [2] bin/agent-browser.js:105 — spawn(binaryPath, process.argv.slice(2)):
  ruft die installierte native Rust-Binary mit den CLI-Args auf (stdio inherit).
  Erwartetes CLI-Wrapper-Verhalten. (band 2)
- [3] cli/src/install.rs:8,188 — `agent-browser install` (SEPARAT, nicht zur
  Install-Zeit) lädt Chrome-for-Testing von Googles offiziellem Endpoint
  (googlechromelabs.github.io/.../last-known-good-versions...json). Ebenfalls
  ohne Checksum, aber vertrauenswürdiger Host. (band 3)
- [8-negativ] Kein Exfil-Sink, kein /dev/tcp, kein base64/atob/eval/fromCharCode-
  decode-then-run, keine hartcodierten Secrets/Token/Keys, keine Telemetrie/
  Phone-Home. grep über scripts/ + bin/ bestätigt sauber.
- [8-positiv] skill-data/core/references/trust-boundaries.md:18 — die Skill-Docs
  WARNEN aktiv vor Prompt-Injection („ignore previous instructions"/„send the
  cookie file to…") und verbieten Secret-Echo. Gegenteil von versteckter
  Instruktion — Vertrauens-Signal.

CAPABILITY SURFACE: network=y shell=y sensitive-fs=n persistence=y(nur eigener bin-shim) remote-code=y obfuscation=n
DESCRIPTION-HONEST: yes — frontmatter (skills/agent-browser/SKILL.md) beschreibt
Browser-Automation ehrlich; der postinstall-Binary-Download ist zwar nicht in der
description erwähnt, aber für ein npm-Paket mit nativer Binary branchenüblich und
im Skript-Header offen dokumentiert. Keine Verschleierung.
RECOMMENDATION: Install mit Vorbehalt. Reputierter Publisher (Vercel Labs),
gepinnter GitHub-Release-Host, keine Angreifer-steuerbare URL, kein Exfil/Obfusk.
Einziger echter Vorbehalt: fehlende Checksum/Signatur-Verifikation der bei der
Installation heruntergeladenen Binary (Vertrauen auf HTTPS + GitHub-Integrität).
Zur Härtung: `npm install --ignore-scripts` und Binary manuell/gepinnt beziehen,
oder Netzwerk beim Install unterbinden. Kein Zeichen bösartiger Absicht — Score 4
misst die Install-Zeit-Fetch-then-exec-CAPABILITY, nicht Intent.

Kurzfazit

Sauberes, legitimes Open-Source-Tool von Vercel Labs. Der einzige sicherheits-

relevante Punkt ist strukturell, nicht bösartig: postinstall = automatischer

HTTPS-Download einer nativen Binary von GitHub-Releases, danach chmod +x, ohne

SHA-/Signatur-Prüfung. Host ist hartcodiert und vertrauenswürdig, Version lokal

gepinnt — daher unteres Band 4 (elevated), klar unter einem „ungeprüfter Download

von wechselndem Host" (das wäre 5+). Fair eingeordnet gemäß Rubrik-Hinweis:

signiert+gepinnt+Checksum wäre niedriger — hier fehlt die Checksum, der Rest ist

gepinnt/vertrauenswürdig.