Back to skill

Security audit

Fortune Hub — 运势测算统一入口

Security checks for vulnerabilities and agentic risk

Overview

This fortune-telling router is coherent, but it directs agents to save a detailed personal profile across sessions without clear opt-in, retention, or deletion controls.

Install only if you are comfortable with the agent creating a local plaintext MEMORY.md profile for fortune-telling reuse. Avoid providing a legal/passport name unless necessary, ask the agent not to persist data if you want one-off use, and manually inspect or delete MEMORY.md when you no longer want the profile retained.

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
SKILL.md:139
Finding

Plaintext Cross-Session Storage of Sensitive Personal Data

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 139–177
Vulnerability Type: Plaintext persistence and broad reuse of personal data
Risk Level: Medium

Vulnerable Code Snippet

markdown
## User Context

本 Skill 的产出依赖以下用户信息,通过 `MEMORY.md` 跨领域、跨会话共享。

**读取**:每次触发时,**主动读取**本目录下的 `MEMORY.md`。文件存在且包含当前领域所需字段时,直接使用,不再重复询问。

**写入**:`MEMORY.md` 不存在或缺少必要字段时,按需引导用户提供,收集完成后写入 `MEMORY.md`。

**更新**:用户主动要求修改个人信息(如"我的生日填错了")时,更新 `MEMORY.md` 中对应字段。

**MEMORY.md 格式:**

```markdown
# 用户玄学档案

## 基础信息
- 公历生日:1990-05-15
- 农历生日:庚午年四月廿一
- 出生时辰:未时(13:00-15:00)
- 出生地点:上海
- 性别:男
- 英文全名:San Zhang
markdown
| 英文全名 | 护照/出生证上的全名 | 数字命理 |

Technical Analysis

The Skill instructs the agent to collect and persist a user's birth date, birth time, location, sex, and passport- or birth-certificate-based full name in a plaintext Markdown file. It further directs the agent to reuse this profile across domains and sessions and to read it automatically whenever the Skill is triggered.

The design does not specify explicit consent before persistence, file-access restrictions, encryption, retention limits, automatic expiration, field-level deletion, full-profile deletion, or purpose-based isolation. Automatic loading of a shared profile can also expose more personal information than is necessary for the selected fortune-telling domain.

This is an insecure data-handling practice rather than evidence of malicious exfiltration. The audited project contains no code that sends the information over a network.

Attack Path

  1. A user invokes the Skill and selects a domain requiring personal information.
  2. The agent requests birth information, location, sex, or a legal full name.
  3. Following the Skill instructions, the agent writes those values to MEMORY.md in plaintext.
  4. The file remains available across later sessions.
  5. A subsequent agent, Skill, user, or local process with workspace-rea ...[truncated 850 chars]
Remediation
View remediation

Remediation Suggestions

  1. Default to session-only processing and ask for explicit, informed opt-in before creating a persistent profile.
  2. Explain which fields will be stored, why they are needed, how long they will remain, and which Skills can access them.
  3. Apply data minimization by storing only fields required for the selected domain.
  4. Avoid requesting a passport- or birth-certificate-based legal name; accept a user-provided display name or session-only input where possible.
  5. Separate records by purpose or domain instead of maintaining one broadly shared profile.
  6. Read only the fields required for the current operation rather than automatically loading the complete profile.
  7. Restrict file permissions to the minimum necessary principal and use protected storage where supported.
  8. Define retention and automatic-expiration policies for stored personal data.
  9. Provide documented commands for viewing, correcting, deleting individual fields, and permanently purging the entire profile.
  10. If MEMORY.md must remain plaintext, prominently warn users of the local confidentiality limitations before writing it.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (6)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill instructs proactive reading, writing, updating, and cross-session reuse of sensitive personal data in MEMORY.md without requiring clear informed consent or a prominent privacy notice. The data types involved—birth date, birth time, birthplace, gender, and full name—are highly sensitive in aggregate and can enable profiling or misuse if retained broadly across domains.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The trigger list includes very broad everyday phrases like '今天运气怎么样' and '帮我算算', which can cause the skill to activate in situations where the user did not clearly intend to invoke this specific routing flow. In this context, unintended activation is more dangerous because the skill then proceeds to solicit and reuse sensitive profile data, increasing the chance of unnecessary collection of personal information.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The quick-start section defines activation on vague requests without clear scope boundaries, so ordinary conversational phrases may invoke the skill unexpectedly. Because this skill is designed to read MEMORY.md and gather birth, gender, and location data, an overly broad trigger surface can lead to privacy-invasive behavior from ambiguous user input.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill explicitly directs the system to proactively read and persist sensitive personal data across sessions for reuse across multiple fortune-telling domains. This increases exposure beyond a single interaction and creates a durable profile that may be accessed or reused in contexts the user did not specifically authorize, making the privacy risk materially higher in this skill than in a one-off questionnaire.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The provided MEMORY.md template concretely normalizes storage of a detailed personal profile, including birth date, lunar birth date, birth time, birthplace, gender, and full name. Publishing and encouraging this schema makes it more likely that downstream implementations will persist unnecessary sensitive attributes in a shared file, enabling correlation, re-identification, and misuse if accessed by other skills or operators.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
80% confidence
Finding

The description, trigger phrases, examples, and interaction flows are presented in Chinese as the expected operating language, but there is no indication that users may choose another language or that the Chinese-only behavior is an intentional, documented locale restriction. Under the policy, forcing a specific language without opt-in can be a natural-language policy violation.

Content

No source excerpt is available for this finding.