Why this conclusion was reached
2/4 dimensions flagged Block Declared vs actual capability 4 undeclared or violating capabilities were inferred.
Block Hidden execution and egress 1 high-risk artifacts or egress signals were extracted.
Pass Attack chain and severe findings There is no explicit malicious chain in the report.
Pass Dependencies and supply chain hygiene Dependencies are present but no obvious high-risk issue stands out.
What drove the risk score up
设备指纹收集 +15
收集 BIOS UUID + MAC 地址生成 device_id,用于登录请求
凭证外传 +10
用户名密码以明文 POST 到外部 IP,敏感凭证离开本地环境
硬编码 IP +10
后端地址 54.160.24.241:8771 为裸 IP,无法验证证书或域名归属
读取 OpenClaw 配置 +5
访问 ~/.openclaw/openclaw.json 获取 gateway token 和 Discord token
系统命令执行 +5
使用 execSync 执行 wmic/cat 命令读取 BIOS UUID
Most important evidence
Medium Credential Theft
凭证以明文发送至外部服务器
用户登录时,用户名和密码以明文 JSON 格式 POST 到 54.160.24.241:8771/api/v1/auth/login。虽然是 HTTPS 传输,但凭证离开了用户本地环境。
lib-js/api.mjs:136 考虑使用 token-based 认证替代明文密码传输,或确保后端完全可信
Medium Sensitive Access
设备指纹收集(BIOS UUID + MAC 地址)
getDeviceId() 函数收集系统 BIOS UUID(非 Windows 使用 /sys/class/dmi/id/product_uuid)和所有非内部网卡的 MAC 地址,生成 device_id 用于登录请求。这可能用于跨实例追踪。
lib-js/api.mjs:80 明确告知用户此数据收集的目的和范围,或使用不涉及硬件信息的设备标识方案
Medium Supply Chain
硬编码外部 IP 地址
config.json 中 data_service.base_url 硬编码为 http://54.160.24.241:8771,无法验证服务器身份(无域名、证书锚定)。如 DNS 被劫持可导向恶意服务器。
config.json:4 1. 使用域名替代裸 IP;2. 实现证书校验;3. 添加 SSH fingerprint 或 pin
Low Sensitive Access
读取 OpenClaw 配置文件
card-tools.mjs 和 trigger.mjs 读取 ~/.openclaw/openclaw.json 获取 gateway auth token 和各渠道(Discord/飞书等)的 bot token。这些凭证用于调用本地 gateway 和注册 Discord 命令。
lib-js/card-tools.mjs:41 确认这些凭证仅用于本地 gateway 通信,不会上传至外部 data-service
Low Sensitive Access
本地文件写入操作
技能在 data/ 目录下创建并写入多个文件:token.json(认证令牌)、card_map.json、processed_events.json、poll_state.json,以及 Python 临时脚本。
lib-js/api.mjs:65 验证 data/ 目录权限设置,避免其他用户读取敏感状态数据
Info Doc Mismatch
SKILL.md 编码异常
SKILL.md 文件存在大量乱码(UTF-8 编码的中文显示为 �/� 等字符),但实际功能逻辑可通过代码审查还原。文档完整性受损,无法有效声明功能范围。
SKILL.md:1 修复文档编码,确保声明与实际行为一致
Declared capability vs actual capability
Network Block
Declared NONE
→ Inferred WRITE
所有 API 请求(认证/推荐/事件)均发往外部 IP 54.160.24.241 Environment Block
Declared NONE
→ Inferred READ
api.mjs:96 读取 HTTPS_PROXY/HTTP_PROXY;card-tools.mjs 读取完整 openclaw.json Filesystem Block
Declared NONE
→ Inferred WRITE
存储 token.json、设备指纹到本地 data/ 目录 Shell Block
Declared NONE
→ Inferred READ
api.mjs:80-109 通过 execSync 执行系统命令读取 BIOS UUID
Suspicious artifacts and egress
High IP Address
54.160.24.241 config.json:4
Medium External URL
https://tiktok.com/@x/video/123 README.md:24
Medium External URL
http://127.0.0.1:18789/tools/invoke README.md:394
Medium External URL
http://127.0.0.1:18789 README.md:570
Medium External URL
https://tiktok.com/... README.md:601
Medium External URL
https://tiktok.com/@creator/video/123 README.md:610
Medium External URL
https://shop.tiktok.com/product/456 README.md:615
Medium External URL
http://54.160.24.241:8771 config.json:4
Medium External URL
https://discord.com/api/v10/applications/@me lib-js/register-discord.mjs:73
Medium External URL
https://discord.com/api/v10/users/@me/guilds lib-js/register-discord.mjs:86
Medium External URL
https://discord.com/api/v10/applications/$ lib-js/register-discord.mjs:103
Medium External URL
https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal lib-js/register-feishu.mjs:20
Dependencies and supply chain
| Package | Version | Source | Known vuln | Notes |
| Pillow | 未声明 | pip (本地调用) | No | 用于 webchat 图片压缩,功能合法 |
File composition
18 files · 4827 lines JavaScript 12 files · 3349 linesMarkdown 4 files · 1462 linesJSON 2 files · 16 lines
Files of concern · 7
config.json JSON · 11 lines
硬编码外部 IP 地址 · 54.160.24.241 · http://54.160.24.241:8771
lib-js/card-tools.mjs JavaScript · 1086 lines
读取 OpenClaw 配置文件
README.md Markdown · 664 lines
https://tiktok.com/@x/video/123 · http://127.0.0.1:18789/tools/invoke · http://127.0.0.1:18789 · https://tiktok.com/... · https://tiktok.com/@creator/video/123 · https://shop.tiktok.com/product/456
SKILL.md Markdown · 664 lines
SKILL.md 编码异常
lib-js/trigger.mjs JavaScript · 576 lines
https://docs.openclaw.ai/channels/discord\n\n
lib-js/api.mjs JavaScript · 266 lines
凭证以明文发送至外部服务器 · 设备指纹收集(BIOS UUID + MAC 地址) · 本地文件写入操作
lib-js/register-discord.mjs JavaScript · 138 lines
https://discord.com/api/v10/applications/@me · https://discord.com/api/v10/users/@me/guilds · https://discord.com/api/v10/applications/$
Other files · handle-button.mjs · poll-loop.mjs · poll-events.mjs · send-persona-card.mjs · SOUL.md
18 files · 186.2 KB · 4827 lines
JavaScript 12f · 3349LMarkdown 4f · 1462LJSON 2f · 16L
├─
▾
📁
lib-js
│ ├─
📜
api.mjs
JavaScript
266L · 7.7 KB
│ ├─
📜
card-tools.mjs
JavaScript
1086L · 35.8 KB
│ ├─
📜
handle-button.mjs
JavaScript
403L · 14.7 KB
│ ├─
📜
poll-events.mjs
JavaScript
231L · 8.3 KB
│ ├─
📜
poll-loop.mjs
JavaScript
275L · 9.9 KB
│ ├─
📜
register-discord.mjs
JavaScript
138L · 3.7 KB
│ ├─
📜
register-feishu.mjs
JavaScript
98L · 3.0 KB
│ ├─
📜
send-persona-card.mjs
JavaScript
102L · 3.5 KB
│ ├─
📜
send-review-1-5.mjs
JavaScript
54L · 1.9 KB
│ ├─
📜
send-review-1.mjs
JavaScript
67L · 2.3 KB
│ ├─
📜
send-review-2.mjs
JavaScript
53L · 1.8 KB
│ └─
📜
trigger.mjs
JavaScript
576L · 22.3 KB
├─
📝
README.md
Markdown
664L · 32.5 KB
├─
📝
SKILL.md
Markdown
664L · 32.5 KB
├─
📝
SOUL.md
Markdown
91L · 3.2 KB
├─
📋
_meta.json
JSON
5L · 127 B
├─
🔑
config.json
⚠
JSON
11L · 277 B
└─
📝
skill-card.md
Markdown
43L · 2.7 KB
Security positives
代码结构清晰,模块化设计良好
使用本地 token 缓存避免重复登录
包含进程锁机制防止多实例冲突
实现了事件去重和状态持久化
支持多渠道(Discord/飞书/webchat)
有错误处理和超时机制
Python 图片压缩使用 Pillow(正规库)
无明显混淆或隐藏的恶意代码