Back to skill

Security audit

元情 yotta-intel

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed local IOC extraction skill with user-directed multi-agent installation support, with caution needed around installer scope and CSV spreadsheet safety.

Install only to the agent directories you intend, prefer the pinned package version, and use --dry-run before broad installs. Avoid bulk/global installation unless you want this skill available to every listed agent. For hostile reports, prefer JSON or STIX output, or treat CSV files as unsafe to open in spreadsheets until formula cells are neutralized.

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
scripts/yotta_intel.py:337
Finding

CSV Formula Injection Through Attacker-Controlled IOC Context

Content
View full analysis

Vulnerability Details

File Location: scripts/yotta_intel.py, lines 337–345, 359–365, and 464–465
Vulnerability Type: CSV formula injection
Risk Level: Medium

Vulnerable code:

python
if entry is None:
    snippet = ""
    if 0 < idx <= len(orig_lines):
        snippet = orig_lines[idx - 1].strip()
    entry = {
        "type": ioc_type,
        "value": canonical,
        "defanged": defang_value(canonical, ioc_type),
        "count": 0,
        "first_line": idx,
        "snippet": snippet,
    }
python
def build_csv(records):
    out = io.StringIO()
    w = csv.writer(out)
    w.writerow(["type", "value", "defanged", "count", "first_line", "snippet"])
    for r in records:
        w.writerow([r["type"], r["value"], r["defanged"], r["count"], r["first_line"], r["snippet"]])
    return out.getvalue()
python
elif args.format == "csv":
    out = build_csv(records)

Technical Analysis

The Skill is explicitly designed to process potentially hostile threat reports, phishing emails, and logs. When an IOC is found, the complete original source line is retained in the snippet field. That attacker-controlled field is then passed directly to csv.writer without neutralizing spreadsheet formula prefixes.

CSV quoting only preserves field structure; it does not reliably prevent spreadsheet applications from interpreting cells beginning with characters such as =, +, -, or @ as formulas. Consequently, a source line such as =ATTACKER_FORMULA ... evil.example.com can remain a formula-bearing cell in the generated CSV.

Attack Path

  1. An external party supplies a phishing email, threat report, or log line containing both a valid IOC and spreadsheet formula syntax at the beginning of the line.
  2. An analyst or automated workflow processes that content with:
    bash
    python3 scripts/yotta_intel.py extract --path report.txt --fo
    

...[truncated 1044 chars]

Remediation
View remediation

Remediation Suggestions

Neutralize every attacker-derived textual field before writing spreadsheet-oriented CSV output, especially snippet.

  1. Detect cells whose first meaningful character is =, +, -, or @. Also account for leading tabs, carriage returns, newlines, and other whitespace that spreadsheet applications may ignore.
  2. Prefix dangerous cells with an apostrophe or use another escaping policy documented for the supported spreadsheet applications.
  3. Apply the protection through a centralized helper to every string written to CSV rather than only to snippet.
  4. Preserve a machine-oriented JSON output option for consumers that require the original unmodified text.
  5. Add tests covering direct and whitespace-prefixed formulas, including quoted fields and formulas embedded on lines containing valid IOCs.
  6. Document that CSV output is spreadsheet-safe only after formula neutralization and clarify any escaping transformations applied to source context.
Vulnerability Patterns
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The English duplicate of the same mismatch reinforces that the implementation performs actions unrelated to IOC extraction, including installing files into multiple AI agent skill/configuration paths and modifying the filesystem. In context, targeting multiple agent locations suggests lateral persistence within the local AI tooling environment, which is far more dangerous than a normal offline parser and inconsistent with the declared boundary of no external or system-active behavior.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The English duplicate of the same mismatch reinforces that the implementation performs actions unrelated to IOC extraction, including installing files into multiple AI agent skill/configuration paths and modifying the filesystem. In context, targeting multiple agent locations suggests lateral persistence within the local AI tooling environment, which is far more dangerous than a normal offline parser and inconsistent with the declared boundary of no external or system-active behavior.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The changelog documents an install command using npx -y @yottameta/yotta-intel without a pinned version, which causes users to fetch whatever the latest published package is at execution time. If the package is later compromised, typo-squatted, or a malicious version is published, consumers following the documented command could execute unreviewed code during installation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding

The changelog documents an install command using npx -y @yottameta/yotta-intel without a pinned version, which causes users to fetch whatever the latest published package is at execution time. If the package is later compromised, typo-squatted, or a malicious version is published, consumers following the documented command could execute unreviewed code during installation.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · README.md (reported line 111)May include surrounding context.

