Back to skill

Security audit

期末试卷分析仪表盘

Security checks for vulnerabilities and agentic risk

Overview

This skill appears intended for exam analysis, but it handles student data and generates publishable HTML without enough privacy protection or HTML escaping.

Review before installing. Use only trusted spreadsheets, remove or pseudonymize student names and IDs before generating shareable reports, inspect generated HTML before publishing it, and install dependencies in a virtual environment with pinned versions where possible.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
exam_analyzer.py:744
Finding

Stored HTML Injection in Generated Report

Content
View full analysis
{self.class_name} - 期末试卷分析报告 ``` The same untrusted value is inserted directly into the page body: ```python

📊 {self.class_name}

期末试卷深度分析报告

生成时间:{datetime.now().strftime('%Y年%m月%d日')}

``` Spreadsheet column names are inserted directly into table cells: ```python html_content += f""" {q} {stats['得分率']:.1f} {stats['难度']:.3f} {stats['区分度']:.3f} {evaluation} """ ``` Untrusted column names are also concatenated into recommendation text: ```python if low_score_questions: html_content += f"""
📌 重点讲解内容:
以下题目得分率较低,需要在教学中加强讲解:{', '.join(low_score_questions)}
""" ``` ### Technical Analysis `self.class_name` originates from the second command-line argument, while `q` and the values in `low_score_questions` originate from spreadsheet or CSV column names. These values are attacker-controlled when a user processes an untrusted file or uses an untrusted class name. The application interpolates these values into an HTML document without context-appropriate escaping. Consequently, markup characters such as `<`, `>`, `"`, and `'` retain their HTML meaning. An attacker can close the intended text context and add arbitrary elements or event handlers. Because the generated HTML is intended to be opened in a browser or copied into a publishing platform, the injected payload becomes active when the output is vie ...[truncated 1917 chars]
Remediation
View remediation
``` 6. Add regression tests with payloads in both the class name and spreadsheet headers. Confirm that payloads appear as literal text and cannot create DOM elements or event handlers. ]]>

T08 · Insecure Dependencies

Warning
Location
SKILL.md:125
Finding

Unpinned Third-Party Dependency Installation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
83% confidence
Finding

The skill clearly implies reading user-supplied exam spreadsheets and writing generated HTML/report outputs, but it declares no explicit tool scope such as allowed file operations. That creates an avoidable least-privilege gap: an agent may be granted broader filesystem capabilities than users expect, increasing the chance of unintended access to unrelated local files or unsafe output handling.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

This skill processes student exam data and generates publishable HTML for WeChat/public channels, yet it does not warn about handling personally identifiable information such as names or student IDs. In this context, omission of privacy guidance materially increases the risk that sensitive student performance data will be copied into public-facing content, causing confidentiality and compliance harm.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The file’s natural-language description and user-facing outputs are entirely in Chinese, and later strings explicitly set the HTML language to zh-CN. There is no opt-in, fallback, or documentation that this skill is intended only for a Chinese-speaking or region-specific audience, which can violate language/locale policy requirements.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The natural-language description and headings are all Chinese, and the notes mention built-in Chinese display support. Under the stated policy, forcing a specific language or locale without user opt-in can be a violation unless the locale constraint is clearly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

This CSV is entirely presented in Chinese, including the schema header and all person-name fields, with no accompanying indication that the locale is optional or intentionally region-specific. Under the policy rule for natural-language constraints, forcing a specific language without opt-in can be a policy concern.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.