Back to skill

Security audit

videomp3word MCP

Security checks for vulnerabilities and agentic risk

Overview

The skill largely does what it claims, but its HTTP server can bind publicly without authentication outside production, which needs review before installation.

Install only in a controlled environment. Set MCP_ACCESS_KEYS, bind HOST to 127.0.0.1 unless behind an authenticated proxy, use HTTPS for all non-local endpoints, use a dedicated upstream videomp3word account, avoid the Python SDK with remote http:// URLs, and update or override flagged dependencies before exposing the service.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
sdk/python/videomp3word_client.py:9
Finding

Python SDK Sends Bearer Credentials Without Enforcing HTTPS

Content
View full analysis
dict: payload = { "media_url": media_url, "outputs": list(outputs), "mode": mode, "export_formats": list(export_formats or ["json"]), } if metadata: payload["metadata"] = metadata request = urllib.request.Request( url=f"{self.base_url}/video_to_knowledge", data=json.dumps(payload).encode("utf-8"), headers=self._headers(), method="POST", ) with urllib.request.urlopen(request, timeout=self.timeout) as response: return json.loads(response.read().decode("utf-8")) def _headers(self) -> dict: headers = {"Content-Type": "application/json"} if self.bearer_token: headers["Authorization"] = f"Bearer {self.bearer_token}" return headers ``` ### Technical Analysis The Python SDK accepts an unrestricted caller-provided `base_url` and attaches the bearer token to requests made to that URL. It does not verify that a non-local endpoint uses HTTPS. Consequently, a URL beginning with `http://` can cause the authorization credential, media URL, metadata, and request parameters to be transmitted without transport encryption. The TypeScript service configuration applies HTTPS requirements to credential-bearing upstream services, but the distributed Python SDK does not provide equivalent protection. The network transmission itself ...[truncated 1366 chars]
Remediation
View remediation

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
src/config.ts:85
Finding

Server Can Bind Publicly Without Authentication Outside Production Mode

