browse
Verdict safe, but 7 findings (4 medium, 3 low), mainly command injection, data exfiltration, policy violation. Most recent scan 2026-02-05.
The skill provides legitimate browser automation functionality using the Stagehand CLI and Browserbase platform, but contains several MEDIUM severity security concerns. Primary issues include: (1) credential management practices that create multiple copies of API keys across the filesystem without security guidance, (2) demonstration of arbitrary JavaScript execution via page.evaluate() without injection warnings, and (3) dependency management recommendations using version ranges that allow automatic updates, creating supply chain risk. The skill also has documentation issues including missing referenced files and truncated content. While the core functionality appears legitimate, the security guidance is insufficient for a skill that handles credentials and executes code in browser contexts. Users following this skill could inadvertently create insecure automation functions.
Scanner's overall assessment (LLM analyzer)
Second scanner: NVIDIA SkillSpector
The two scanners disagree: Cisco found nothing and SkillSpector says do not install. One of them has a blind spot here; read the skill before trusting either. How the two scanners compare across the whole corpus: Two scanners, one corpus.
What this skill does
Complete guide for creating and deploying browser automation functions using the stagehand CLI
- Package
- 7 files, 43 KB
- SKILL.md
- 1352 words, 12+ sections
- Code
- None. Instructions only.
- Requires
- bins:
stagehand; env:BROWSERBASE_API_KEYBROWSERBASE_PROJECT_ID - Homepage
- https://browserbase.com
SKILL.md covers: Browser Automation & Functions Skill · When to Use · Prerequisites · Set Up Credentials · Complete Workflow · Step 1: Explore the Site Interactively · Step 2: Initialize Function Project · Step 3: ⚠️ FIX package.json IMMEDIATELY · Step 4: Write Automation Code · Step 5: Test Locally · Step 6: Deploy to Browserbase · or: stagehand fn publish index.ts
Findings
MEDIUM CODE EXECUTION detected by YARA Command Injectionstatic
Detects dangerous code execution patterns in agent skills (Python/Bash): eval(selector, els => els.map(el => el.textContent)
SKILL.md:246
const data = await page.$$eval(selector, els =>MEDIUM Hardcoded API Credentials in Environment Configuration Data Exfiltrationllm
The skill requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID environment variables and instructs users to run 'stagehand fn auth login' which stores credentials in ~/.stagehand/config.json. The workflow then copies these credentials to .env files in project directories. This creates multiple copies of sensitive credentials across the filesystem, increasing exposure risk. Additionally, the skill does not provide guidance on securing these credentials or cleaning them up after use.
SKILL.md
```yaml
requires:
env: ['BROWSERBASE_API_KEY', 'BROWSERBASE_PROJECT_ID']
```
```bash
stagehand fn auth login # Stores in ~/.stagehand/config.json
# Later copied to .env files in each project
```MEDIUM Arbitrary JavaScript Execution via page.evaluate() Command Injectionllm
The skill demonstrates using page.evaluate() to execute arbitrary JavaScript in the browser context without input validation or sandboxing guidance. The example shows 'Complex extraction logic' as a placeholder, which could lead users to implement unsafe code execution patterns. Combined with user-controlled parameters (params object), this creates a code injection risk if users pass unsanitized input directly into evaluate() calls.
SKILL.md
```typescript
const data = await page.evaluate(() => {
// Complex extraction logic
r
```
The code snippet is incomplete but demonstrates evaluate() usage without security guidance. Users may implement: `page.evaluate(params.userCode)` leading to arbitrary code execution.MEDIUM Dependency Version Unpinning Recommendation Creates Supply Chain Risk Unauthorized Tool Usellm
The skill explicitly instructs users to change dependency versions from 'latest' to caret ranges (^0.0.5, ^1.58.0) in the package.json fix. While this is better than 'latest', caret ranges still allow automatic minor/patch updates that could introduce malicious code or breaking changes. For security-critical browser automation with credential access, this creates supply chain attack surface. The skill also references '@browserbasehq/sdk-functions' version ^0.0.5 which is a pre-1.0 package with unstable API guarantees.
SKILL.md
```json
"dependencies": {
"@browserbasehq/sdk-functions": "^0.0.5",
"playwright-core": "^1.58.0"
}
```
Caret (^) allows: 0.0.5 → 0.0.x updates, 1.58.0 → 1.x.x updates. Pre-1.0 versions are particularly unstable.LOW Skill does not specify a license Policy Violationstatic
Skill manifest does not include a 'license' field. Specifying a license helps users understand usage terms.
SKILL.md
LOW Missing allowed-tools Declaration Data Exfiltrationllm
The skill does not declare an 'allowed-tools' field in the YAML manifest, making it unclear which agent capabilities are required or safe to use. While this field is optional per the agent skills specification, its absence reduces transparency about the skill's intended tool usage, particularly given that the skill involves external binary execution (stagehand CLI) and credential management.
SKILL.md
YAML manifest shows:
- allowed-tools: Not specified
But skill uses: Bash commands (stagehand CLI), file operations (.env, package.json), external binary executionLOW Missing Referenced Files Without Explanation Social Engineeringllm
The skill references four Python files (a.py, generated.py, invocation.py, page.py) that are not found in the package. The instruction body appears to be truncated (ends with 'r' mid-word), suggesting incomplete documentation. While not directly malicious, this creates confusion about the skill's completeness and may indicate packaging errors or missing components.
SKILL.md
Referenced files not found:
- a.py
- generated.py
- invocation.py
- page.py
Instruction body truncated at: '// Complex extraction logic\n r'What is in the package
| File | Kind | Size |
|---|---|---|
README.md | doc | 594 B |
SKILL.md | doc | 11 KB |
skills/auth/SKILL.md | doc | 4.2 KB |
skills/browser-automation/SKILL.md | doc | 11 KB |
skills/create/SKILL.md | doc | 4.5 KB |
skills/fix/SKILL.md | doc | 4.8 KB |
skills/functions/SKILL.md | doc | 6.9 KB |
External hosts referenced
api.browserbase.com browserbase.com news.ycombinator.com slow-site.com
Hostnames that appear in the skill's files. Referencing a host is not a finding; compare against the findings above and the skill's stated purpose.
Environment variables referenced
BROWSERBASE_CONNECT_URL BROWSERBASE_API_KEY BROWSERBASE_DEBUG_URL BROWSERBASE_PROJECT_ID
Package contents recorded 2026-10-22. The scan above ran against the version current at scan time; the two can differ if the skill has since been updated.
What we checked
- Static analyzer. Pattern rules over SKILL.md and bundled files: known-bad commands, exfiltration URLs, secrets, obfuscation.
- Behavioral analyzer. Checks what the skill asks the agent to do against what its description claims it does.
- Llm analyzer. A language model reads the skill and reports intent-level issues the rules cannot express.
- Trigger analyzer. Looks for instructions that fire on conditions the user did not ask for.
- Meta analyzer. A second model pass that validates, deduplicates and re-scores the other analyzers' findings.
What we did not check
- Runtime behaviour. The skill was not executed; findings come from reading its files.
- Anything fetched at install or run time, including remote scripts, package dependencies, and URLs the skill tells the agent to open.
- Content the analyzers cannot read: images, binaries, and some non-English text.
- Known scanner bypass classes. See the methodology and limitations page.
Sources
- Repository: https://clawhub.ai/skills/browse
- Raw scan result: browserbase-scan.json
- Badge for your README:
 - Request a re-scan