⚠️ 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
ahujasid__blender-mcp F
35/100 · 9 findings (3 critical) · scope excessive · Ranked #52 of 53 scanned.
Scanned 2026-09-09 · engine v0.1.0 (8 regex rules, OWASP-mapped) · upstream ahujasid/blender-mcp @ 5f8ddaf (2026-09-07)
Score breakdown
Score constrained by 3 critical and 6 high-severity findings.
Fix first (9 critical/high)
| Severity | Rule | Finding | Remediation |
|---|---|---|---|
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationsrc/blender_mcp/safe_mode.py:196Evidence: "eval": "eval() executes arbitrary expressions", | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| CRITICAL | AT-SEC-002 (LLM02) | Hardcoded Credential or API Secrettests/test_polypizza.py:17Evidence: API_KEY = "test-key-not-a-real-one" | Move credentials to secure environment variables or a key vault. Never commit API keys. |
| CRITICAL | AT-SEC-004 (ASI05) | eval() / Function Constructor Invocationtests/test_safe_mode.py:146Evidence: "eval": "eval('1+1')", | Eliminate eval(). Use safe AST parsers or isolated sandboxes (e.g. E2B Firecracker microVMs). |
| HIGH | AT-SEC-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationaddon.py:1578Evidence: os.unlink(tmp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egressaddon.py:1414Evidence: response = requests.get(url, params=params, headers=REQ_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). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egressaddon.py:3005Evidence: response = requests.get(url, headers=headers, params=params, timeout=30) | 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-005 (ASI02) | Unrestricted Recursive File Deletion / Modificationsrc/blender_mcp/bundled/addon.py:1578Evidence: os.unlink(tmp_path) | Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions. |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresssrc/blender_mcp/bundled/addon.py:1414Evidence: response = requests.get(url, params=params, headers=REQ_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). |
| HIGH | AT-SEC-006 (LLM06) | Unfiltered SSRF / Arbitrary Network Egresssrc/blender_mcp/bundled/addon.py:3005Evidence: response = requests.get(url, headers=headers, params=params, timeout=30) | 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: no · Security policy: no · Signals: unverified origin
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/ahujasid/blender-mcp. Scores move with every upstream commit; pages refresh weekly. How scoring works.