⚠️ This snapshot is over 30 days old — treat the grade as stale until the next refresh. Re-scan locally to verify.
Trust Card · Static snapshot
upstash__context7 D
40/100 · 12 findings (6 critical) · scope excessive · Ranked #46 of 53 scanned.
Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream upstash/context7 @ 9ab8554 (2026-09-09)
Score breakdown
Score constrained by 6 critical and 6 high-severity findings.
Fix first (12 critical/high)
| Severity | Rule | Finding | Remediation |
|---|---|---|---|
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/cli/src/commands/upgrade.ts:35Evidence: const child = spawn(command, args, { | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secretpackages/mcp/test/integration.test.ts:278Evidence: const apiKey = "ctx7sk-advertised-header-test"; | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/sdk/src/commands/get-context/index.test.ts:48Evidence: await expect(command.exec(requesterWith("documentation text"))).resolves.toBe( | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/sdk/src/commands/search-library/index.test.ts:24Evidence: await expect(command.exec(requesterWith(apiResult))).resolves.toEqual([ | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/sdk/src/commands/search-library/index.test.ts:42Evidence: const result = await command.exec(requesterWith(apiResult)); | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| CRITICAL | AT-SEC-003 (ASI02) | Unbounded Dynamic Shell Executionpackages/sdk/src/commands/search-library/index.test.ts:51Evidence: const error = await command.exec(requesterWith(undefined)).catch((e) => e); | Strictly restrict shell execution to an immutable allowlist of binary commands with explicit argument arrays, or execute inside microVM sandboxes. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/cli/src/utils/auth.ts:215Evidence: return await fetch(url, { | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/mcp/src/lib/api.ts:130Evidence: const response = await fetch(url, { headers, signal: AbortSignal.timeout(API_TIMEOUT_MS) }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/mcp/src/lib/api.ts:163Evidence: const response = await fetch(url, { headers, signal: AbortSignal.timeout(API_TIMEOUT_MS) }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/pi/lib/api.ts:43Evidence: const response = await fetch(url, { headers: authHeaders() }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/pi/lib/api.ts:55Evidence: const response = await fetch(url, { headers: authHeaders() }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresspackages/sdk/src/http/index.ts:132Evidence: response = await this.fetch(url, { ...init, headers }); | Define an explicit egress domain allowlist and block private IP ranges (127.0.0.1, 10.0.0.0/8, 169.254.169.254). |
Permissions
Scope: excessive · Shell: enabled · Network egress: yes · File deletion: enabled · Human approval: none
Provenance
License: MIT · Lockfile: yes · Security policy: yes · Signals: present (documentary, not a safety verdict)
Independently scanned by the AgentTrust registry (not self-reported by the project). Static analysis only — no code executed, findings need human triage, counts may include test/example code. Static snapshot; re-scan before relying on it: npx @eulogik/agenttrust scan https://github.com/upstash/context7. Scores move with every upstream commit; pages refresh weekly. How scoring works.