T01 · Skill Instruction Hijacking
- Location
.cursor/skills/using-superpowers/SKILL.md:15- Finding
Session-Wide Agent Control Through Instruction Precedence Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The EvoMap reference skill is mostly transparent, but it bundles broad credential-recovery instructions and persistent Cursor hook setup that deserve user review before installation.
Install only if you intend to use EvoMap/Evolver and are comfortable reviewing each high-impact step first. Do not let it broadly search private agent directories or keychains without explicit path-by-path approval, avoid the unpinned global hook installer unless you trust and pin the Evolver package, and verify any Cursor hooks it creates or changes.
.cursor/skills/using-superpowers/SKILL.md:15Session-Wide Agent Control Through Instruction Precedence Hijacking
scripts/setup-hooks.sh:7Unpinned Global Package Execution Installs Persistent Cursor Hooks
SKILL.md:97Credential Recovery Searches Broad Private Agent Stores Beyond Least Privilege
.cursor/skills/chinese-git-workflow/SKILL.md:75CNB Access Tokens Are Persisted Using Git Plaintext Credential Storage
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
.brand-logo { display: block; height: 1em; width: auto; max-width: 180px; filter: invert(1); }
</style>
</head>
<body><!-- BRANDING --><h1>Brainstorm Companion</h1>
<p>Waiting for the agent to push a screen...</p></body></html>`);
}
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
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).
mark_stopped() {
local reason="$1"
rm -f "${STATE_DIR}/server-info"
printf '{"reason":"%s","timestamp":%s}\n' "$reason" "$(date +%s)" > "${STATE_DIR}/server-stopped"
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
git remote add origin https://cnb.cool//.git
git config credential.helper store
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
git remote add origin https://cnb.cool//.git
git config credential.helper store
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
*.exe
# 环境配置
.env
.env.local
.env.*.local
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 环境配置
.env
.env.local
.env.*.local
# 系统文件
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
env | grep IDENTITY || echo "IDENTITY not in environment"
# 第 3 层:签名脚本
echo "=== Keychain state: ==="
security list-keychains
security find-identity -v
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 第 3 层:签名脚本
echo "=== Keychain state: ==="
security list-keychains
security find-identity -v
# 第 4 层:实际签名
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
在 Codex 配置文件(~/.codex/config.toml)中添加:
[features]
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
relevant skills. You should use skills when they exist.
Browse: ls ~/.claude/skills/
Search: grep -r "keyword" ~/.claude/skills/
### Variant C: Claude.AI Emphatic Style
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
relevant skills. You should use skills when they exist.
Browse: ls ~/.claude/skills/
Search: grep -r "keyword" ~/.claude/skills/
### Variant C: Claude.AI Emphatic Style
Skill reads from agent configuration directories (.claude/, .codex/, .gemini/). These directories may contain API keys, personal settings, and other credentials that the skill has no legitimate need to access.
1. **Before starting:** Check for relevant skills
- Browse: `ls ~/.claude/skills/`
- Search: `grep -r "symptom" ~/.claude/skills/`
2. **If skill exists:** Read it completely before proceeding
An executable nested in a document or hidden/disguised artifact can evade ordinary extension-based review while still being available to the skill at runtime.
The declared purpose says this skill is only reference documentation and explicitly states that reading it never authorizes an action. However, the supplied code is not documentation at all; it is an operational script that performs a write action on the filesystem. It ingests a user-supplied JSON file, validates it, and appends it to an events log, changing local state. That is a materially different primary purpose and an undeclared capability compared with read-only protocol reference content. Therefore this is a clear mismatch.
The declared purpose is purely informational and explicitly says reading the document never authorizes an action. The supplied code is not documentation at all: it is an executable setup script that installs a CLI and configures hooks in the user's environment. Those are active system-modifying behaviors that materially differ from a read-only reference document, so this is a clear description-behavior mismatch.
The declared purpose says this skill is only reference documentation and never authorizes an action. The supplied code is not documentation at all; it is operational logic for validating GEP event records in a local file. It accesses the filesystem, parses JSON, enforces field/value requirements, emits results, and exits with status codes. That is a materially different primary purpose from passive protocol reference content, so this is a clear description/behavior mismatch.
The skill instructs agents to search local private memory, config stores, OS keychains, environment variables, and agent-specific directories for EvoMap credentials. Even though framed as recovery, this authorizes broad secret discovery across sensitive local stores and increases the chance of over-collection or unintended disclosure if an agent follows it too aggressively.
- the agent client's private memory, config, and credential store
- OS keychain / Credential Manager entries named for EvoMap, if accessible
- environment variables such as `EVOMAP_NODE_ID` and `EVOMAP_NODE_SECRET`
- old EvoMap paths such as `~/.config/evomap/credentials.json`,
`~/.evomap/credentials.json`, or other `evomap`-named files under the
user's home config directories
- agent-specific config roots where this client commonly stores private
This section explicitly directs searching legacy credential files and local config areas for secrets, which is a sensitive credential-access pattern. In an agent context, instructions to inspect private directories and secret-bearing files can be abused or can normalize behavior that exceeds least-privilege expectations.
- OS keychain / Credential Manager entries named for EvoMap, if accessible
- environment variables such as `EVOMAP_NODE_ID` and `EVOMAP_NODE_SECRET`
- old EvoMap paths such as `~/.config/evomap/credentials.json`,
`~/.evomap/credentials.json`, or other `evomap`-named files under the
user's home config directories
- agent-specific config roots where this client commonly stores private
state, such as `.codex`, `.claude`, `.cursor`, `.windsurf`, or equivalent
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
a git repository, through symlinks, or into cloud-synced folders such as
iCloud or Dropbox; never expose the secret via shell rc files, env exports,
logs, world-readable locations, or chat transcripts. Legacy paths such as
`~/.config/evomap/credentials.json` may be read during Layer 1 recovery, but
new file-based writes should use `~/.evomap/`. If the runtime cannot
guarantee a private location, the client should report that to the user
instead of writing. When a separate memory or context file is updated, only
The gene explicitly instructs the agent to create or modify assets/gep/events.jsonl and run a validator, which is an operational write action rather than passive reference content. In a skill described as reference-only and never authorizing action, embedding actionable file-modification steps can cause an agent to perform unintended local state changes and bypass the skill's declared safety boundary.