Back to skill

Security audit

元鉴 yotta-triage

Security checks for vulnerabilities and agentic risk

Overview

The skill’s malware-triage engine is coherent and local, but its bundled installers can copy agent-executable skill files into multiple assistant skill directories without confirmation.

Install only into the specific assistant skill directory you intend to use, preferably with an explicit --dir path. Avoid the global or no-argument installer modes unless you want this skill available across multiple agents, and consider pinning the npm version before running npx. The triage engine itself should still be used only on files and directories you are authorized to analyze.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (33)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
A second independent description-behavior mismatch indicates the package targets multiple agent-specific skill/config paths and performs global installation/listing actions rather than static sample triage. In the context of a security skill, this is more dangerous because it can masquerade as defensive tooling while gaining persistence-like placement or broad filesystem access across agents.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
A second independent description-behavior mismatch indicates the package targets multiple agent-specific skill/config paths and performs global installation/listing actions rather than static sample triage. In the context of a security skill, this is more dangerous because it can masquerade as defensive tooling while gaining persistence-like placement or broad filesystem access across agents.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
install_to() {
  mkdir -p "$1/$SKILL_NAME"
  cp -r "$SOURCE_DIR/." "$1/$SKILL_NAME/"
  rm -rf "$1/$SKILL_NAME/.git"
  echo "installed -> $1/$SKILL_NAME"
}
Confidence
95% confidence
Finding
Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Env Variable Harvesting

High
Category
Data Exfiltration
Content
def run_cli(*args):
    """以子进程方式运行 CLI(Windows 下也保证 UTF-8 输出)。"""
    env = dict(os.environ)
    env["PYTHONIOENCODING"] = "utf-8"
    return subprocess.run(
        [sys.executable, SCRIPT] + list(args),
Confidence
60% confidence
Finding
Code enumerates, copies, or searches environment variables for secrets. Bulk environment access can collect credentials unrelated to the skill's stated purpose.

Rp1

Medium
Category
MCP Rug Pull
Confidence
92% confidence
Finding
The changelog recommends running `npx -y @yottameta/yotta-triage` without pinning an exact package version, which can cause users to execute whatever version is currently published to the registry. If the package is later compromised, typo-squatted, or a malicious update is pushed, users may run attacker-controlled code during installation/execution.

Natural-Language Policy Violations

Medium
Confidence
93% confidence
Finding
The description states that every risk hint is explained in Chinese, which imposes a specific language on users. The file offers a Chinese README translation, but it does not indicate that output language is user-selectable or optional.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```text
# Optional China mirror: npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-triage --agent <agent-name>      # install to the agent's default user-level skills dir
npx -y @yottameta/yotta-triage --dir <your-skills-dir>   # point to the skills dir itself (e.g. ~/.codex/skills)
```
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The README instructs users to execute `npx -y @yottameta/yotta-triage` without pinning a specific package version. This creates a supply-chain risk: a future compromised, malicious, or breaking release could be fetched and executed automatically at install time, especially since `npx` may run package lifecycle code during installation.

Vague Triggers

Medium
Confidence
92% confidence
Finding
L010 将触发条件描述为“用户给出可疑文件/样本(或样本目录)、需要算哈希、识别文件类型、查熵、提取字符串、解析 PE/ELF 头、做静态初筛、产出 IOC 时触发”,覆盖了大量常见分析表述,但没有给出更明确的触发短语、边界或不应触发的反例。这种自然语言触发范围较大,容易与一般性的文件检查、哈希计算或字符串提取请求发生重叠。

Skill Enumeration

Medium
Category
Agent Snooping
Content
```text
# 可选国内加速:npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-triage --agent <智能体名称>      # 装到指定智能体默认用户级技能目录
npx -y @yottameta/yotta-triage --dir <智能体的技能目录>  # 指到技能目录本身(如 ~/.codex/skills)
```

- `--agent <name>` 自动装到该智能体默认用户级目录;`--list` 可查看各智能体默认目录。
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Skill Enumeration

Medium
Category
Agent Snooping
Content
```text
# 可选国内加速:npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-triage --agent <智能体名称>      # 装到指定智能体默认用户级技能目录
npx -y @yottameta/yotta-triage --dir <智能体的技能目录>  # 指到技能目录本身(如 ~/.codex/skills)
```

- `--agent <name>` 自动装到该智能体默认用户级目录;`--list` 可查看各智能体默认目录。
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Lp3

Medium
Category
MCP Least Privilege
Confidence
77% confidence
Finding
The skill declares powerful capabilities such as shell and file write without any explicit tool-scope restriction in the manifest. In an agent environment, missing permission boundaries can let a skill operate with broader authority than users expect, increasing the risk of unintended file modification, command execution, or abuse if the skill or its packaging logic is invoked.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The skill's purpose is static sample triage, but this file contains a broad capability to target numerous agent-specific directories and deploy itself there. That cross-agent installation logic is not a direct requirement of computing hashes, parsing headers, extracting strings, or producing IOCs.

Skill Enumeration

Medium
Category
Agent Snooping
Content
const AGENT_DIRS = {
  claude:    { label: 'Claude Code',      dirs: ['.claude/skills'] },
  cursor:    { label: 'Cursor',           dirs: ['.cursor/skills', '.agents/skills'] },
  codex:     { label: 'Codex',            dirs: ['.codex/skills'] }, // 特判:$CODEX_HOME/skills
  gemini:    { label: 'Gemini CLI',       dirs: ['.gemini/skills', '.agents/skills'] },
  goose:     { label: 'Goose',            dirs: ['.config/goose/skills', '.agents/skills'] },
  amp:       { label: 'Amp',              dirs: ['.config/agents/skills', '.agents/skills'] },
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Description-Behavior Mismatch

Medium
Confidence
95% confidence
Finding
The manifest describes a zero-dependency local static triage capability for analyzing files and directories and explicitly frames the skill as read-only analysis outputting reports and IOCs. This installer creates directories and copies the package into agent skill locations, which is operational installation behavior not reflected in the manifest's stated functionality.

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The installer performs recursive filesystem writes into user- or project-level skill directories immediately once invoked, without a clear runtime warning or confirmation of all destinations. In environments where users execute install commands from documentation or tooling wrappers, this can lead to unintended persistence of agent-executable content across multiple assistants or repositories.

Static analysis

Detected: suspicious.obfuscated_code

Potential obfuscated payload detected.

Warn
Code
suspicious.obfuscated_code
Location
scripts/yotta_triage.py:91