Back to skill

Security audit

幼儿园识数与加减法体系课程

Security checks for vulnerabilities and agentic risk

Overview

The skill mostly does what it claims, but generated worksheet HTML can include unescaped user text that may run active browser content if a malicious title, name, or review value is supplied.

Review before installing. Use it only with worksheet titles, names, and wrong-question values you trust, because those fields are written into browser-opened HTML without escaping. Avoid passing copied web content or messages from untrusted people into those fields until the generator is fixed to HTML-escape dynamic text.

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
scripts/generate_worksheet.py:489
Finding

Unescaped User Input Enables HTML and JavaScript Injection in Generated Worksheets

Content
View full analysis
{q["level"]}' if len({x["level"] for x in qs}) > 1 else "" cells.append(f'
{q["no"]}.{lvtag}{q["prompt"]}
') out.append( f'
' f'
{title}
' f'
{subtitle}
' f'
姓名:{name}日期:用时:' f'做对:题
' f'
{"".join(cells)}
' f'
幼儿园数学练习 · {title}' f"第 {pi + 1} 页 / 共 {total_pages} 页
" f"
" ) if with_answers: items = "".join( f'
{q["no"]}. {q ...[truncated 3480 chars]
Remediation
View remediation
&"' ``` Tests should verify that the resulting document contains encoded text such as `<script>`, not executable elements. 6. Consider adding a restrictive Content Security Policy as defense in depth. Escaping remains mandatory because a policy alone does not prevent all markup injection or content manipulation. ]]>
Vulnerability Patterns
  • 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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (19)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description is for an educational kindergarten math skill that should create printable exercises and support assessment and feedback. The supplied code does none of that. It is an asset-generation utility that draws icons and writes PNG files for four themes, only one of which is math-related. There is no worksheet generation, no answer pages, no student assessment, no correction logic, and no learning-path functionality. This is a clear material mismatch between the declared purpose and the actual behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a full kindergarten math tutoring and worksheet-generation skill. However, the provided code chunk only creates a static icon PNG file for the skill's assets. It contains no logic for math question generation, level handling, diagnosis, correction, recommendations, or user-triggered educational interactions. Writing an icon asset is a materially different primary purpose from the declared end-user functionality, so this is a clear mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description presents an end-user educational capability: generating kindergarten math worksheets, diagnosing ability, grading practice, and giving advancement suggestions. The actual code chunk does none of those directly. It is an internal developer self-test script for release validation. Its primary purpose is QA: sampling generated prompts, checking answer strings against regex patterns, ensuring each level has enough topic coverage, and verifying in-sheet deduplication. While this may support the worksheet system behind the scenes, it is materially different from the declared primary purpose and exposes undeclared developer-tooling behavior. Therefore this code chunk does not accurately represent the declared skill behavior.

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

md
新增 `selftest.py` 发版自检(题目唯一率按空间分级、答案合法性正则校验、等级覆盖、同卷无重复);新增 `generate_icon.py` 与 `assets/icon.png` 平台图标。

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file contains user-facing natural language in Chinese for the feature descriptions, but there is no indication that the skill is intentionally region-specific or that users can opt into a language/locale. Under the policy, forcing a specific language without user choice is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The README presents all invocation examples and usage instructions exclusively in Chinese, including the one-sentence activation guidance at L20. This indicates a language-specific interaction expectation without documenting any user choice, fallback, or opt-in, which fits the language/locale policy violation category.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
89% confidence
Finding

The skill instructs the agent to read and write files in the workspace and local skill directory, but it declares no explicit tool scope or permission boundaries. In an agent platform, undeclared file capabilities increase the risk of over-broad filesystem access, unintended writes, or permission confusion, especially because the skill references absolute local paths and creates output files automatically.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
81% confidence
Finding

The manifest text and invocation guidance are written to direct use in Chinese and embed Chinese-only interaction patterns, but do not state that users may choose their preferred language. Under the policy, locale or language constraints should be opt-in or explicitly justified; here no such choice or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file presents all user-facing instructions and labels in Chinese, which effectively forces a specific language for anyone using the skill artifact. Under the policy, language constraints should either be optional for the user or clearly justified as region-specific; neither is stated here.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The module docstring is written entirely in Chinese and presents the skill behavior in that language without any indication that language is configurable or intentionally limited to a Chinese-only audience. Under the policy, forcing a specific language without user opt-in is a natural-language locale violation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The printed message "图标已生成" is a user-facing string that assumes Chinese as the output language. Because the file provides no option for language selection and no documented reason for a China-specific locale, this violates the language/locale policy.

Content

No source excerpt is available for this finding.

Scope Creep

Low
Category
Excessive Agency
Confidence
70% confidence
Finding

Skill's behavior or capabilities extend beyond its stated purpose. Scope creep allows an agent to perform actions unrelated to its documented functionality, increasing the attack surface.

Content

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

md
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file contains user-facing instructional content exclusively in Chinese, and there is no indication that the skill supports other languages or requires Chinese for a documented region-specific purpose. Under the policy rule for language or locale constraints, forcing a specific language without user opt-in can be a natural-language policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file presents all instructional content and parent-facing scripts exclusively in Chinese. Under the policy rule, forcing a specific language without user opt-in can be a natural-language policy violation unless the locale restriction is explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file contains user-facing instructions exclusively in Chinese, and nowhere indicates that the skill is region- or language-specific or that users may choose another language. Under the policy rule for natural-language violations, forcing a specific language without opt-in is in scope.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code's user-facing description and generated content are entirely in Chinese, and later output also hard-codes lang="zh-CN" and Chinese UI text. Under the stated policy, forcing a specific language without user opt-in can be a natural-language policy violation when no language choice or justification is provided.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The rendered HTML explicitly sets lang="zh-CN" and presents print instructions only in Chinese, with no opt-in or alternative locale support. This matches the policy example of forcing a specific language/locale without giving the user a choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

This Python file contains natural-language instructions and CLI output exclusively in Chinese, which imposes a specific language on users without any opt-in or alternative. The policy explicitly calls for flagging language or locale constraints when the skill forces a specific language without user choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The argparse description, help text, and all visible status messages are hardcoded in Chinese, so users are forced into a single language experience. There is no indication of locale selection, fallback behavior, or documented justification for the restriction.

Content

No source excerpt is available for this finding.

Static analysis

Detected: suspicious.dynamic_code_execution

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/selftest.py:105