Back to skill

Security audit

GraphCare — Structural Database Health Scanner

Security checks for vulnerabilities and agentic risk

Overview

This database scanner is mostly coherent, but confirmed SQLite parsing flaws and vulnerable database dependencies make it a review-before-install package.

Review this package before installing. Use only read-only database credentials, do not point it at untrusted MySQL servers or SQLite files, and prefer an updated release that fixes the SQLite identifier handling and vulnerable dependencies.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:568
Finding

SQL Statement Injection Through Unescaped SQLite Schema Identifiers

Content
View full analysis
0 ? idxInfo[0].values.map((r) => r[2]) : []; indexes.push({ name: idxName, columns: cols }); } // Check if any index is a prefix of another for (let i = 0; i < indexes.length; i++) { for (let j = 0; j < indexes.length; j++) { if (i === j) continue; const a = indexes[i].columns; const b = indexes[j].columns; if (a.length < b.length && a.every((col, k) => col === b[k])) { duplicates.push({ table: t, redundant: indexes[i].name, kept: indexes[j].name }); } } } } return duplicates; } ``` Additional vulnerable SQLite metadata queries use the same interpolation pattern: ```js for (const t of report.tables) { const fks = db.exec(`PRAGMA foreign_key_list('${t}')`); const idxList = db.exec(`PRAGMA index_list('${t}')`); if (idxList.length > 0) { for (const idxRow of idxList[0].values) { const idxName = idxRow[1]; const idxInfo = db.exec(`PRAGMA index_info('${idxName}')`); if (idxInfo.length > 0) { for (const colRow of idxInfo[0].values) { indexedColumns.add(`${t}.${colRow[2]}`.toLowerCase()); } } } } } // Tables without primary keys for (const t of report.tables) { const info = db.exec(`PRAGMA table_info('${t}')`); if (info.length > 0) { ...[truncated 3906 chars]
Remediation
View remediation
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
Findings (14)

Known Vulnerable Dependency: fast-uri==3.1.0 — 7 advisory(ies): CVE-2026-13676 (fast-uri vulnerable to host confusion via failed IDN canonicalization); CVE-2026-18446 (fast-uri vulnerable to host confusion via backslash authority introducer); CVE-2026-75975 (fast-uri vulnerable to server-side request forgery via malformed IPv6 normalizat) +4 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

fast-uri 3.1.0 is present and has multiple host parsing and SSRF-related advisories. The risk is real at the dependency level, but impact is moderated here because this skill is described as a database schema scanner, not a network fetcher; exploitability depends on whether any SDK or surrounding code uses fast-uri on attacker-supplied URLs.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: hono==4.12.8 — 16 advisory(ies): CVE-2026-56762 (Hono missing validation of cookie name on write path in setCookie()); CVE-2026-47676 (Hono: app.mount() strips mount prefix using undecoded path, causing incorrect ro); CVE-2026-47675 (Hono: Cookie helper does not sanitize sameSite and priority, allowing Set-Cookie) +13 more

High
Category
Supply Chain
Confidence
85% confidence
Finding

hono 4.12.8 is directly present as a transitive dependency of the MCP SDK and carries numerous advisories affecting routing, cookies, and request handling. While not all issues will be reachable in this database-oriented skill, the dependency is genuinely vulnerable and increases attack surface if the skill uses streamable HTTP or web-facing MCP transports.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ip-address==10.1.0 — 2 advisory(ies): CVE-2026-69192 (ip-address: Address4 decodes leading-zero octets as decimal while resolvers deco); CVE-2026-42338 (ip-address has XSS in Address6 HTML-emitting methods)

High
Category
Supply Chain
Confidence
80% confidence
Finding

ip-address 10.1.0 is present via express-rate-limit and has advisories involving leading-zero parsing ambiguity and HTML-emitting XSS methods. This is a real dependency issue, but in this skill context it is less likely to be directly exploitable unless code renders library-produced HTML or relies on IP normalization for trust decisions.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: mysql2==3.20.0 — 2 advisory(ies): GHSA-3f6p-5ww8-9rcr (MySQL2: Auth Plugin Downgrade to mysql_clear_password Leaks Plaintext Credential); GHSA-rgwj-5xj2-c3m3 (MySQL2: Unbounded zlib inflate in compressed MySQL protocol handler allows decom)

High
Category
Supply Chain
Confidence
93% confidence
Finding

