feishu-evolver-wrapper
Feishu evolver wrapper with significant undocumented shell execution, dynamic code evaluation, process control, and persistence mechanisms that lack clear security justification in documentation.
为什么得出这个结论
1/4 个维度触发发现 5 项声明之外的能力或越权行为。
提取到 3 个一般风险产物,需要结合上下文判断。
没有形成明确的恶意路径。
发现 1 项需要关注的依赖或供应链线索。
风险分是怎么被拉高的
Uses eval pattern on LLM-generated JSON that may contain untrusted content (index.js:1230)
execSync/spawn used for git, openclaw CLI, and node -c commands across multiple files without declaration in SKILL.md
Manages PIDs, kills processes, creates cron jobs without documentation
Bash daemon, PID files, and cron job registration via openclaw CLI
Reads hints from INJECTION_FILE and appends to task content (potential prompt injection vector)
Complex index.js with significant attack surface
最关键的证据
Dynamic code evaluation on untrusted input
Uses new Function() constructor to parse JSON with unquoted keys extracted from LLM output. While input is from internal spawn output, it represents eval-like behavior that could be exploited if spawn output is manipulated.
index.js:1230 Undeclared shell execution for git operations
execSync spawns git add/commit/push/pull and git log commands. These are core to functionality but not declared in SKILL.md.
index.js:400 Undeclared openclaw CLI execution
lifecycle.js executes openclaw cron commands (list, add, edit) via execSync to manage watchdog cron jobs.
lifecycle.js:150 Missing declaration of process control
Code manages PIDs, kills stale processes, creates daemon processes, and performs process health checks. None of this is documented.
lifecycle.js:200 Thought injection via external file
getInjectionHint() reads from evolver_hint.txt and appends content to task prompts. While useful for control, it creates a prompt injection vector if the file can be modified by attackers.
index.js:450 Session lock file deletion
Deletes stale session lock files from ~/.openclaw/agents/main/sessions/ older than 5 minutes.
index.js:500 Version not pinned in dependencies
package.json has evolver as file:../evolver which is a local path dependency without version constraints.
package.json:8 Skills monitor can execute arbitrary node code
skills_monitor.js runs `node -e "require('...')`" on skills to check if dependencies are missing. While documented as 'only for validation', it has potential for abuse.
skills_monitor.js:50 声明能力 vs 实际能力
index.js:execSync lines, lifecycle.js:execSync for git/CLI, self-repair.js, skills_monitor.js feishu-helper.js:90 - POSTs to open.feishu.cn API Writes to memory/, logs/, workspace/ directories with atomic tmp+rename patterns Reads EVOLVE_*, FEISHU_*, OPENCLAW_* vars, sets them for child processes N/A N/A N/A Spawns openclaw agent sessions and manages evolver lifecycle 可疑产物与外联
https://open.feishu.cn/open-apis/docx/v1/documents/$ export_history.js:76
https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type= feishu-helper.js:90
https://open.feishu.cn/open-apis/im/v1/chats?page_size=100$ report.js:260
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| evolver | file:../evolver | local | 否 | Local path dependency, not version pinned |
| fetchWithAuth | N/A | ../feishu-common | 否 | Local shared module |
文件构成
index.js lifecycle.js report.js skills_monitor.js export_history.js feishu-helper.js