calendar_memo
Skill executes undeclared shell commands via child_process.exec and runs persistent background timers without proper documentation disclosure.
Why this conclusion was reached
2/4 dimensions flagged2 undeclared or violating capabilities were inferred.
No obvious high-risk egress or execution signals were found.
The report includes 4 attack-chain steps and 1 severe findings.
Dependency information is incomplete, so supply-chain confidence stays limited.
Attack Chain
Entry · SKILL.md:1
Escalation · SOUL.md:44
Execution · reminder.js:35
Impact · reminder.js:18
What drove the risk score up
reminder.js uses child_process.exec() to run 'openclaw message send' but SKILL.md only mentions '飞书等通道' without explaining shell command execution mechanism
setInterval runs every 60 seconds indefinitely, creating a background daemon. SKILL.md does not mention periodic background activity.
User-controlled title field is interpolated into shell command string with only quote escaping. Other shell metacharacters not sanitized.
SKILL.md declares filesystem:READ but code uses filesystem:WRITE for MEMORY.md. Shell:WRITE usage not declared.
Most important evidence
Undeclared shell command execution
The skill uses child_process.exec() to execute 'openclaw message send' but SKILL.md only mentions '飞书等通道' (Feishu channels) without explaining the shell execution mechanism. Users cannot make informed decisions about allowing this skill.
reminder.js:18 Shell command injection risk in notification function
The sendPushNotification function builds a shell command by interpolating user-controlled event title into a command string. While only double quotes are escaped, other shell metacharacters could potentially be dangerous if the message format changes.
reminder.js:14 Hidden background daemon without disclosure
The skill starts a setInterval timer that runs checkReminders() every 60 seconds. This creates a persistent background process that continues running until skill is explicitly stopped. SKILL.md does not mention this behavior.
reminder.js:55 Minor doc-to-code mismatch on filesystem permissions
SKILL.md capability section mentions '读取和编辑MEMORY.md' (read and edit) but only declares filesystem:READ. The code writes to MEMORY.md using writeFileSync.
SOUL.md:13 Declared capability vs actual capability
reminder.js:3 - fs module available; SOUL.md:13 - fs.writeFileSync writes MEMORY.md reminder.js:4 - const { exec } = require('child_process'); reminder.js:18 - exec(cmd, callback) reminder.js:18 - exec runs 'openclaw message send --channel feishu' which sends network requests No direct environment variable access found Suspicious artifacts and egress
No obvious IOC was extracted.
Dependencies and supply chain
There are no structured dependency warnings.
File composition
SOUL.md reminder.js