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.
Why this conclusion was reached
1/4 dimensions flagged5 undeclared or violating capabilities were inferred.
3 lower-risk artifacts were extracted and still need context.
There is no explicit malicious chain in the report.
1 dependency or supply-chain issues need attention.
What drove the risk score up
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
Most important evidence
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 Declared capability vs actual capability
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 Suspicious artifacts and egress
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
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
|---|---|---|---|---|
| evolver | file:../evolver | local | No | Local path dependency, not version pinned |
| fetchWithAuth | N/A | ../feishu-common | No | Local shared module |
File composition
index.js lifecycle.js report.js skills_monitor.js export_history.js feishu-helper.js