Description-Behavior Mismatch
- Category
- MCP Tool Poisoning
- Confidence
- 99% confidence
- Finding
代码仅包含两条文档转换命令,没有调用 Cue、获取或分析股票数据,也没有实现筹码分布、均线阻力或量能推演。文档导出可以是分析流程的辅助实现细节,但所提供代码未体现任何相关分析流程,因此其实际主要用途与声明存在实质差异。
- Content
Security audit
Security checks for vulnerabilities and agentic risk
This stock-analysis skill needs review because it automatically updates code that uses your API key while giving contradictory instructions about access to that key.
Before installing, review and pin the runner version and clarify how the API key will be handled. Keep the key in local configuration rather than pasting it into chat. Stock queries and optional holding costs go to Cue; scheduled runs consume credits and should be enabled only for stocks and times you explicitly choose.
代码仅包含两条文档转换命令,没有调用 Cue、获取或分析股票数据,也没有实现筹码分布、均线阻力或量能推演。文档导出可以是分析流程的辅助实现细节,但所提供代码未体现任何相关分析流程,因此其实际主要用途与声明存在实质差异。
Installing a runner is a disclosed dependency, so repository installation is not inherently a description-behavior mismatch. However, the instructions automatically clone or update an unpinned repository, optionally from a second host, and subsequently execute its Python code; compromised upstream content could therefore execute with the agent's local permissions and access credentials or reports.
Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.
CUE_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.cue/config.json'))['api_key'])" 2>/dev/null || echo "$CUE_API_KEY") echo "=== 1/3 API Key ===" && [ -n "$CUE_KEY" ] && echo "已配置" || echo "未配置!" echo "=== 2/3 Cue 服务 ===" && curl -sS --max-time 10 "https://cuecue.cn/api/health" -H "Authorization: Bearer $CUE_KEY" echo "=== 3/3 搭子 ===" && curl -sS --max-time 10 "https://cuecue.cn/api/playbook" -H "Authorization: Bearer $CUE_KEY" | python3 -c "import sys,json;scenes=json.load(sys.stdin).get('data',{}).get('scenes',[]);buddy=[b for s in scenes if s.get('secondary_category')=='短线盘面' for b in s.get('buddies',[]) if b.get('title')=='个股短线筹码阻力穿透'];print(f'可用:{len(buddy)}个') if buddy else print('暂不可用')"
| 检查 | 预期 | 异常处理 |
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
| 环境 | 配置方式 |
|------|---------|
| Claude Code | 用 `CronCreate`,cron 表达式 `30 16 * * 1-5`(自定义时间按用户所选取 分 时 日 月 周) |
| macOS | 建 `~/Library/LaunchAgents/com.cue.unwind-pressure-line.plist`,`StartCalendarInterval` 设 `Weekday` 1–5、`Hour` 16、`Minute` 30,再 `launchctl load` |
| Linux | `crontab -e` 追加 `30 16 * * 1-5 <上面的命令>` |
配完必须回报三件事:**触发时间、绑定标的、如何关掉**(Claude Code 删任务 / `launchctl unload` / `crontab -e` 删除对应行)。
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
| 环境 | 配置方式 |
|------|---------|
| Claude Code | 用 `CronCreate`,cron 表达式 `30 16 * * 1-5`(自定义时间按用户所选取 分 时 日 月 周) |
| macOS | 建 `~/Library/LaunchAgents/com.cue.unwind-pressure-line.plist`,`StartCalendarInterval` 设 `Weekday` 1–5、`Hour` 16、`Minute` 30,再 `launchctl load` |
| Linux | `crontab -e` 追加 `30 16 * * 1-5 <上面的命令>` |
配完必须回报三件事:**触发时间、绑定标的、如何关掉**(Claude Code 删任务 / `launchctl unload` / `crontab -e` 删除对应行)。
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
|------|---------|
| Claude Code | 用 `CronCreate`,cron 表达式 `30 16 * * 1-5`(自定义时间按用户所选取 分 时 日 月 周) |
| macOS | 建 `~/Library/LaunchAgents/com.cue.unwind-pressure-line.plist`,`StartCalendarInterval` 设 `Weekday` 1–5、`Hour` 16、`Minute` 30,再 `launchctl load` |
| Linux | `crontab -e` 追加 `30 16 * * 1-5 <上面的命令>` |
配完必须回报三件事:**触发时间、绑定标的、如何关掉**(Claude Code 删任务 / `launchctl unload` / `crontab -e` 删除对应行)。
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
| macOS | 建 `~/Library/LaunchAgents/com.cue.unwind-pressure-line.plist`,`StartCalendarInterval` 设 `Weekday` 1–5、`Hour` 16、`Minute` 30,再 `launchctl load` |
| Linux | `crontab -e` 追加 `30 16 * * 1-5 <上面的命令>` |
配完必须回报三件事:**触发时间、绑定标的、如何关掉**(Claude Code 删任务 / `launchctl unload` / `crontab -e` 删除对应行)。
### 必须提前告知的两个坑
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
| 目标格式 | 依赖 | macOS | Ubuntu |
|----------|------|-------|--------|
| Word (.docx) | pandoc | `brew install pandoc` | `sudo apt install pandoc` |
| PDF (.pdf) | pandoc + LaTeX | `brew install --cask basictex` | `sudo apt install texlive-xetex` |
---
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
| 目标格式 | 依赖 | macOS | Ubuntu |
|----------|------|-------|--------|
| Word (.docx) | pandoc | `brew install pandoc` | `sudo apt install pandoc` |
| PDF (.pdf) | pandoc + LaTeX | `brew install --cask basictex` | `sudo apt install texlive-xetex` |
---
L170 and L220 explicitly state that the agent has no authority to view the user's API key. However, the agent-directed health check at L231 extracts the plaintext key from ~/.cue/config.json (or CUE_API_KEY) into a shell variable, then uses it in requests at L233–L234. This contradicts the documented credential-access boundary, even though the requests target the intended Cue service.
No suspicious patterns detected.