Back to skill

Security audit

学分查询技能

Security checks for vulnerabilities and agentic risk

Overview

This skill is a student score lookup tool, but it lacks clear access control for sensitive grade data and declares an unrelated ffmpeg requirement.

Review before installing in any real school or business environment. This appears to be a simple local demo with placeholder student names, but it should not be connected to real student records unless authentication, per-user authorization, log redaction, and clearer metadata are added. The unrelated ffmpeg requirement should also be removed or explained.

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 (2)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
index.js:74
Finding

Student Grades Are Disclosed Without Authentication or Authorization

Content
View full analysis
s.name === name); if (!student) { return null; } if (subject) { const score = student.scores[subject]; return score !== undefined ? score : null; } return student.scores; } ``` The public handler also permits caller-supplied entities to reach this function directly: ```js if (params.entities && params.entities.name) { const { name, subject } = params.entities; const scores = queryScore(name, subject); if (scores === null) { return { success: false, message: `抱歉,${name}的${subject || '该科目'}成绩暂未记录。` }; } if (subject) { return { success: true, message: `${name}的${subject}成绩是:${scores}分`, data: { name, subject, score: scores } }; } const scoreList = Object.entries(scores) .map(([sub, score]) => `${sub}: ${score}分`) .join(','); return { success: true, message: `${name}的全部成绩如下:${scoreList}`, data: { name, scores } }; } ``` ### Technical Analysis The grade lookup uses only a student name as the record selector. It does not authenticate the caller or verify that the caller is the student, an authorized guardian, or authorized school personnel. The handler trusts caller-controlled `params.entities.name` and `params.entities.subject`. If no subject is supplied, `queryScore()` returns the student's entire `scores` object. The natural-language query path has the same authorization weakness because it extracts a recognized name from the query and then performs the lookup without an access-control decision. Student names, classes, and grades are also bundled in `database/scores.json`, so anyone who can access the distributed package can read all recor ...[truncated 1370 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
index.js:90
Finding

Full Student Grade Queries Are Written to Plaintext Logs

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The skill is labeled as a credit-query tool, but the content describes student score lookup and references local data access behavior not disclosed in the top-level description. This mismatch can mislead users and reviewers about what data is accessed and processed, increasing the risk of unauthorized exposure of sensitive educational records.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The handler returns a student's grades based only on a supplied name or parsed query, with no authentication, authorization, consent, or access-control checks. Because educational records are sensitive personal data, any caller who knows or guesses a student's name can retrieve all scores or subject-specific results, causing a direct privacy breach.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The manifest description and README content are entirely in Chinese, with no indication that users may choose another language or that the skill is intentionally limited to a Chinese-speaking audience. Under the stated policy, forcing a specific language without opt-in is a natural-language policy concern.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

Natural-language metadata, parsing, subject mappings, responses, and test queries are all Chinese-specific, and the intent recognition depends on Chinese tokens. There is no user opt-in, language selection, or documented justification that this is a region- or locale-specific skill.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill manifest context says '学分查询技能' (credit query), while the exported metadata and implementation operate on '学生各科目成绩' and return per-subject or full score lists. This is a semantic mismatch in the skill's stated purpose versus its actual behavior, not just an implementation detail.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

The manifest description and all user-facing documentation are written only in Chinese, with no indication that other languages are supported or that the user can opt into a preferred locale. This can violate a language/locale policy when a skill implicitly enforces one language without explicit choice or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
86% confidence
Finding

SQP-3 applies to all file types, including JSON. This dataset uses Chinese-language values and field content throughout, but the file provides no indication that the locale is optional, user-selected, or justified as region-specific, which can conflict with language/locale policy requirements.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The package description is written only in Chinese and describes the skill in a way that implicitly fixes the language context without any indication of user choice or opt-in. Under the policy rule, locale or language constraints should be explicitly optional or justified if the skill is not clearly documented as region-specific.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.