Low Risk — Risk Score 25/100
Last scan:11 hr ago Rescan
25 /100
skill-smc-multi-strategy-paper-trader
SMC Multi-Strategy Paper Trader — 多策略加密货币模拟交易系统,包含日内交易、波段交易、协调交易和宏观轮转策略,基于 Smart Money Concepts (SMC) 技术分析
合法的加密货币模拟交易技能,存在文档-行为差异:SKILL.md 声明仅需 Binance 公开 API,但实际代码通过 execSync+curl 获取 FRED 宏观数据并读写 GitHub token,属于未声明的网络和 shell 能力,意图为支持宏观轮转策略所需。
Skill Nameskill-smc-multi-strategy-paper-trader
Duration65.4s
Enginepi
Safe to install
建议在 SKILL.md 中补充声明 FRED/curl 远程数据获取和 GitHub token 同步能力,其余代码行为与交易功能一致,无恶意迹象。

Findings 3 items

Severity Finding Location
Medium
文档声明与实际能力严重不符 Doc Mismatch
SKILL.md 明确声明 'Binance public API only — no credentials needed',但所有脚本均读取 ~/.github_token 文件进行 GitHub API 推送,且 regime-scorer.js 和 macro-rotation.js 通过 execSync 执行 curl 获取 FRED 数据。核心能力(FRED 宏观数据获取、GitHub 数据同步)完全未声明。
Binance public API only — no credentials needed
→ 在 SKILL.md 的 Architecture 和 Running 章节中补充声明 FRED 宏观数据获取(通过 curl)和 GitHub portfolio 同步功能
SKILL.md:1
Medium
未声明的 shell 执行能力 Priv Escalation
regime-scorer.js 的 fetchFRED() 和 macro-rotation.js 的 fetchFRED() 均使用 child_process.execSync 执行 curl 命令从外部 URL 获取 CSV 数据。这赋予了超越 https.get 的 shell 级别的能力(可执行任意命令),虽然此处仅用于合法的 API 数据获取,但属于高危能力的阴影功能。
const csv = execSync(`curl -sL --max-time 12 "${url}"`, { encoding: 'utf8', timeout: 15000 });
→ 如非必要,将 execSync 替换为纯 Node.js https.get;如必需,在 SKILL.md 中明确声明 shell 执行能力
scripts/regime-scorer.js:178
Low
GitHub token 文件访问未声明 Sensitive Access
所有脚本(paper-monitor-*.js、macro-rotation.js、regime-scorer.js)均读取 process.env.HOME + '.github_token' 文件,使用该 token 通过 GitHub API 将 portfolio JSON 推送到 Zero2Ai-hub/Jarvis-Ops 仓库。虽然这是合法功能(同步 dashboard 数据),但 SKILL.md 'no credentials needed' 的声明与该行为矛盾。
const ghToken = fs2.readFileSync(path2.join(process.env.HOME, '.github_token'), 'utf8').trim();
→ 在 SKILL.md 中声明需要 GitHub personal access token(用于将 portfolio 数据推送到指定的 GitHub 仓库以支持 dashboard 展示)
scripts/paper-monitor-v5.js:220
ResourceDeclaredInferredStatusEvidence
Network READ READ ✓ Aligned SKILL.md 声明使用 Binance 公开 API 和 alternative.me API,代码仅通过 https.get 访问
Network NONE READ ✗ Violation regime-scorer.js:178-193, macro-rotation.js:fetchFRED 使用 execSync+curl 访问 FRED.s…
Shell NONE WRITE ✗ Violation regime-scorer.js:178, macro-rotation.js 使用 execSync 执行 curl 命令
Filesystem NONE WRITE ✗ Violation 所有脚本在 ~/.openclaw/workspace/trading/ 下读写 JSON 文件,portfolio 数据推送到 GitHub
Environment NONE READ ✗ Violation 所有脚本读取 process.env.HOME 和 ~/.github_token,SKILL.md 未声明
13 findings
🔗
Medium External URL 外部 URL
https://fred.stlouisfed.org/graph/fredgraph.csv?id=$
scripts/macro-rotation.js:68
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/klines?symbol=$
scripts/macro-rotation.js:77
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/fundingRate?symbol=$
scripts/macro-rotation.js:83
🔗
Medium External URL 外部 URL
https://fapi.binance.com/futures/data/globalLongShortAccountRatio?symbol=$
scripts/macro-rotation.js:87
🔗
Medium External URL 外部 URL
https://fapi.binance.com/futures/data/openInterestHist?symbol=$
scripts/macro-rotation.js:91
🔗
Medium External URL 外部 URL
https://api.alternative.me/fng/?limit=30
scripts/macro-rotation.js:95
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/ticker/price?symbol=$
scripts/macro-rotation.js:707
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=4h&limit=60
scripts/paper-monitor-coordinated.js:89
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=15m&limit=30
scripts/paper-monitor-coordinated.js:97
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/klines?symbol=BTCUSDT&interval=1d&limit=60
scripts/paper-monitor-coordinated.js:108
🔗
Medium External URL 外部 URL
https://fapi.binance.com/fapi/v1/fundingRate?symbol=BTCUSDT&limit=30
scripts/regime-scorer.js:753
🔗
Medium External URL 外部 URL
https://fapi.binance.com/futures/data/globalLongShortAccountRatio?symbol=BTCUSDT&period=4h&limit=30
scripts/regime-scorer.js:754
🔗
Medium External URL 外部 URL
https://fapi.binance.com/futures/data/openInterestHist?symbol=BTCUSDT&period=4h&limit=30
scripts/regime-scorer.js:755

