hpr-solver
Skill declares only LP solving with official Julia/HPR-LP downloads, but the actual implementation contains undeclared LLM API calls to OpenRouter, undeclared WhatsApp notifications to a specific phone number (+85259562906), and hardcoded user paths suggesting targeted deployment.
为什么得出这个结论
2/4 个维度触发发现 4 项声明之外的能力或越权行为。
提取到 3 个一般风险产物,需要结合上下文判断。
报告包含 4 步攻击链,另有 2 项高危或严重发现。
依赖结构存在,但暂未看到明显高危告警。
攻击链
初始入口 · SKILL.md:1
reconnaissance · scripts/hpr_hybrid.py:325
权限提升 · scripts/hpr_hybrid.py:292
最终危害 · scripts/hpr_hybrid.py:500
风险分是怎么被拉高的
scripts/hpr_hybrid.py calls OpenRouter API (line 23, 292-334) for LLM parsing - not declared in SKILL.md
Sends WhatsApp messages to +85259562906 (lines 500, 509-511) - not declared anywhere
scripts/hpr_hybrid.py hardcodes /home/ljw/ paths; hprlp_solve.sh hardcodes /home/ljw/
Line 357 uses os.popen() for Julia execution without sandboxing
最关键的证据
Undeclared LLM API calls to OpenRouter
SKILL.md claims the skill only uses Julia/HPR-LP solver. In reality, hpr_hybrid.py calls OpenRouter API (https://openrouter.ai/api/v1/chat/completions) using minimax/MiniMax-M2.7 model to parse natural language problems. This sends user problem data to an external LLM service.
scripts/hpr_hybrid.py:23 Undeclared WhatsApp notifications
The script sends WhatsApp messages to +85259562906 via 'openclaw message send' command at lines 500 and 509-511. This behavior is completely absent from SKILL.md and reveals a specific contact number.
scripts/hpr_hybrid.py:500 Hardcoded user-specific paths
The scripts contain hardcoded paths referencing a specific user '/home/ljw/' in both hpr_hybrid.py (lines 488-489) and hprlp_solve.sh (lines 17-18). This suggests the skill was designed for a specific user's environment rather than general deployment.
scripts/hpr_hybrid.py:488 Environment variable API key access
The script reads OPENROUTER_API_KEY from environment variables (line 325) to authenticate with the external LLM API. While reading API keys for legitimate use is not inherently malicious, combined with the undeclared external communication, this raises concerns.
scripts/hpr_hybrid.py:325 os.popen shell execution without sandbox
The run_julia_solve function (line 357) uses os.popen() to execute Julia solver commands. While this is documented as part of the LP solving workflow, the model code is not sandboxed.
scripts/hpr_hybrid.py:357 声明能力 vs 实际能力
scripts/hpr_hybrid.py:357 writes temp .jl files to /tmp/ scripts/hpr_hybrid.py:23,292-334 - undeclared OpenRouter API calls scripts/hpr_hybrid.py:500,509 - os.system() for WhatsApp notifications scripts/hpr_hybrid.py:325 reads OPENROUTER_API_KEY from env 可疑产物与外联
https://julialang.org/downloads/ README.md:17
https://openrouter.ai/api/v1/chat/completions scripts/hpr_hybrid.py:23
https://openclaw.ai scripts/hpr_hybrid.py:349
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| urllib | stdlib | Python standard library | 否 | Standard library only |
文件构成
scripts/hpr_hybrid.py README.md