Back to skill

Security audit

Awesome Bazi Calculator - Cantian AI

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a normal local Bazi and Chinese calendar skill, with a dependency-pinning caution but no artifact-backed malicious behavior.

Install only if you are comfortable running npm for a local astrology/calendar tool. For stronger safety, pin cantian-tymext to an exact reviewed version, add a package-lock.json, and run the commands in a restricted project directory because npm dependencies can execute code during install or runtime.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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)

T08 · Insecure Dependencies

Warning
Location
package.json:1
Finding

Non-Reproducible Third-Party Dependency Installation

Content
View full analysis
=0.0.26 <0.0.27`; therefore, it does not by itself permit `0.0.27`. However, the absence of a lockfile still leaves transitive dependency selection unresolved if `cantian-tymext` declares dependency ranges. It also prevents auditors from verifying the complete dependency graph, integrity hashes, and exact artifacts intended by the project. All primary scripts import and execute `cantian-tymext`, including: - `scripts/buildBaziFromSolar.ts` - `scripts/buildBaziFromLunar.ts` - `scripts/getChineseCalendar.ts` - `scripts/queryFortuneRange.ts` An npm package or transitive dependency can execute code through lifecycle scripts during installation or through imported runtime modules when a skill command is invoked. The reviewed project does not contain the dependency source or a lockfile, so no malicious behavior inside `cantian-tymext` was confirmed. The vulnerability is the unpinned and unauditable installation process rather than confirmed malicious package code. ### Attack Path 1. An attacker compromises a dependency maintainer or publishes a malicious version of a transitive package that satisfies a range declared by `cantian-tymext`. ...[truncated 1309 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • 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
Findings (21)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The supplied code is narrowly scoped to 黄历/Chinese calendar lookup for one date. That behavior is related to one part of the description, but it does not implement the skill’s stated primary Bazi-first functionality or the broader fortune-cycle query features. Since the declared description presents a comprehensive命理/Bazi capability set while the actual code chunk only performs almanac retrieval and formatting, the description materially overstates what this code actually does.

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

md
- 执行目录:在 skill 根目录(`SKILL.md` 所在目录)执行以下命令。 / Run commands in the skill root (where `SKILL.md` is located).

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
- `scripts/queryFortuneRange.ts`:按时间区间查询大运与流年/流月/流日/流时(流时按时辰段合并)。 / Query decade fortune and annual/monthly/daily/hourly cycles in a time range.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The markdown defines gender as only 1 for male and 0 for female, with an error message rejecting any other value. This is a natural-language policy concern because the skill forces a specific gender classification scheme rather than offering user choice or documenting why the restriction is required.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This section again states that gender accepts only male or female values and rejects anything else. Repeating the binary-only constraint in user-facing instructions reinforces a locale/policy-style natural-language restriction without opt-in or justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The queryFortuneRange.ts parameter schema specifies birth.gender as only 1 male or 0 female. Because this is part of the user-facing natural-language interface, it presents the same policy issue of forcing a specific classification without opt-in or documented necessity.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This code emits error messages in Chinese, which forces a specific language for users without offering any locale selection or opt-in. The same pattern continues in other user-facing strings, indicating a language policy issue rather than an isolated message.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The sample-city error and usage text are presented only in Chinese, so users are required to interact in that language regardless of preference. Under the stated policy, forcing a specific language without opt-in 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
92% confidence
Finding

The code emits error messages in Chinese only ('日期格式无效' and '日期值无效') with no indication that the skill is intended exclusively for Chinese-speaking users or that another language can be selected. This can violate a language/locale policy when skills are expected to avoid forcing a specific language without user opt-in.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

All user-facing error strings and report labels in this file are written in Chinese, and the script does not provide any language selection or opt-in mechanism. Under the language/locale policy rule, forcing a specific language without user choice is a natural-language policy violation unless the locale restriction is explicitly documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script processes highly sensitive personal data—birth date/time, gender, and derived Bazi profile—and then echoes the full input and natal analysis directly into the generated report. In a skill centered on fortune calculation this data flow is functionally necessary, but emitting it without minimization, warning, or access controls increases privacy exposure through logs, downstream storage, and unintended disclosure to other components or users.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This TypeScript file contains multiple user-facing error messages exclusively in Chinese, such as the validation errors in parseArgs and date parsing. The policy for all file types says to flag language/locale constraints when the skill forces a specific language without offering user choice or documenting a justified locale limitation.

Content

No source excerpt is available for this finding.

Unpinned Dependencies

Low
Category
Supply Chain
Confidence
89% confidence
Finding

The dependency is version-ranged with a caret (^0.0.26), which allows automatic installation of newer compatible releases. This creates a supply-chain risk because a future upstream publish or compromised maintainer account could introduce malicious or breaking code without any change to this repository.

Content

Scanner excerpt · package.json (reported line 5)May include surrounding context.

json
"private": true,
  "type": "module",
  "dependencies": {
    "cantian-tymext": "^0.0.26"
  }
}

Static analysis

No suspicious patterns detected.