Content
View full analysis
value.trim()) .filter(Boolean) ); const nodeEnv = String(process.env.NODE_ENV || "").trim().toLowerCase(); if (nodeEnv === "production" && accessKeys.size === 0) { throw new Error("MCP_ACCESS_KEYS must be configured in production."); } return { host: process.env.HOST || "0.0.0.0", port: portValue, // ... accessKeys, }; ``` ```ts function isAuthorizedRequest(req: Request, config: ServerConfig): boolean { if (config.accessKeys.size === 0) return true; const authHeader = req.get("authorization") || ""; const match = authHeader.match(/^Bearer\s+(.+)$/i); if (!match) return false; return config.accessKeys.has(match[1].trim()); } ``` ```ts app.post("/video_to_knowledge", async (req, res) => { if (!isAuthorizedRequest(req, config)) { res.status(401).json({ error: "Unauthorized. Provide a valid bearer key." }); return; } try { const result = await platform.run(req.body); res.json(result); } catch (error) { const message = error instanceof Error ? error.message : "Video to knowledge failed."; res.status(400).json({ error: message }); } }); ``` ### Technical Analysis The service defaults to binding on `0.0.0.0`, making it reachable through all available network interfaces. At the same time, an empty `MCP_ACCESS_KEYS` set causes all requests to be accepted. Startup is blocked without access keys only when `NODE_ENV` is exactly `production`. Staging deployments, containers, manually launched services, and deployments that omit `NODE_ENV` can therefore expose the service without authentication. This violates least privilege because unauthenticated remote u ...[truncated 1627 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Note
Location
src/agents/knowledgeAgent.ts:78
Finding

Untrusted Transcript Content Is Embedded Directly Into LLM Instructions

Content
View full analysis
{ if (!this.modelClient.isEnabled()) return null; const chunkContext = chunks .map((chunk) => `Chunk ${chunk.index + 1}: ${clipText(chunk.text, 600)}`) .join("\n\n"); const messages = [ { role: "system" as const, content: "You are a structured knowledge extraction engine. Return JSON only. Preserve fidelity to the transcript and avoid fabrication. Use empty arrays or empty strings when a requested field has insufficient evidence.", }, { role: "user" as const, content: [ `Requested outputs: ${plan.requestedOutputs.join(", ")}`, `Execution mode: ${plan.modeProfile.mode}`, "Return this JSON shape exactly:", JSON.stringify({ summary: "", topics: [], key_points: [], action_items: [{ task: "", owner: "", deadline: "" }], qa_pairs: [{ question: "", answer: "" }], flashcards: [{ front: "", back: "" }], entities: [{ name: "", type: "" }], }), "Transcript excerpt:", clipText(transcript.text, 8000), "Chunk context:", chunkContext, ].join("\n\n"), }, ]; return this.modelClient.generateJson( messages, "qwen-plus" ); } ``` ### Technical Analysis The transcript and chunk context originate from a caller-selected remote media resource. Their content is therefore untrusted and potentially attacker-controlled. The code concatenates this content directly into the model's user message without strong data delimiters or an explicit instruction that comm ...[truncated 1779 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (36)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The described implementation performs authenticated outbound requests with session cookies and optional API keys to specific upstream transcription routes, but the manifest emphasizes broader knowledge outputs instead of these sensitive network actions. In context, this is more dangerous because the skill processes remote media URLs and credential-bearing requests, so misleading descriptions can mask exfiltration, privacy, and unauthorized third-party processing risks.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The described implementation performs authenticated outbound requests with session cookies and optional API keys to specific upstream transcription routes, but the manifest emphasizes broader knowledge outputs instead of these sensitive network actions. In context, this is more dangerous because the skill processes remote media URLs and credential-bearing requests, so misleading descriptions can mask exfiltration, privacy, and unauthorized third-party processing risks.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The described implementation performs authenticated outbound requests with session cookies and optional API keys to specific upstream transcription routes, but the manifest emphasizes broader knowledge outputs instead of these sensitive network actions. In context, this is more dangerous because the skill processes remote media URLs and credential-bearing requests, so misleading descriptions can mask exfiltration, privacy, and unauthorized third-party processing risks.

Content

No source excerpt is available for this finding.

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
94% confidence
Finding

fast-uri 3.1.0 is present transitively, and the advisories include host confusion and SSRF-relevant URI canonicalization flaws. This skill's stated purpose processes remote media URLs, which materially increases risk because malformed attacker-supplied URLs could be misparsed, enabling bypass of hostname validation or SSRF controls elsewhere in the stack.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: hono==4.12.9 — 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
91% confidence
Finding

hono 4.12.9 is included transitively and carries multiple advisories affecting routing, cookie handling, and related framework behavior. Even though this file alone does not prove those features are used, a web-facing MCP server built on framework components can inherit meaningful request handling weaknesses, making this a real dependency risk.

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
89% confidence
Finding

ip-address 10.1.0 is present via express-rate-limit and is affected by parsing inconsistencies and XSS in HTML-emitting methods. The XSS portion is less likely relevant here, but the IPv4 parsing inconsistency can matter if IP-based trust, allowlisting, logging, or rate-limiting decisions are made on attacker-controlled address representations.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
87% confidence
Finding

The README instructs users to run the package via npx videomp3word-mcp without a pinned version. This can cause consumers to fetch and execute whatever version is current in the registry at invocation time, increasing supply-chain risk if a malicious or compromised release is published later. In this context, the risk is meaningful because the package is a server-side MCP tool that is expected to handle credentials and remote media URLs.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
88% confidence
Finding

The skill declares environment variables and network-dependent behavior but does not declare any explicit tool scope or permission boundaries. This is dangerous because agents or operators may expose secrets and permit outbound authenticated requests without clear least-privilege constraints, increasing the chance of unintended credential use, SSRF-like misuse through remote URL handling, or deployment in overly permissive environments.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The example sends a meeting recording URL to a service over plain HTTP, which can expose sensitive meeting content and metadata to interception or tampering in transit. Because the skill is specifically designed to process remote media into structured knowledge, the absence of any warning or transport security expectation makes accidental disclosure of confidential business discussions more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

Exporting extracted meeting data to Notion can propagate sensitive summaries, tasks, owners, and deadlines into a third-party system without making that disclosure obvious in the example. In this skill's context, the output is likely derived from meetings and may contain confidential operational or personal information, so silent external export increases privacy and data governance risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

This code initializes a client with a bearer token and sends a media URL to a remote HTTP service, but there is no confirmation prompt, user-facing log, or explanatory comment/docstring disclosing that credentials and request data are being used and transmitted. For a code file, these safety-relevant operations qualify for a missing-warning finding when no disclosure is present.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The example hardcodes a bearer token directly in source code, which encourages insecure credential handling and can lead users to commit real secrets to version control, logs, or shared snippets. In the context of an MCP client that accesses a remote service, exposed tokens could allow unauthorized use of the API and access to associated data or billing.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code performs an HTTP POST to a remote endpoint and transmits the provided media URL, outputs, mode, export formats, and optional metadata. There is no confirmation prompt, logging, print statement, or explanatory docstring/comment in this file warning that user or system data may be sent over the network.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code sends raw transcript text and chunk contents to an external model service via modelClient.generateJson, but there is no evidence in this file of consent checks, redaction, tenant-policy enforcement, or any disclosure that user-provided media-derived content leaves the local system. Because transcripts may contain sensitive spoken data, names, business details, or secrets, this creates a real privacy and data-governance risk if users or integrators assume processing is local.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
85% confidence
Finding

The platform forwards a user-supplied remote media URL directly into the transcription pipeline, which means the service will fetch and process third-party content on the user's behalf. In an MCP/server context this creates a real privacy and trust-boundary issue: URLs may expose sensitive tokens, internal endpoints, or cause undisclosed sharing of user-provided resources with upstream processors, especially since this file performs no allowlisting, redaction, or explicit user-consent/disclosure handling before transmission.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
83% confidence
Finding

This code sends the full messages array to a remote /chat/completions endpoint, which may contain user or system data. In this file there is no confirmation prompt, logging statement, or comment/docstring warning that conversational content is transmitted off-box.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

This TypeScript file implements a network-triggering action where clicking Run submits the provided media URL to the /video_to_knowledge workflow, but the UI text does not warn that the URL will be transmitted to the server for processing. For code files, SQP-2 applies when network calls that transmit user or system data lack any visible user-facing disclosure, and this page only describes the workflow without a privacy/data-transfer warning.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The client is initialized with a bearer token parameter, which represents sensitive credentials. The file provides no comment or warning about secure token handling or the fact that authenticated requests will be made using this credential.

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
93% confidence
Finding

The lockfile includes @hono/node-server 1.19.11, and the reported advisories describe path handling flaws in static file serving and middleware bypass behavior. Because this is only a dependency manifest, not proof that the vulnerable serveStatic functionality is actually used, the issue is best treated as a real supply-chain risk with limited demonstrated exploitability in this file alone.

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
88% confidence
Finding

body-parser 2.2.2 is present and is flagged for a denial-of-service condition related to invalid limit handling. In a lockfile this is a genuine vulnerable dependency finding, though impact depends on whether the application accepts attacker-controlled HTTP bodies and passes problematic limit values into body-parser.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: esbuild==0.27.4 — 1 advisory(ies): GHSA-g7r4-m6w7-qqqr (esbuild allows arbitrary file read when running the development server on Window)

Low
Category
Supply Chain
Confidence
60% confidence
Finding

Dependency has known vulnerabilities (CVEs). Using packages with unpatched security flaws exposes the environment to known exploits.

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
87% confidence
Finding

qs 6.15.0 is present and has advisories for denial-of-service and parsing limit bypass behavior. As a lockfile finding this is real, but impact from this file alone is constrained because exploitability depends on exposed HTTP query/body parsing paths and attacker-controlled nested parameters.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill-manifest context describes one task-oriented MCP server for converting remote media URLs into structured knowledge. In this file, the package description explicitly broadens scope to a "Production-ready MCP and HTTP server," and the environment variables include public host/port/base-URL and bearer-key settings that support an HTTP service in addition to MCP operation.

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 106)May include surrounding context.

json
"node": ">=20"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.17.5",
    "express": "^5.1.0",
    "mongodb": "^6.17.0",
    "zod": "^3.25.76"

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 107)May include surrounding context.

json
},
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.17.5",
    "express": "^5.1.0",
    "mongodb": "^6.17.0",
    "zod": "^3.25.76"
  },

Static analysis

No suspicious patterns detected.