text
# Optional China mirror: npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-intel@0.2.2 --agent <agent-name>      # install to the agent's default user-level skills dir
npx -y @yottameta/yotta-intel@0.2.2 --dir <your-skills-dir>   # point to the skills dir itself (e.g. ~/.codex/skills)

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · README.zh-CN.md (reported line 120)May include surrounding context.

text
# 可选国内加速:npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-intel@0.2.2 --agent <智能体名称>      # 装到指定智能体默认用户级技能目录
npx -y @yottameta/yotta-intel@0.2.2 --dir <智能体的技能目录>  # 指到技能目录本身(如 ~/.codex/skills)
  • --agent <name> 自动装到该智能体默认用户级目录;--list 可查看各智能体默认目录。

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · README.zh-CN.md (reported line 120)May include surrounding context.

text
# 可选国内加速:npm config set registry https://registry.npmmirror.com
npx -y @yottameta/yotta-intel@0.2.2 --agent <智能体名称>      # 装到指定智能体默认用户级技能目录
npx -y @yottameta/yotta-intel@0.2.2 --dir <智能体的技能目录>  # 指到技能目录本身(如 ~/.codex/skills)
  • --agent <name> 自动装到该智能体默认用户级目录;--list 可查看各智能体默认目录。

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill declares itself as a purely local/offline IOC extraction utility, but the analysis indicates capabilities for environment access, filesystem read/write, and network without any explicit tool-scope restrictions. In an agent ecosystem, absent permission boundaries can let the skill exercise broader powers than users expect, enabling data exfiltration, unwanted file modification, or remote fetch behavior if invoked through supporting code.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
70% confidence
Finding

npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest’s purpose is threat-intelligence IOC extraction/normalization, but this code contains broad awareness of many agent ecosystems and logic to deploy into their skill folders. That cross-agent installation capability is administrative/package-management behavior, not a direct requirement of extracting IOCs from local content.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · bin/install.js (reported line 46)May include surrounding context.

js
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'] },

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest describes a local offline skill for extracting and normalizing threat-intelligence IOCs from text, logs, and reports, with no mention of installation or modifying agent skill directories. This file creates target directories, copies the package into them, and thereby changes the local environment rather than performing IOC extraction.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The user-facing comments and usage text are written exclusively in Chinese, and the script continues to emit Chinese-only help and status messages throughout execution. Under the stated policy, forcing a specific language without opt-in is a natural-language policy violation unless the locale constraint is explicitly justified.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest describes a local, offline threat-intel IOC extraction and normalization skill, but this file implements installation logic that creates directories, deletes prior contents from target skill folders, and copies files into multiple agent-specific locations. While packaging/install support can exist in a repository, this capability is not part of the skill's stated operational purpose of extracting and formatting IOCs.

Content

No source excerpt is available for this finding.

Skill Enumeration

Medium
Category
Agent Snooping
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.

Content

Scanner excerpt · install.sh (reported line 314)May include surrounding context.

sh
return 0
  fi
  local installed=0 d
  for d in .claude/skills .cursor/skills .codex/skills .config/goose/skills .config/agents/skills .opencode/skills .codeium/windsurf/skills .workbuddy/skills .kiro/skills .traecli/skills .gemini/skills .trae-cn/skills .qwen/skills .comate/skills .codebuddy/skills .kimi/skills .agents/skills; do
    if [ -d "$d" ]; then
      install_to "$d" "$dry" || exit 1
      installed=1

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The entire skill reference is written only in Chinese and does not indicate that language selection is optional or that the skill is intended exclusively for a Chinese-speaking or region-specific audience. Under the stated policy, forcing a specific language without user opt-in is a natural-language policy violation.

Content

No source excerpt is available for this finding.

Rp1

Medium
Category
MCP Rug Pull
Confidence
89% confidence
Finding

The documentation instructs users to run npx -y @yottameta/yotta-intel without pinning a specific package version. This creates a supply-chain risk: future package updates, compromise of the package account, or malicious dependency changes could cause users to execute unintended code when following the installation guidance. In a security-focused skill, this is more concerning because users may trust the tool and copy-paste commands directly.

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 uses Chinese throughout, including the title and all release notes, which can amount to forcing a specific language on users without opt-in. The policy allows locale constraints only when explicitly justified or when users are offered a choice, neither of which is stated here.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.