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.
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.