Back to skill

Security audit

AI Project Learner

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed paid learning-planner skill, but its payment endpoint can trigger charges for any supplied user ID without clear authentication or per-use safeguards.

Review this skill before installing or invoking it. It clearly charges $0.01 USDT per call via SkillPay, but the charge endpoint should not be used until it requires verified user identity, explicit per-use consent, replay protection, and patched development dependencies.

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

T05 · Unauthorized Access and Privilege Escalation

Error
Location
src/index.ts:9
Finding

Unauthenticated Caller Can Initiate Charges for Arbitrary User Identifiers

Content
View full analysis
{ if (request.method !== "POST") { return Response.json({ error: "POST required" }, { status: 405 }); } const body = await request.json() as { user_id: string }; if (!body.user_id) { return Response.json({ error: "user_id required" }, { status: 400 }); } const billing = await chargeUser({ userId: body.user_id, apiKey: env.SKILLPAY_API_KEY, priceUsdt: 0.01, skillId: SKILL_ID, }); ``` `src/billing.ts:8-22`: ```ts try { const response = await fetchFn(SKILLPAY_API, { method: "POST", headers: { "Content-Type": "application/json", "X-API-Key": apiKey, }, body: JSON.stringify({ user_id: userId, skill_id: skillId, amount: priceUsdt, }), }); const data = await response.json(); return data as BillingResult; ``` ### Technical Analysis The public Cloudflare Worker accepts `user_id` directly from an unauthenticated request body and uses it to initiate a billing operation. It performs no caller authentication, authorization check, signed-request validation, or verification that the supplied identifier belongs to the requester. The Worker then elevates this untrusted input into a privileged request by authenticating to SkillPay with the server-side `SKILLPAY_API_KEY`. Consequently, possession of the Worker endpoint URL may be sufficient to request charges against arbitrary, guessed, or previously observed user identifiers. Checking only that `user_id` is non-empty does not establish ownership or authorization. The implementation also lacks replay protection, idempotency controls, and application-level rate limiting ...[truncated 2114 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (30)

Known Vulnerable Dependency: vitest==3.2.4 — 2 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed); CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Critical
Category
Supply Chain
Confidence
96% confidence
Finding

vitest 3.2.4 is a real vulnerable dependency with reported arbitrary file read and possible execution exposure when UI/server features are enabled, plus the redirect-mock traversal issue. Although it is a dev dependency, this skill's context includes active AI project tooling where tests may run in CI or developer machines, so compromise of local files or execution in those environments is meaningful.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vitest==3.2.4 — 2 advisory(ies): CVE-2026-47429 (When Vitest UI server is listening, arbitrary file can be read and executed); CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Critical
Category
Supply Chain
Confidence
98% confidence
Finding

The resolved dependency vitest==3.2.4 is flagged with critical advisories for arbitrary file read and possible code execution/path traversal in the UI/mocking components. Even though this is a devDependency, test tooling often runs locally and in CI with access to source code, secrets, environment variables, and build credentials, which makes compromise of the development pipeline particularly dangerous in this skill context.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as a learning-planner utility, yet it incorporates payment handling, API keys, account identifiers, and cryptocurrency-denominated charges. In this context, the mismatch increases danger because users seeking educational assistance would not reasonably expect financial processing or third-party billing data flows from the advertised functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented as a learning-planner utility, yet it incorporates payment handling, API keys, account identifiers, and cryptocurrency-denominated charges. In this context, the mismatch increases danger because users seeking educational assistance would not reasonably expect financial processing or third-party billing data flows from the advertised functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is presented as a learning-planner utility, yet it incorporates payment handling, API keys, account identifiers, and cryptocurrency-denominated charges. In this context, the mismatch increases danger because users seeking educational assistance would not reasonably expect financial processing or third-party billing data flows from the advertised functionality.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: nanoid==3.3.11 — 3 advisory(ies): CVE-2026-67214 (nanoid: non-secure generators can loop indefinitely with negative size); CVE-2026-67213 (nanoid: custom generators can loop indefinitely when size is zero); CVE-2026-73086 (nanoid: Integer Overflow or Wraparound)

High
Category
Supply Chain
Confidence
89% confidence
Finding

nanoid 3.3.11 is present transitively via postcss and is reported with denial-of-service and integer-handling flaws. This package-lock alone does not prove the vulnerable code paths are reachable with attacker-controlled size arguments, but the dependency version is genuinely affected and could cause hangs or instability if exposed through tooling inputs.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: picomatch==4.0.3 — 2 advisory(ies): CVE-2026-33672 (Picomatch: Method Injection in POSIX Character Classes causes incorrect Glob Mat); CVE-2026-33671 (Picomatch has a ReDoS vulnerability via extglob quantifiers)

High
Category
Supply Chain
Confidence
90% confidence
Finding

picomatch 4.0.3 is a real vulnerable dependency with reported ReDoS and glob parsing issues. In this project it is a development dependency used by build/test tooling, so the main risk is denial of service or incorrect matching when attacker-controlled glob patterns are processed during local or CI workflows.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: postcss==8.5.8 — 4 advisory(ies): CVE-2026-45623 (PostCSS: Arbitrary file read and information disclosure via attacker-controlled ); CVE-2026-69153 (PostCSS: incomplete fix of GHSA-6g55-p6wh-862q — attacker-controlled sourceMappi); CVE-2026-41305 (PostCSS has XSS via Unescaped </style> in its CSS Stringify Output) +1 more

High
Category
Supply Chain
Confidence
80% confidence
Finding

postcss 8.5.8 is listed with multiple advisories including file-read and output-encoding issues. Because this is in frontend tooling rather than application runtime, real-world exposure depends on processing attacker-controlled CSS/source maps or serving transformed output, but the dependency itself is legitimately outdated and risky.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: sharp==0.34.5 — 2 advisory(ies): GHSA-f88m-g3jw-g9cj (sharp inherited vulnerabilities in libvips: CVE-2026-33327, CVE-2026-33328, CVE-); GHSA-rgj7-g3m4-5g8c (sharp: Vulnerabilities in libheif: GHSA-g89c-p67h-r497 and GHSA-2jg2-4ch7-h545)

High
Category
Supply Chain
Confidence
84% confidence
Finding

sharp 0.34.5 pulls native image-processing components with known vulnerabilities in bundled libraries such as libvips/libheif. In this lockfile it is a transitive dev dependency of miniflare, so the practical risk is mainly when untrusted image data is handled during local development or testing.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: undici==7.18.2 — 16 advisory(ies): CVE-2026-1525 (Undici has an HTTP Request/Response Smuggling issue); CVE-2026-6733 (undici vulnerable to HTTP response queue poisoning via keep-alive socket reuse); CVE-2026-1527 (Undici has CRLF Injection in undici via `upgrade` option) +13 more

High
Category
Supply Chain
Confidence
92% confidence
Finding

undici 7.18.2 is a real affected dependency with numerous HTTP parsing, smuggling, and poisoning advisories. Since it is used by miniflare in a development server context, exposure is lower than an internet-facing production service, but compromise of local dev services, SSRF-like behavior, or request confusion remains plausible if the dev server is reachable or processes malicious traffic.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: vite==6.4.1 — 4 advisory(ies): CVE-2026-39365 (Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling); CVE-2026-53571 (vite: `server.fs.deny` bypass on Windows alternate paths); CVE-2026-39363 (Vite Vulnerable to Arbitrary File Read via Vite Dev Server WebSocket) +1 more

High
Category
Supply Chain
Confidence
94% confidence
Finding

vite 6.4.1 is a genuine vulnerable dependency with advisories for path traversal, arbitrary file read, and dev-server access control bypasses. This project uses Vite through Vitest and tooling, making the issue especially relevant in developer environments where the dev server or websocket endpoints might be exposed to untrusted local network users or CI contexts.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.18.0 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
90% confidence
Finding

ws 8.18.0 is a legitimately affected websocket library with memory disclosure and memory exhaustion advisories. Here it is pulled in via miniflare, so the main concern is local or CI development services accepting hostile websocket traffic, potentially causing denial of service or limited information leakage.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file implements a payment charge operation that is unrelated to the stated skill purpose of generating AI project learning dependency graphs. Hidden billing behavior in an unrelated skill is dangerous because it can cause unauthorized charges or covert monetization while users believe they are invoking only educational functionality.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

This skill includes an external payment-processing call to a third-party billing endpoint without any justification from the skill's advertised function. In context, that mismatch strongly suggests deceptive or unauthorized data transfer and charging capability embedded in an otherwise unrelated skill.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

A billing capability is introduced in a skill whose stated functionality does not require payment handling, creating an unjustified privileged action. In this context, the presence of charging logic is especially suspicious because it expands risk from simple misuse to unauthorized or deceptive financial transactions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The skill’s declared purpose is to generate a concept dependency graph for AI projects, but the implementation performs only a billing action and returns a charged status. This mismatch is dangerous because it can be used to deceptively monetize users under false pretenses, especially in agent ecosystems where skills are invoked based on metadata and expected behavior.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill requires network access to contact an external billing endpoint but does not declare any explicit tool scope or allowed-tools restrictions. This weakens least-privilege guarantees and makes the skill's external communications less transparent to reviewers and users, especially since it also handles payment-related data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs sending a user_id to an external billing endpoint without any privacy notice, minimization guidance, retention disclosure, or consent language. Even if the identifier seems simple, transmitting it to a third party can expose account linkage information and creates unnecessary privacy and compliance risk.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The function accepts and uses an API key in a sensitive header with no visible safeguards, warnings, or explanation of how this credential should be sourced and protected. This increases the risk of accidental key misuse, insecure handling by integrators, or hidden privileged actions under the guise of normal skill behavior.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The code transmits user and billing-related fields to a remote service with no visible disclosure, consent flow, or indication to callers that network payment activity will occur. Even over HTTPS, silently sending identity and charge information can violate user expectations, privacy requirements, and enable abuse if invoked unexpectedly.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The code initiates a charge immediately after receiving a POST with a user_id, with no confirmation, acknowledgement, or visible warning in this file. Even if billing were intended, charging without an explicit confirmation step increases the risk of accidental, unauthorized, or coerced payments.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The type definitions introduce billing and payment-related interfaces for a skill whose declared purpose is generating AI project learning dependency graphs. This mismatch is suspicious because it suggests hidden monetization or charging behavior outside the expected scope, increasing the risk of unauthorized billing flows or deceptive functionality in the wider skill implementation.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The presence of ChargeParams with fields such as userId, apiKey, priceUsdt, and skillId indicates charging capability that is not justified by the stated educational/graph-generation purpose. In context, this is dangerous because it can enable silent or misleading payment requests, expose sensitive API credentials, and create a larger attack surface than users would reasonably expect from this skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README states the skill costs $0.01 per call, but it does not clearly warn users at the point of use or installation that invoking the skill triggers a live paid billing event. This can lead to unintended charges, especially in agentic workflows where users may authorize a skill once and not realize repeated invocations incur costs.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: @vitest/mocker==3.2.4 — 1 advisory(ies): CVE-2026-84373 (Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock)

Low
Category
Supply Chain
Confidence
82% confidence
Finding

@vitest/mocker 3.2.4 is flagged for a path traversal/arbitrary file read issue in redirect mock handling. In this lockfile it is a dev/test dependency, so exploitability depends on running Vitest with attacker-controlled test or mock configuration, which reduces exposure but does not eliminate it.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.