Grades are a hygiene check, not a security guarantee.

MCP, MCP server

squirrelscan

The website QA tool for your coding agent

Compatibility: Not stated.

Grade D

Two or more Medium findings, or a High finding. Only try it in a sandbox.

Graded by PlugVetRubric v2

Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.

Rescanned at commit 02c57de5b715.

INSTALL_REMOTE_SCRIPT OBFUSCATION_ENCODED_BLOB

Why this grade

  • INSTALL_REMOTE_SCRIPT Medium

    Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).

    install.sh, line 19 exec bash -c 'curl -fsSL --proto "=https" --proto-redir "=https" --tlsv1.2 --max-redirs 3 https://install.squirrelscan.com/install.sh | bash'

  • OBFUSCATION_ENCODED_BLOB Medium

    Contains a long base64 shaped string in a file that should be readable.

    CHANGELOG.md, line 1 # Changelog

Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.

If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.

Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.

What was checked

Plain notes from the hygiene checks.

  • Permissions

    Pass

    No shell or command execution found, and no extra permission was declared.

  • Install and update

    Serious

    install fetches a script from the network. The docs document an installer that pipes a download into a shell.

    INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER

    install.sh, line 19

    exec bash -c 'curl -fsSL --proto "=https" --proto-redir "=https" --tlsv1.2 --max-redirs 3 https://install.squirrelscan.com/install.sh | bash'

    install.sh, line 29

    # Usage: curl -fsSL https://install.squirrelscan.com/install.sh | bash

    install.sh, line 30

    # Or: curl -fsSL https://raw.githubusercontent.com/squirrelscan/squirrelscan/main/install.sh | bash

    Show more

    .github/workflows/test-install.yml, line 94

    curl -fsSL '$INSTALL_URL' | bash

    .github/workflows/test-install.yml, line 236

    curl -fsSL '$INSTALL_URL' | bash

    .github/workflows/test-install.yml, line 375

    curl -fsSL '$INSTALL_URL' | bash

    .github/workflows/test-install.yml, line 547

    curl -fsSL '$INSTALL_URL' | bash

    npm/bin/squirrel.js, line 53

    console.error(" curl -fsSL https://install.squirrelscan.com | bash");

    scripts/install-contract.test.ts, line 780

    `exec bash -c 'curl -fsSL --proto "=https" --proto-redir "=https" --tlsv1.2 --max-redirs 3 https://install.squirrelscan.com/install.sh | bash'`,

    README.md, line 87

    curl -fsSL https://install.squirrelscan.com | bash

    docs/agent-setup/prompt.mdx, line 22

    curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

    docs/developers/agents/claude-code.mdx, line 17

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/codex.mdx, line 17

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/copilot.mdx, line 19

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/cursor.mdx, line 17

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/gemini-cli.mdx, line 17

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/opencode.mdx, line 17

    curl -fsSL https://install.squirrelscan.com | bash

    docs/developers/agents/windsurf.mdx, line 19

    curl -fsSL https://install.squirrelscan.com | bash

    docs/guides/ci.mdx, line 58

    curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

    docs/guides/ci.mdx, line 72

    - curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

    docs/guides/ci.mdx, line 85

    curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

    docs/guides/local-audits-cli.mdx, line 18

    curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

    docs/quickstart.mdx, line 14

    curl -fsSL --connect-timeout 10 --max-time 120 https://install.squirrelscan.com | bash

  • Network

    Concern

    can reach a host that is not written as a fixed address. can reach api.example.com. The description does not name that host.

    NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST

    install.sh, line 43

    # Transport hardening for every curl this script runs. curl's own defaults will

    install.sh, line 51

    # --tlsv1.2 is the youngest of the four and landed in curl 7.34 (2013), below

    install.sh, line 183

    command -v curl >/dev/null 2>&1 || return 0

    Show more

    install.sh, line 220

    # installer. `( cmd & )` backgrounds curl and lets the subshell exit

    install.sh, line 221

    # immediately (non-blocking); curl is reparented to init so it still gets to

    install.sh, line 224

    ( curl "${CURL_TLS_ARGS[@]}" -fsS -m 3 --connect-timeout 2 -X POST \

    install.sh, line 245

    # stand-in has to serve TLS that the running curl already trusts.

    install.sh, line 797

    command -v curl >/dev/null 2>&1 || error "curl is required but not installed"

  • Secrets

    Concern

    reads a credential or environment file.

    SECRETS_ENV_READ SECRETS_PATH_DOTENV

    apps/cli/scripts/benchmark-lighthouse.ts, line 174

    if (!process.env.GOOGLE_PSI_API_KEY) {

    apps/cli/src/benchmark/pagespeed.ts, line 40

    const apiKey = options.apiKey ?? process.env.GOOGLE_PSI_API_KEY;

    scripts/install-contract.test.ts, line 348

    env: { ...process.env, NO_TELEMETRY: "1", ...env } as Record<string, string>,

    Show more

    .gitignore, line 6

    .env

    docs/developers/mcp-clients.mdx, line 120

    `${env:NAME}` interpolates a shell/system environment variable at connect time. Cursor does not read a `.env` file for remote servers, so export `SQUIRRELSCAN_API_KEY` in your shel

  • Agent instructions

    Pass

    No instruction to ignore earlier instructions or to hide a step.

  • Obfuscation

    Concern

    contains an encoded blob in a file that should be readable.

    OBFUSCATION_ENCODED_BLOB

    CHANGELOG.md, line 1

    # Changelog

    bun.lock, line 1

    {

    apps/cli/tests/crawler/tls-fallback.test.ts, line 1

    import type { DocumentFetcher, FetchResponse } from "@squirrelscan/fetchers";

    Show more

    packages/utils/src/agent-skills/bundle.generated.ts, line 37

    "content": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAHhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAAAZAAAAAQAA

    packages/utils/src/agent-skills/bundle.generated.ts, line 90

    "content": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAHhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAAAZAAAAAQAA

  • Licence

    Pass

    A licence file is present (LICENSE).

  • Maintainer activity

    Pass

    The latest commit is within the last 365 days.

Note

Hygiene check of commit 02c57de5b715. install fetches a script from the network. can reach a host that is not written as a fixed address. can reach api.example.com. The description does not name that host. reads a credential or environment file. contains an encoded blob in a file that should be readable.

Date and source

Date checked:

View source

github.com

Commit graded: 02c57de5b71587d0e25c1e4255ae0db2d26d3f2b

This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.

Read how this letter is chosen