Why this conclusion was reached
0/4 dimensions flagged Pass Declared vs actual capability Declared resources and inferred behavior are broadly aligned.
Review Hidden execution and egress 27 lower-risk artifacts were extracted and still need context.
Pass Attack chain and severe findings There is no explicit malicious chain in the report.
Review Dependencies and supply chain hygiene 1 dependency or supply-chain issues need attention.
What drove the risk score up
权限声明宽泛 +10
SKILL.md未声明allowed-tools,但代码使用了filesystem和network
依赖无版本锁定 +5
axios和ws在package.json中使用^通配符
凭证存储在配置文件 +5
API密钥存储在~/.openclaw/*.json而非环境变量
Most important evidence
Medium
第三方依赖无版本锁定
axios使用^1.6.0,ws使用^8.14.2,可能拉取有漏洞的更新版本
package.json:18 固定版本如 "axios": "1.6.8"
Low
SKILL.md未声明allowed-tools
文档未列出skill_invoke、filesystem、network等声明,但代码确实使用了这些资源
SKILL.md:1 添加allowed-tools声明
Low
配置文件存储敏感凭证
API密钥存储在~/.openclaw/*.json而非环境变量,与"安全工具"场景有差异
scripts/receiver.js:35 考虑使用环境变量存储敏感凭证
Declared capability vs actual capability
Filesystem Pass
Declared NONE
→ Inferred WRITE
scripts/receiver.js:39-42 配置文件读取 Filesystem Pass
Declared NONE
→ Inferred WRITE
scripts/receiver.js:67-68,96 PID和日志文件写入 Network Pass
Declared NONE
→ Inferred WRITE
scripts/receiver.js:103-105 WebSocket连接到ws_url Network Pass
Declared NONE
→ Inferred WRITE
scripts/receiver.js:113-116 POST到飞书API Network Pass
Declared NONE
→ Inferred WRITE
scripts/receiver.js:170-173 POST到LLM API Environment Pass
Declared NONE
→ Inferred READ
scripts/receiver.js:35 os.homedir()获取home路径
Suspicious artifacts and egress
Medium External URL
https://ark.cn-beijing.volces.com/api/v3 SKILL.md:38
Medium External URL
https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz package-lock.json:17
Medium External URL
https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz package-lock.json:23
Medium External URL
https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz package-lock.json:34
Medium External URL
https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz package-lock.json:47
Medium External URL
https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz package-lock.json:59
Medium External URL
https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz package-lock.json:68
Medium External URL
https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz package-lock.json:82
Medium External URL
https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz package-lock.json:91
Medium External URL
https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz package-lock.json:100
Medium External URL
https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz package-lock.json:112
Medium External URL
https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz package-lock.json:127
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
| ws | ^8.14.2 | npm | No | WebSocket客户端,版本较新 |
| axios | ^1.6.0 | npm | No | HTTP客户端,无版本锁定存在供应链风险 |
File composition
6 files · 837 lines JavaScript 1 files · 374 linesJSON 4 files · 343 linesMarkdown 1 files · 120 lines
Files of concern · 4
package-lock.json JSON · 316 lines
https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz · https://registry.npmmirror.com/axios/-/axios-1.13.6.tgz · https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz · https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz · https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz · https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz · https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz · https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz · https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz · https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz · https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz · https://registry.npmmirror.com/form-data/-/form-data-4.0.5.tgz · https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz · https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz · https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz · https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz · https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz · https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz · https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz · https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz · https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz · https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz · https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz · https://registry.npmmirror.com/ws/-/ws-8.19.0.tgz
scripts/receiver.js JavaScript · 374 lines
配置文件存储敏感凭证 · https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal · https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id
SKILL.md Markdown · 120 lines
SKILL.md未声明allowed-tools · https://ark.cn-beijing.volces.com/api/v3
package.json JSON · 13 lines
第三方依赖无版本锁定
Other files · metadata.json · _meta.json
6 files · 24.0 KB · 837 lines
JavaScript 1f · 374LJSON 4f · 343LMarkdown 1f · 120L
├─
▾
📁
scripts
│ └─
📜
receiver.js
JavaScript
374L · 9.9 KB
├─
📝
SKILL.md
Markdown
120L · 2.7 KB
├─
📋
_meta.json
JSON
5L · 142 B
├─
📋
metadata.json
JSON
9L · 289 B
├─
📋
package-lock.json
JSON
316L · 10.7 KB
└─
📋
package.json
JSON
13L · 289 B
Security positives
代码结构清晰,功能单一且专注
错误处理完善(try-catch、异常兜底)
网络请求目标明确(飞书API、豆包API、WebSocket源)
日志记录完整,便于审计
无命令注入、eval、base64解码等危险操作
配置文件与代码分离,敏感信息不硬编码