Back to skill

Security audit

Stuff Skill - 秩

Security checks for vulnerabilities and agentic risk

Overview

The skill has a coherent app-generation purpose, but its cloud templates can expose private personal records through unauthenticated public APIs and vulnerable generated pages.

Use local-only mode for sensitive personal data unless you review the generated code. Do not deploy the cloud mode as-is; add authentication, owner-level authorization, restricted CORS, input validation, safe DOM rendering instead of innerHTML string templates, and pinned deployment tooling first.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (4)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
assets/template-api.js:4
Finding

<![CDATA[Unauthenticated Public Read, Write, and Delete Access to Personal Data]]>

Content
View full analysis
({ ...r ...[truncated 3101 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
assets/template-app.js:115
Finding

<![CDATA[Stored Cross-Site Scripting Through Unescaped Record IDs]]>

Content
View full analysis
{ // __FILTER_LOGIC__ if (q) { const searchText = SEARCHABLE.map(k => item[k] || '').join(' ').toLowerCase(); if (!searchText.includes(q)) return false; } return true; }); // __SORT_LOGIC__ countEl.textContent = `${filtered.length}/${items.length}`; emptyEl.style.display = filtered.length ? 'none' : 'block'; listEl.innerHTML = filtered.map(item => { // __CARD_TEMPLATE__ return `...`; }).join(''); } ``` Local template: ```js function render() { const q = searchEl.value.trim().toLowerCase(); const filtered = items.filter(item => { // __FILTER_LOGIC__ if (q) { const searchText = SEARCHABLE.map(k => item[k] || '').join(' ').toLowerCase(); if (!searchText.includes(q)) return false; } return true; }); // __SORT_LOGIC__ countEl.textContent = `${filtered.length}/${items.length}`; emptyEl.style.display = filtered.length ? 'none' : 'block'; listEl.innerHTML = filtered.map(item => { // __CARD_TEMPLATE__ return `...`; }).join(''); } ``` The local import path accepts arbitrary array objects without validating IDs or fields: ```js function importData(file) { const reader = new FileReader(); reader.onload = e => { try { const data = JSON.parse(e.target.result); if (!Array.isArray(data)) throw new Error('Invalid format'); if (!confirm(`将导入 ${data.length} 条记录,会覆盖当前数据。确定?`)) return; items = data; ...[truncated 2521 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
assets/template-app.js:257
Finding

<![CDATA[Stored Cross-Site Scripting in Smart Select Manager Attributes]]>

Content
View full analysis
f.key === field); smartSelectManagerTitle.textContent = '管理' + (fieldConfig ? fieldConfig.label : field); const values = getFieldValues(field); if (!values.length) { smartSelectManagerList.innerHTML = '
还没有记录
'; smartSelectManager.showModal(); return; } smartSelectManagerList.innerHTML = values.map(v => { const count = items.filter(x => x[field] === v).length; return '
' + '' + esc(v) + '' + '' + count + '条' + '
' + '✏️' + '🗑' + '
'; }).join(''); ``` ### Technical Analysis The `esc()` function is suitable for placing text into an HTML element because it encodes markup-significant text characters. It is not a reliable attribute encoder: quotation marks in a text node do not need to be encoded when serialized as `innerHTML`, but they are significant when the returned string is later inserted inside a double-quoted attribute. A stored Smart Select value such as: ```text ...[truncated 1894 chars]
Remediation
View remediation
` 4. Treat field metadata as potentially unsafe as well. Validate generated field keys against a strict identifier format before using them in selectors or attributes. 5. Validate and length-limit Smart Select values at both the client and server. 6. Add tests covering quotation marks, event-attribute strings, entity references, and other attribute-breaking input. 7. Deploy a restrictive Content Security Policy without inline event-handler support as secondary protection. ]]>

T08 · Insecure Dependencies

Warning
Location
references/deploy-guide.md:9
Finding

<![CDATA[Unpinned Third-Party CLI Installation and Execution]]>

Content
View full analysis
Remediation
View remediation
npx --no-install wrangler pages deploy public --project-name my-app ``` 2. Commit `package.json` and the npm lockfile, and install with: ```bash npm ci ``` 3. Avoid global installations for reproducible project workflows. 4. Use `npx --no-install` after installing dependencies locally so `npx` cannot silently retrieve a missing package. 5. Review package provenance, release signatures where available, and registry ownership before version updates. 6. Add an explicit dependency-update process that includes: - Security advisory review. - Lockfile diff inspection. - Testing in an isolated environment. - Manual approval before changing the pinned version. 7. Use narrowly scoped Cloudflare credentials and avoid running deployment tooling as an administrator or root user. 8. Where feasible, execute deployment tooling in a disposable container or isolated CI runner with access only to the required project and narrowly scoped deployment secrets. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (35)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared purpose frames the skill as an app-generation assistant, but the content also instructs the agent to generate backend APIs, database access patterns, SQL/D1 integration, and CORS-enabled serverless components. This mismatch can mislead reviewers and users about the true operational scope, causing unsafe trust decisions and allowing higher-risk code generation behaviors to bypass expected scrutiny.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 45)May include surrounding context.

md
| `template-app-local.js` | 学习本地 localStorage CRUD、Smart Select、导入导出 |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 46)May include surrounding context.

md
| `template-app.js` | 学习云模式 API CRUD、离线 fallback |

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

Scanner excerpt · SKILL.md (reported line 71)May include surrounding context.

md
| `template-app.js` | 学习云模式 API CRUD、离线 fallback |

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/components.md (reported line 198)May include surrounding context.

顶部一张统计卡:大数字(总量)+ 分状态统计 + 一条彩色比例条。让用户一眼看清全局。适用场景:任何有“状态分布”的管理类 App(在用/备用/已停、架上/冰箱/喝完等)。已在补剂管家实战验证。

html
<div id="overview" class="overview"></div>  <!-- JS 填充 -->
css

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/components.md (reported line 342)May include surrounding context.

md
<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><line x1="16.5" y1="16.5" x2="21" y2="21"/></svg>
</button>

<!-- 搜索框默认 hidden,带✕关闭按钮 -->
<div class="search-wrapper hidden" id="searchWrap">
  <span class="search-icon">🔍</span>
  <input type="search" id="search-input" placeholder="搜索..." oninput="handleSearch(this.value)">

Hidden Instructions

High
Category
Prompt Injection
Confidence
70% confidence
Finding

Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.

Content

Scanner excerpt · references/components.md (reported line 342)May include surrounding context.

md
<svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="7"/><line x1="16.5" y1="16.5" x2="21" y2="21"/></svg>
</button>

<!-- 搜索框默认 hidden,带✕关闭按钮 -->
<div class="search-wrapper hidden" id="searchWrap">
  <span class="search-icon">🔍</span>
  <input type="search" id="search-input" placeholder="搜索..." oninput="handleSearch(this.value)">

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The skill description instructs the user entirely in Chinese and explicitly tells the user to communicate their request in that language context, without offering an alternative language or opt-in. This creates a locale/language restriction in the skill's natural-language interface with no documented choice or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README promotes cloud deployment, multi-device sync, and real-time data synchronization, but does not warn users that their data may be transmitted to third-party platforms such as Cloudflare, Vercel, or Netlify. Because the skill is aimed at managing personal data categories like health supplements, habits, and collections, users may unknowingly expose sensitive information to external services.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README instructs users to 'tell it what you want to manage' after feeding SKILL.md to any AI, but it does not define specific trigger phrases, boundaries, or exclusion conditions. This is broad natural-language activation guidance that overlaps with ordinary conversation and may cause the skill to be invoked in unintended contexts.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill describes capabilities that involve networked/cloud deployment and backend/API generation, but it does not declare any explicit tool scope or allowed-tools boundary. That creates a governance gap: an agent may infer it is permitted to use network-capable tools or generate/deploy cloud-connected components without clear authorization, increasing the risk of unintended external access or over-broad actions.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest description and core instructions are written to direct the skill experience in Chinese, and there is no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking region. This creates a language/locale policy concern because it imposes a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This manifest presents the skill description, inputs, outputs, and trigger examples in Chinese, while not indicating that the user can choose another language or locale. That creates a natural-language policy concern because the skill appears to force a specific language without explicit user opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
86% confidence
Finding

This code exposes a deletion endpoint that removes records from the database, but there is no confirmation prompt, user-facing log/message, or inline warning comment describing the destructive behavior. For a code file, destructive or irreversible operations should include some form of disclosure unless clearly documented as part of the skill's stated purpose.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The HTML sets lang="zh-CN" and the visible interface labels and placeholders are in Chinese throughout the template. Under the policy, forcing a specific language without user opt-in or documented justification is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest says the skill tells the AI what to manage and gets a dedicated app generated, which suggests app scaffolding/generation as the main purpose. This file instead contains runtime application behavior for fetching, creating, updating, and deleting records via /api/TABLE and localStorage, which is materially broader than simple app generation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This markdown file documents Smart Select management behavior, including deleting a historical value and clearing that field from all records using it. Although it mentions confirmation for the delete action, the skill description does not clearly warn users that this can bulk-modify existing data and may be hard to undo.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The DELETE endpoint permanently removes records with no user warning, confirmation flow, soft-delete mechanism, or recovery guidance. In an agent-generated app context, this increases the chance of accidental or scripted destructive actions causing irreversible data loss, especially because the API is simple and unauthenticated in the example.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The guide tells users the agent will 'automatically help deploy' to Cloudflare after account setup, but it does not clearly disclose that deployment uploads application code, configuration, and possibly user-provided content to a third-party cloud provider. In a skill that generates and deploys apps, lack of transparency about data transfer and external service interaction can mislead users into sharing assets or sensitive configuration without informed consent.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.