Back to skill

Security audit

诗诗八字命理分析

Security checks for vulnerabilities and agentic risk

Overview

The skill appears to be a Bazi fortune-telling tool with no hidden exfiltration or persistence, but it asks for more identifying personal details than its bundled calculator needs.

Review this skill before installing if you do not want to share identifying personal history. Use only the minimum details needed for a chart, avoid real names or former names unless you specifically want that style of reading, and treat the output as cultural entertainment rather than medical, financial, or life-planning advice.

Vulnerability Patterns
  • 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
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Findings (1)

other

Warning
Location
SKILL.md:125
Finding

Unnecessary Collection of Personally Identifying and Biographical Data

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 125-138, 174-185, and 193-200
Vulnerability Type: Excessive Personal Data Collection
Risk Level: Medium

Evidence

The Skill requires the user's name and former-name history:

markdown
### Step 1:收集姓名

直接询问用户姓名:

> "请告诉我您的姓名。"

(直接文字回复,不使用选项框)

### Step 2:收集曾用名

> "请问您有曾用名吗?"

- 没有曾用名 → 跳过,进入 Step 3
- 有曾用名 → 收集曾用名内容,然后询问改名的大致时间(年份即可)。如果用户忘了,标记为"未知"
- 不太清楚 → 跳过,进入 Step 3

It also requests birthplace and life/death status:

markdown
### Step 7:收集出生地

> "请告诉我您的出生省份和城市(例如:辽宁省丹东市)。"

出生地用于真太阳时校正参考。如果用户提供的出生时间与时辰对应有偏差,可提醒用户可能存在真太阳时的影响。

### Step 8:确认在世状态

> "请问要分析的人目前是否在世?"

- 在世 → 自动获取当前日期,作为分析的"当前时间"
- 已故 → 收集去世的年份,分析只推算到该年为止

The confirmation step repeats these details in the conversation:

markdown
📋 信息确认:
- 姓名:XXX(曾用名:XXX,改名时间:XXXX年/未知/无)
- 阳历生日:XXXX年XX月XX日(或:未知)
- 农历生日:XXXX年XX月XX日(或:未知)
- 出生时辰:X时(或:未知)
- 性别:男/女
- 出生地:XX省XX市
- 当前日期:XXXX年XX月XX日
- 在世状态:在世/已故(XXXX年去世)

Technical Analysis

The executable calculator in tools/bazi_pan.py uses a date, time, and optional gender. It does not accept or process names, former names, rename dates, birthplace, or life/death status. Although the documentation says birthplace can support solar-time correction, the reviewed implementation contains no such correction.

Consequently, the Skill collects personally identifying and sensitive biographical information beyond what its implemented calculation requires. Repeating these values in the confirmation summary further increases their exposure in Agent context and conversation logs.

This is a data-minimization and privacy issue rather than evidence of malicious exfiltration. The audit found no network transmission, local persistence, credential access, privilege escalation, or hidden payload associated with the collected data.

Attack Path

...[truncated 1233 chars]

Remediation
View remediation

Remediation Suggestions

  1. Remove mandatory collection of the user's name, former names, rename history, and life/death status from the core chart-calculation workflow.
  2. Limit required inputs to the values consumed by the implementation: birth date, birth time, and gender.
  3. Make birthplace optional and request it only if a documented solar-time correction is actually implemented.
  4. Before collecting any optional sensitive field, explain its exact purpose, retention implications, and whether omitting it affects the result.
  5. Obtain explicit user consent for optional personal-data processing.
  6. Do not repeat unnecessary personal information in the confirmation summary. Mask or omit identity fields whenever possible.
  7. Document data-minimization and retention expectations, including that personal details should not be written to persistent memory or external storage.
  8. Add tests ensuring that the normal workflow completes without collecting identity or unrelated biographical information.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • 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 (7)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill instructs the agent to collect a full name, former names, birth date, birth time, gender, birthplace, and life-status details, which together form a highly sensitive identity profile. The skill does not present a clear privacy notice, explain data use/retention, request informed consent, or apply data minimization, making accidental overcollection and misuse of personal data much more dangerous in this context.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The trigger list includes broad everyday phrases such as '算命', '看运势', and generic English terms like 'birth chart' and 'fortune telling', which can cause the skill to activate outside clearly intended contexts. Mis-triggering is especially risky here because the skill immediately begins collecting highly sensitive personal data, increasing the chance of unnecessary exposure of private information.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

This markdown file presents all instructions and content in Chinese only, beginning with the title at L001, and does not indicate that the language is optional or limited to a justified region-specific audience. That creates a natural-language policy concern under the language/locale rule because users are not given an opt-in or alternative language choice.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
88% confidence
Finding

The entire document is written in Chinese and does not indicate that the skill is region- or language-specific, nor does it offer an alternative language or user opt-in. Under the policy rule for natural-language constraints, this can be considered a locale/language limitation that is not explicitly justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The entire skill reference is written only in Chinese and does not indicate that the user can choose another language or that the skill is intended exclusively for Chinese-language users. Under the policy for natural-language constraints, a fixed language without opt-in can be a locale-policy issue.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

This markdown file presents all headings and content in Chinese and does not indicate that the user can choose another language. Under the policy rule for natural-language violations, forcing a specific language without user opt-in is reportable unless the locale constraint is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The module docstring and usage examples are entirely in Chinese, and the formatted CLI output is also Chinese-only. This imposes a specific language on users without any opt-in or alternative locale handling, which matches the natural-language locale policy violation category.

Content

No source excerpt is available for this finding.