File Tree

9 files · 188.6 KB · 4472 lines
JavaScript 7f · 4240L Markdown 2f · 232L
├─ 📁 public
│ └─ 📝 SKILL.md Markdown 76L · 3.0 KB
├─ 📁 scripts
│ ├─ 📜 macro-rotation.js JavaScript 876L · 38.0 KB
│ ├─ 📜 paper-monitor-coordinated.js JavaScript 401L · 20.7 KB
│ ├─ 📜 paper-monitor-swing-v2.js JavaScript 486L · 20.1 KB
│ ├─ 📜 paper-monitor-swing.js JavaScript 511L · 20.8 KB
│ ├─ 📜 paper-monitor-v5.js JavaScript 561L · 21.2 KB
│ ├─ 📜 paper-monitor-v6.js JavaScript 528L · 19.8 KB
│ └─ 📜 regime-scorer.js JavaScript 877L · 39.3 KB
└─ 📝 SKILL.md Markdown 156L · 5.5 KB

Dependencies 1 items

PackageVersionSourceKnown VulnsNotes
node (runtime) native builtin No 仅使用 Node.js 内置模块:https, fs, path, child_process

Security Positives

✓ 所有 Binance API 调用均使用公开端点,无 API key 或 secret 依赖
✓ 无凭证收割行为(不遍历环境变量寻找敏感关键字,不读取 ~/.ssh、~/.aws、.env 等)
✓ 无数据外泄行为(portfolio 数据仅推送到用户自己控制的 GitHub 仓库 Zero2Ai-hub/Jarvis-Ops)
✓ 无混淆代码(无 base64 解码执行、eval、atob 等反分析技术)
✓ 无持久化后门(无 cron 计划任务植入、无修改 ~/.bashrc 等启动脚本)
✓ 代码质量较高,包含完整的数学计算(SMC 结构检测、FVG、ATR、RSI、MACD、OBV、布林带等)和风控逻辑(SL/TP/追踪止损)
✓ 无外部恶意依赖(Node.js 原生模块 + 标准 HTTPS 请求,无第三方包依赖)
✓ portfolio 数据为模拟交易数据,不涉及真实资金或敏感用户数据