mysql2 3.20.0 is a direct runtime dependency and the cited advisories affect authentication downgrade to mysql_clear_password and decompression-related denial of service. This is especially relevant because the skill explicitly supports MySQL, so vulnerable code paths are likely reachable when connecting to attacker-controlled or hostile database endpoints.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: path-to-regexp==8.3.0 — 2 advisory(ies): CVE-2026-4923 (path-to-regexp vulnerable to Regular Expression Denial of Service via multiple w); CVE-2026-4926 (path-to-regexp vulnerable to Denial of Service via sequential optional groups)

High
Category
Supply Chain
Confidence
80% confidence
Finding

path-to-regexp 8.3.0 is present and has ReDoS/DoS advisories related to crafted route patterns. The dependency risk is real, though actual exposure depends on whether the SDK’s HTTP routing layer processes attacker-controlled paths or dynamically constructed patterns in this deployment.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: mysql2==3.20.0 — 2 advisory(ies): GHSA-3f6p-5ww8-9rcr (MySQL2: Auth Plugin Downgrade to mysql_clear_password Leaks Plaintext Credential); GHSA-rgwj-5xj2-c3m3 (MySQL2: Unbounded zlib inflate in compressed MySQL protocol handler allows decom)

High
Category
Supply Chain
Confidence
97% confidence
Finding

The resolved mysql2 version is reported as 3.20.0 with known advisories, including plaintext credential exposure via auth plugin downgrade and resource-exhaustion risk from unbounded zlib inflate. In a database-scanning skill that connects to external MySQL servers, this is especially relevant because the package directly handles database authentication and protocol traffic, increasing the chance of credential compromise or denial of service when interacting with malicious or compromised servers.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
75% confidence
Finding

Docker image references without a specific tag (:latest is implicit) or digest (@sha256:...) can be silently replaced by a malicious image.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @hono/node-server==1.19.11 — 2 advisory(ies): CVE-2026-39406 (@hono/node-server: Middleware bypass via repeated slashes in serveStatic); GHSA-frvp-7c67-39w9 (Node.js Adapter for Hono: Path traversal in `serve-static` on Windows via encode)

Low
Category
Supply Chain
Confidence
84% confidence
Finding

The lockfile pins @hono/node-server 1.19.11, and the reported advisories affect static file serving and path normalization behavior. In this skill’s context, package-lock.json itself is not executable, but the dependency is genuinely present and could become reachable if the MCP server exposes HTTP/static endpoints through the SDK stack.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: body-parser==2.2.2 — 1 advisory(ies): CVE-2026-12590 (body-parser vulnerable to denial of service when invalid limit value silently di)

Low
Category
Supply Chain
Confidence
78% confidence
Finding

body-parser 2.2.2 is present transitively and has a reported denial-of-service condition around invalid limit handling. This is a real dependency risk, though the practical exploitability depends on whether the skill runs an HTTP endpoint that accepts attacker-controlled request bodies via the MCP SDK’s Express stack.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: qs==6.15.0 — 3 advisory(ies): CVE-2026-82417 (qs: Denial of Service via Attacker Controlled isBuffer); CVE-2026-8723 (qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/u); CVE-2026-82562 (qs array-limit bypass via bracket-key comma parsing)

Low
Category
Supply Chain
Confidence
76% confidence
Finding

qs 6.15.0 is present and has reported denial-of-service and parsing-bypass issues. In this skill’s context the impact is limited unless the MCP server exposes HTTP query/body parsing to remote users, but the vulnerable dependency is genuinely included in the lockfile.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 14)May include surrounding context.

json
"start": "node index.js"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "pg": "^8.13.0",
    "mysql2": "^3.11.0",
    "sql.js": "^1.10.0"

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 15)May include surrounding context.

json
},
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "pg": "^8.13.0",
    "mysql2": "^3.11.0",
    "sql.js": "^1.10.0"
  },

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 16)May include surrounding context.

json
"dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0",
    "pg": "^8.13.0",
    "mysql2": "^3.11.0",
    "sql.js": "^1.10.0"
  },
  "keywords": ["mcp", "database", "health", "audit", "graphcare"],

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
40% confidence
Finding

Dependencies lack version pinning, allowing potential malicious package updates. Consider pinning versions.

Content

Scanner excerpt · package.json (reported line 17)May include surrounding context.

json
"@modelcontextprotocol/sdk": "^1.0.0",
    "pg": "^8.13.0",
    "mysql2": "^3.11.0",
    "sql.js": "^1.10.0"
  },
  "keywords": ["mcp", "database", "health", "audit", "graphcare"],
  "license": "MIT"

Static analysis

No suspicious patterns detected.