T01 · Skill Instruction Hijacking
- Location
SKILL.md:17- Finding
Persistent Global Memory Rule Hijacks Future Agent Output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is mostly a local presentation tool, but it asks for persistent control over future agent output and exposes a file-write path that can overwrite user-writable files.
Install only if you are comfortable with a presentation skill becoming a persistent default output layer. Prefer using the CLI for one-off rendering, decline writes to mcpServers or permanent memory unless you want cross-session behavior, avoid unpinned npx in sensitive environments, and do not let untrusted prompts choose SVG or output file paths.
SKILL.md:17Persistent Global Memory Rule Hijacks Future Agent Output
scripts/yotta_present_mcp.py:83Persistent MCP Tool Allows Unrestricted Filesystem Overwrite
README.md:188Documentation Recommends Unpinned Remote Package Execution
The skill declares that by default nearly any final result delivered to the user should pass through this presentation layer. In an agent environment, such a broad trigger can cause the skill to intercept sensitive, security-critical, or context-specific outputs unexpectedly, increasing the chance of data overexposure, policy bypass, or inappropriate transformation of results.
A cross-agent presentation skill should not implicitly double as a deployment mechanism that installs into agent directories or supports global setup across environments without prominent scoping. The mismatch increases the chance of overbroad trust, unintended persistence, and unsafe automation of filesystem changes under the guise of UI formatting.
A cross-agent presentation skill should not implicitly double as a deployment mechanism that installs into agent directories or supports global setup across environments without prominent scoping. The mismatch increases the chance of overbroad trust, unintended persistence, and unsafe automation of filesystem changes under the guise of UI formatting.
The skill claims it should process virtually all user-facing AI output by default. Such an overbroad trigger can force unrelated content through a transformation layer, increasing exposure of sensitive data to extra tools/components, creating opportunities for output tampering, and making it harder for users or higher-priority policies to control when the skill runs.
The usage guidance routes all final outputs through the skill first, with exceptions only listed later. That default-first design is risky because it normalizes mandatory mediation of all responses, including security-sensitive or fidelity-critical content, before the user sees it.
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).
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"
}
The changelog states the skill is the default presentation layer for all AI outputs and that outputs should generally pass through it before reaching the user. Even though this is documentation rather than executable code, it promotes broad behavioral takeover without explicit per-use opt-in, which can override user expectations, alter outputs, and create a path for hidden formatting or policy-layer interference across unrelated tasks.
The changelog documents automatic writing to MCP configuration and permanent memory on first use. Persistently modifying agent configuration or memory is security-sensitive because it can establish long-lived behavior changes, broaden future tool access, and survive the original session; mentioning a consent gate elsewhere does not remove the risk when this file still normalizes the behavior without a prominent direct warning.
The language selector presents English as the default primary language for the skill documentation, with Chinese as an alternate link, but there is no indication of user choice or locale negotiation in the skill behavior. Under the stated policy, forcing a specific language without opt-in is a natural-language locale policy concern unless clearly justified.
The README recommends installation via npx from the npm registry without pinning a specific package version. This creates a supply-chain risk: future package updates, account compromise, or dependency tampering could cause users to fetch and execute unexpected code at install time.
This command executes an unpinned npm package directly with npx, which means the installed code can change over time without user review. If the package or publisher is compromised, users may run malicious installation or setup logic simply by following the documented command.
The README instructs users to run npx against an unversioned package, exposing them to package drift and registry-side compromise. Because npx downloads and runs code, this is more than a documentation issue: it can directly lead to arbitrary code execution on the user's machine.
Listing commands that use an unpinned npx package normalizes execution of mutable remote code from the registry. Even a benign project becomes a supply-chain entry point if its package, maintainer account, or transitive install path is altered after the README is published.
该文件是中文 README,并在页首语言切换处显示当前文档固定为“中文”。按规则,若技能以自然语言内容强制特定语言而没有用户选择或明确 opt-in,属于语言/locale 策略问题。
The README instructs users to install and execute an npm package via npx -y @yottameta/yotta-present without pinning an exact version. This creates a supply-chain risk: future package updates, compromised maintainer accounts, or malicious dependency changes could cause users to run unreviewed code during installation or setup.
This line repeats the same unpinned npx installation pattern, which causes users to fetch and execute whatever version is current at runtime. In an agent-skill context, installation commands may be followed with less scrutiny, increasing exposure to package hijacking or malicious updates.
Even though this invocation is only for listing mappings, it still runs the package via unpinned npx, which means arbitrary package code may execute before producing output. The context is less dangerous than a persistent install, but it still exposes users to the same package-substitution and malicious-update risks.
The skill instructs the agent to read/write client configuration and persistent memory, and to invoke local Python/CLI tooling, but it does not declare any explicit tool scope or permission boundaries. This creates an authorization gap where a seemingly harmless presentation skill can perform filesystem and shell-adjacent actions without clear least-privilege constraints or user-visible scoping.
The skill language mandates default presentation behavior for all outputs without meaningful user choice at time of use. While not directly code execution, this weakens user agency and can cause unintended processing of content through formatting logic or resident tools, especially when combined with persistent MCP setup.
The skill recommends running an unpinned npx -y @yottameta/yotta-humanize, which pulls the latest package version at execution time. That creates a supply-chain risk: a compromised publisher account, malicious new release, or breaking update could cause arbitrary code execution or unexpected behavior on the user's machine.
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.
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.
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.
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.
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.
No suspicious patterns detected.