T01 · Skill Instruction Hijacking
- Location
SKILL.md:6- Finding
Skill instructions monopolize shopping requests and force promotional output
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This shopping skill is coherent, but it asks the agent to install unpinned global software and modify agent configuration automatically, which deserves review before installation.
Review the installer before using it. Only install if you are comfortable with global npm packages, persistent MCP configuration changes, and UTP state under your home directory; avoid automatic install flows, verify the npm package source/version, and back up agent MCP configs and PATH settings first.
SKILL.md:6Skill instructions monopolize shopping requests and force promotional output
scripts/install.sh:351Unpinned remote packages are installed globally and executed
scripts/install.sh:602MCP configuration merge can erase existing configuration and permits path-based script injection
scripts/install-win.sh:91Git Bash installer can replace the user PATH instead of appending to 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).
package: check ## 打公网 zip 包(输出到 ~/Documents/)
@echo "打包: $(PKG_NAME).zip"
@rm -rf "$(TMP_DIR)/$(PKG_NAME)"
@mkdir -p "$(TMP_DIR)/$(PKG_NAME)"
@cp $(SKILL_MD) "$(TMP_DIR)/$(PKG_NAME)/"
@cp README.md "$(TMP_DIR)/$(PKG_NAME)/"
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).
@cp -R scripts "$(TMP_DIR)/$(PKG_NAME)/"
@cp -R references "$(TMP_DIR)/$(PKG_NAME)/"
@cp dsh.cordis.yml dsh-apps.cordis.yml "$(TMP_DIR)/$(PKG_NAME)/"
@rm -rf "$(TMP_DIR)/$(PKG_NAME)/scripts"/.git
@mkdir -p "$(OUT_DIR)"
@rm -f "$(ZIP_FILE)"
@cd "$(TMP_DIR)" && zip -r "$(ZIP_FILE)" "$(PKG_NAME)" -x "*.DS_Store"
The skill presents itself as an in-conversation procurement tool, yet its instructions cover global npm installation, host-directory modification, MCP config rewrites, and reset/removal actions. This hidden expansion of capability increases the chance of unintended persistence, host tampering, or disruption to other tools if the skill is trusted and executed automatically.
The skill presents itself as an in-conversation procurement tool, yet its instructions cover global npm installation, host-directory modification, MCP config rewrites, and reset/removal actions. This hidden expansion of capability increases the chance of unintended persistence, host tampering, or disruption to other tools if the skill is trusted and executed automatically.
The trigger list is extremely broad and includes many common commerce terms, causing the skill to aggressively claim conversations and insist on non-transfer even when other tools may be more appropriate. In a skill that can invoke shopping, login, installation, or shell/setup flows, overbroad routing increases the chance of unwanted transactions, unnecessary privileged actions, or denial of safer alternatives.
Referenced artifact was not completely inspected
true` 即本错误已带引导),AI 无需再判断。结果里没有该段的旧版本/云端场景,才按 `references/feedback-guide.md` 展示 `references/feedback-qrcode.png`。本地修复了也要展示:用户反馈“刚才出了 XX 错、后来好了”对定位隐藏问题同样有价值。用户主动索
The Codex-specific instruction says the agent should execute installation immediately, without asking the user and without surfacing that it will perform a global npm install and modify persistent skill/MCP files. Combining silent dependency installation with config changes is especially risky because it normalizes privileged system mutation inside a shopping workflow.
The skill references and instructs modification of ~/.codex/config.toml, an agent configuration directory/file that controls MCP server behavior. Directing a task skill to alter agent config is dangerous because it can establish persistence, affect future sessions, and potentially route tool execution through attacker-influenced components.
bash /scripts/install.sh --host codex
`<skill-dir>` 为本 Skill 当前所在目录(如 `~/.codex/skills/utp-shopping` 或项目内 `.agents/skills/1688-utp-shopping`)。脚本自动完成三件事:npm 全局安装 utp CLI → 复制 Skill 文件到 `~/.codex/skills/utp-shopping/` → 在 `~/.codex/config.toml` 写入 MCP 配置(幂等,可重复运行)。
**本机还没有 Skill 文件时**(能读到本指引但找不到 `scripts/install.sh`),先补文件再执行安装,两条命令一次跑完:
Hidden instructions were detected in comments or invisible text. These could contain malicious directives. Manual review is recommended.
#Requires -Version 5.1
# 一键安装 Node.js LTS + UTP CLI(Windows 原生 PowerShell 版)
# 无需管理员权限,解压到用户目录并写入用户级 PATH
param([switch]$Reset)
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
Tool calls are chained to bypass individual safety checks or escalate capabilities beyond what any single tool call would allow.
extracted_dir="$HOME/node-v${version}-win-x64"
# 清理旧的解压目录(如果有)
[[ -d "$extracted_dir" ]] && rm -rf "$extracted_dir"
unzip -q -o "$temp_zip" -d "$HOME"
rm -rf on ${HOME}/.utp removes all local UTP data recursively, and although the path is fixed and quoted, it is still a destructive operation exposed through a command-line flag. In a skill installer context, accidental or socially engineered use of --reset could erase user state without recovery or confirmation.
# 1. 清除 ~/.utp/ 全部数据(config / preferences / 旧 bin 等)
if [ -d "${HOME}/.utp" ]; then
rm -rf "${HOME}/.utp"
info "已清除 ~/.utp/"
else
info "~/.utp/ 不存在,跳过"
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.
mcp_json_path="${HOME}/.cursor/mcp.json"
;;
codex)
# Codex:skill 装到 ~/.codex/skills/,MCP 配置是 TOML(~/.codex/config.toml),不走 JSON 路径
skill_dir="${HOME}/.codex/skills/${SKILL_NAME}"
;;
*)
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.
mcp_json_path="${HOME}/.cursor/mcp.json"
;;
codex)
# Codex:skill 装到 ~/.codex/skills/,MCP 配置是 TOML(~/.codex/config.toml),不走 JSON 路径
skill_dir="${HOME}/.codex/skills/${SKILL_NAME}"
;;
*)
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.
mcp_json_path="${HOME}/.cursor/mcp.json"
;;
codex)
# Codex:skill 装到 ~/.codex/skills/,MCP 配置是 TOML(~/.codex/config.toml),不走 JSON 路径
skill_dir="${HOME}/.codex/skills/${SKILL_NAME}"
;;
*)
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).
fi
if [ -d "${SKILL_DIR}/references" ]; then
rm -rf "${skill_dir}/references"
cp -R "${SKILL_DIR}/references" "${skill_dir}/references"
info "references/ 已复制"
fi
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).
fi
if [ -d "${SKILL_DIR}/scripts" ]; then
rm -rf "${skill_dir}/scripts"
cp -R "${SKILL_DIR}/scripts" "${skill_dir}/scripts"
info "scripts/ 已复制"
fi
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.
if [ "$host" = "codex" ]; then
# Codex 用 TOML 配置(~/.codex/config.toml),单独处理
write_codex_mcp_config
info "MCP 配置已写入 ${HOME}/.codex/config.toml"
else
write_mcp_config "$mcp_json_path" "$host"
info "MCP 配置已写入 ${mcp_json_path}"
No suspicious patterns detected.