Why this conclusion was reached 2/4 dimensions flagged Block Declared vs actual capability 2 undeclared or violating capabilities were inferred.
Pass Hidden execution and egress No obvious high-risk egress or execution signals were found.
Block Attack chain and severe findings The report includes 4 attack-chain steps and 2 severe findings.
Review Dependencies and supply chain hygiene 3 dependency or supply-chain issues need attention.
Attack Chain 01 Skill presents as farming game in SKILL.md with misleading documentation Entry · SKILL.md:1
02 start.sh contains hidden infrastructure code for Docker scheduler unrelated to farming delivery · start.sh:1
03 Code executes shell commands via spawn/spawnSync despite SKILL.md claiming no shell/exec Escalation · src/index.ts:58
04 Process enumeration via ps command for process management Escalation · src/index.ts:42
What drove the risk score up start.sh hidden infrastructure code +35
start.sh contains unrelated code for Docker scheduler, tiny_sage, cloudbuild - completely different from farming game described in SKILL.md
SKILL.md shell execution claim violated +20
SKILL.md states '不用 shell/exec/cargo 等其它执行路径' but code uses spawnSync/spawn for openclaw, npx tsx, ps commands
Undeclared subprocess usage +12
Multiple files use spawnSync to execute external binaries without documentation
Process enumeration +5
listRunningAutoWorkerPids() runs 'ps' command to enumerate processes
Most important evidence Critical Doc Mismatch
start.sh contains completely unrelated code start.sh implements Docker scheduler infrastructure with tiny_sage, cloudbuild paths, and unrelated integrations - nothing to do with farming
start.sh:1 Delete start.sh or document its actual purpose in SKILL.md
High Doc Mismatch
SKILL.md claims no shell execution but code violates this SKILL.md explicitly states '不用 shell/exec/cargo 等其它执行路径' but src/index.ts, openclaw-push.ts, and openclaw-plugin/index.ts use spawnSync/spawn
SKILL.md:6 Update SKILL.md to declare actual shell execution requirements or remove subprocess usage
Medium RCE
Undeclared subprocess execution via npx tsx Code spawns 'npx tsx' processes to run TypeScript workers without documentation
src/index.ts:58 Document all external command invocations in SKILL.md
Medium RCE
Process enumeration via ps command listRunningAutoWorkerPids() runs 'ps -Ao pid,command' to enumerate processes
src/index.ts:42 Document process enumeration behavior
Low Sensitive Access
Access to home directory for config files Skill reads/writes to ~/.grinders-farm/ directory
src/storage/local-storage.ts:20 Document home directory access in SKILL.md
Declared capability vs actual capability Filesystem Block
Declared READ
→ Inferred WRITE
SKILL.md declares no exec, but src/index.ts:58 spawns processes Shell Block
Declared NONE
→ Inferred WRITE
SKILL.md explicitly says '不用 shell/exec' but multiple files use spawn/spawnSync Network Pass
Declared NONE
→ Inferred READ
openclaw-push.ts sends messages via openclaw CLI
Suspicious artifacts and egress No obvious IOC was extracted.
Dependencies and supply chain Package Version Source Known vuln Notes @napi-rs/canvas ^0.1.97 npm No Image rendering library, version not pinned tsx ^4.21.0 npm devDependency No TypeScript executor, version not pinned typescript ^5.9.3 npm devDependency No TypeScript compiler, version not pinned
File composition Composition File tree
34 files · 4997 lines TypeScript 22 files · 3570 lines JSON 6 files · 982 lines Markdown 4 files · 373 lines Shell 1 files · 38 lines JavaScript 1 files · 34 lines
Files of concern · 1
src/storage/local-storage.ts TypeScript · 114 lines
Access to home directory for config files
Other files · package-lock.json · openclaw-push.ts · index.ts · farm.ts · local-auto.ts · engine.ts +5
34 files · 156.7 KB · 4997 lines
TypeScript 22f · 3570L JSON 6f · 982L Markdown 4f · 373L Shell 1f · 38L JavaScript 1f · 34L
├─
▾
📁
openclaw-plugin
│ ├─
📝
README.md
Markdown
92L · 1.7 KB
│ ├─
📜
delivery.ts
TypeScript
177L · 6.3 KB
│ ├─
📜
index.ts
TypeScript
446L · 16.4 KB
│ ├─
📋
openclaw.plugin.json
JSON
23L · 899 B
│ ├─
📋
package.json
JSON
31L · 655 B
│ ├─
📜
start-image-server.ts
TypeScript
86L · 2.6 KB
│ ├─
📜
start-local-auto.ts
TypeScript
137L · 4.0 KB
│ └─
📋
tsconfig.json
JSON
17L · 424 B
├─
▾
📁
scripts
│ ├─
📜
generate-tiles.ts
TypeScript
163L · 4.3 KB
│ └─
📜
sync-skill.mjs
JavaScript
34L · 1.0 KB
├─
▾
📁
src
│ ├─
▾
📁
adapters
│ │ ├─
📜
auto-worker.ts
TypeScript
87L · 2.7 KB
│ │ ├─
📜
daemon.ts
TypeScript
10L · 267 B
│ │ ├─
📜
image-server.ts
TypeScript
107L · 2.7 KB
│ │ ├─
📜
oneshot.ts
TypeScript
41L · 1.4 KB
│ │ └─
📜
terminal.ts
TypeScript
79L · 2.0 KB
│ ├─
▾
📁
game
│ │ ├─
📜
crops.ts
TypeScript
84L · 2.2 KB
│ │ ├─
📜
engine.ts
TypeScript
266L · 7.7 KB
│ │ ├─
📜
farm.ts
TypeScript
418L · 14.7 KB
│ │ └─
📜
types.ts
TypeScript
85L · 1.9 KB
│ ├─
▾
📁
notify
│ │ ├─
📜
openclaw-delivery.ts
TypeScript
126L · 4.7 KB
│ │ └─
📜
openclaw-push.ts
TypeScript
501L · 18.5 KB
│ ├─
▾
📁
render
│ │ ├─
📜
ansi-renderer.ts
TypeScript
52L · 1.4 KB
│ │ ├─
📜
image-renderer.ts
TypeScript
231L · 7.6 KB
│ │ └─
📜
text-renderer.ts
TypeScript
81L · 2.7 KB
│ ├─
▾
📁
storage
│ │ └─
📜
local-storage.ts
TypeScript
114L · 3.0 KB
│ ├─
📜
index.ts
TypeScript
8L · 572 B
│ └─
📜
local-auto.ts
TypeScript
271L · 8.6 KB
├─
📝
README.md
Markdown
119L · 2.6 KB
├─
📝
RELEASE_CHECKLIST.md
Markdown
73L · 2.7 KB
├─
📝
SKILL.md
Markdown
89L · 2.7 KB
├─
📋
package-lock.json
JSON
846L · 25.0 KB
├─
📋
package.json
JSON
46L · 1.1 KB
├─
🔧
start.sh
Shell
38L · 1.3 KB
└─
📋
tsconfig.json
JSON
19L · 473 B
Security positives Farming game logic itself appears legitimate with no malicious code
No evidence of credential theft or API key harvesting
No base64-encoded commands or obfuscation observed
No C2 communication or external IP connections
No reverse shell or remote code execution vulnerabilities
Dependencies (@napi-rs/canvas) are standard image rendering library