安全决策报告

news-briefing

gen-cover.mjs 存在文档未声明的文件系统写入行为(生成封面图到 /root/.openclaw/),属于阴影功能;其余脚本功能正常但整体权限声明不完整。

安装决策优先 来源: ClawHub 扫描时间: 2026/6/21
文件 7
IOC 9
越权项 2
发现 3
最直接的威胁证据

为什么得出这个结论

1/4 个维度触发
阻止
声明与实际能力

发现 2 项声明之外的能力或越权行为。

复核
隐藏执行与外联

提取到 9 个一般风险产物,需要结合上下文判断。

通过
攻击链与高危发现

没有形成明确的恶意路径。

通过
依赖与供应链卫生

依赖结构存在,但暂未看到明显高危告警。

风险分是怎么被拉高的

阴影功能-封面图生成 +20

gen-cover.mjs 写入 /root/.openclaw/workspace/skills/news-briefing/cover.png,但 SKILL.md 未声明此功能

动态代码执行 +15

gen-cover.mjs 使用 node -e 执行拼接的 JS 代码字符串,存在代码注入风险

权限声明不完整 +10

SKILL.md 未提及 filesystem:WRITE 权限及具体写入路径

最关键的证据

中危 文档欺骗

未声明的封面图生成功能

gen-cover.mjs 在 /root/.openclaw/workspace/skills/news-briefing/ 目录生成 PNG 封面图,但 SKILL.md 全文未提及此功能,属于阴影功能。

scripts/gen-cover.mjs:89
在 SKILL.md 功能说明中明确列出封面图生成功能,包括输出路径和触发条件
中危 代码混淆

动态代码生成与执行

gen-cover.mjs 将 JS 代码模板保存到 /tmp/gen-cover.js,然后通过 node -e 执行。这种模式增加了代码审查难度。

scripts/gen-cover.mjs:100
重构为直接导入 @napi-rs/canvas 模块,避免动态代码拼接和 /tmp 文件写入
低危 敏感访问

硬编码路径访问

gen-cover.mjs 硬编码访问 OpenClaw 技能工作区路径 /root/.openclaw/workspace/skills/news-briefing/,虽为合法用途但路径敏感。

scripts/gen-cover.mjs:10
考虑使用环境变量或相对路径替代硬编码路径

声明能力 vs 实际能力

网络访问 通过
声明 WRITE
推断 WRITE
fetch-news.mjs:56 curl POST/perplexity API; send-card.mjs:95 fetch POST/feishu API
文件系统 阻止
声明 NONE
推断 WRITE
gen-cover.mjs:89 writeFileSync cover.png; gen-cover.mjs:101 execSync node -e
命令执行 阻止
声明 NONE
推断 WRITE
fetch-news.mjs:33 curl via execSync; news-digest.mjs:44 node subprocess via execSync
环境变量 通过
声明 READ
推断 READ
process.env.PERPLEXITY_API_KEY/PPIO_API_KEY/FEISHU_APP_ID 等

可疑产物与外联

中危 外部 URL
https://openclaw.ai

SKILL.md:138

中危 外部 URL
https://clawhub.com/u/derekhsu529

SKILL.md:138

中危 外部 URL
https://api.perplexity.ai/chat/completions

scripts/fetch-news.mjs:65

中危 外部 URL
https://api.ppinfra.com/v3/openai/chat/completions

scripts/fetch-news.mjs:122

中危 外部 URL
https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal

scripts/send-card.mjs:35

中危 外部 URL
https://www.google.com/search?q=$

scripts/send-card.mjs:84

中危 外部 URL
https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id

scripts/send-card.mjs:140

中危 外部 URL
https://clawhub.ai/user/derekhsu529

skill-card.md:7

中危 外部 URL
https://clawhub.ai/derekhsu529/news-briefing

skill-card.md:28

依赖与供应链

包名版本来源漏洞备注
@napi-rs/canvas 0.1.95 package.json 封面图生成依赖

文件构成

7 个文件 · 912 行
JavaScript 4 个文件 · 723 行Markdown 2 个文件 · 184 行JSON 1 个文件 · 5 行
需关注文件 · 5
scripts/fetch-news.mjs JavaScript · 193 行
https://api.perplexity.ai/chat/completions · https://api.ppinfra.com/v3/openai/chat/completions
scripts/gen-cover.mjs JavaScript · 197 行
未声明的封面图生成功能 · 动态代码生成与执行 · 硬编码路径访问
scripts/send-card.mjs JavaScript · 203 行
https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal · https://www.google.com/search?q=$ · https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id
SKILL.md Markdown · 138 行
https://openclaw.ai · https://clawhub.com/u/derekhsu529
skill-card.md Markdown · 46 行
https://clawhub.ai/user/derekhsu529 · https://clawhub.ai/derekhsu529/news-briefing
其他文件 · news-digest.mjs · _meta.json

安全亮点

代码结构清晰,主要功能符合 SKILL.md 声明
无凭证收割、远程代码下载、敏感路径遍历等恶意行为
网络请求目标明确(Perplexity API、飞书 API、PPIO API)
错误处理完善,单主题失败不影响整体流程
支持 dry-run 模式便于测试