安全决策报告

agent-guardian

Agent Guardian 是合法的 AI 助手体验守护工具,但 apply-qqbot-patch.sh 通过 sed 注入 execSync 调用修改第三方插件存在代码执行风险,install.sh 以 root 部署 systemd 守护进程存在持久化风险。文档已知晓部分风险但 mitigation 不充分。

安装决策优先 来源: ClawHub 扫描时间: 18 天前
文件 15
IOC 2
越权项 0
发现 5
最直接的威胁证据
01
用户安装 agent-guardian skill 初始入口 · SKILL.md
02
install.sh 以 root 权限部署 systemd 服务 权限提升 · scripts/install.sh
03
apply-qqbot-patch.sh 通过 sed 向插件注入 execSync 权限提升 · scripts/apply-qqbot-patch.sh

为什么得出这个结论

1/4 个维度触发
通过
声明与实际能力

声明资源与推断能力基本一致。

复核
隐藏执行与外联

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

阻止
攻击链与高危发现

报告包含 4 步攻击链,另有 1 项高危或严重发现。

复核
依赖与供应链卫生

发现 2 项需要关注的依赖或供应链线索。

攻击链

01
用户安装 agent-guardian skill

初始入口 · SKILL.md:1

02
install.sh 以 root 权限部署 systemd 服务

权限提升 · scripts/install.sh:60

03
apply-qqbot-patch.sh 通过 sed 向插件注入 execSync

权限提升 · scripts/apply-qqbot-patch.sh:28

04
patch 后插件每次收消息执行 Python 脚本

最终危害 · references/patches/qqbot.md:25

风险分是怎么被拉高的

apply-qqbot-patch.sh sed 注入 execSync 修改插件 +20

通过 sed 向 gateway.ts/outbound.ts 注入 execSync 调用,执行 Python 脚本,存在通过 patch 链注入恶意代码的理论风险

install.sh 以 root 部署 systemd 服务 +10

systemd 服务以 User=root 运行,Restart=always,存在持久化风险

patch 脚本无完整性校验 +8

apply-qqbot-patch.sh 无 hash 校验,直接覆盖插件源文件

langdetect 依赖无版本锁定 +5

install.sh 中 pip3 install langdetect 未指定版本

状态文件存于 /tmp +2

/tmp 目录多进程共享,存在竞态条件信息泄露风险

最关键的证据

高危 代码执行

apply-qqbot-patch.sh 通过 sed 注入 execSync 修改第三方插件

patch 脚本使用 sed 将包含 execSync 的 TypeScript 代码注入到 gateway.ts/outbound.ts,虽然当前注入代码使用了 JSON.stringify 防护,但修改插件源码的行为本身存在通过 patch 链注入恶意代码的理论风险,且 patch 脚本无完整性校验

scripts/apply-qqbot-patch.sh:28
在文档中明确警告此风险,建议用户提供 hash 校验或使用 patch/diff 方式替代 sed 字符串注入
中危 持久化

systemd 服务以 root 身份持久化运行

install.sh 创建的 systemd 服务以 User=root、Restart=always 运行,安装后持续存在于系统层面,不随 AI 会话结束而终止

scripts/install.sh:60
skill-card.md 已有警告,建议在安装时更明确提示,并提供 uninstall.sh 清理脚本
中危 供应链

langdetect 依赖无版本锁定

install.sh 中 pip3 install langdetect 未指定版本,依赖 latest,可能引入供应链风险

scripts/install.sh:44
添加版本锁定:pip3 install langdetect==1.0.9 或使用 requirements.txt
低危 敏感访问

状态文件存于 /tmp 共享目录

/tmp 是多进程共享目录,/tmp/agent-work-state.json 等可能被其他进程读写或泄露信息

scripts/supervisor.sh:10
使用 /run/user/{uid}/ 或带 ACL 的专用目录
提示 权限提升

install.sh 需要 root 权限

install.sh 需要 root 权限来执行 systemctl、crontab、apt-get 等操作,文档中未明确说明

scripts/install.sh:1
在文档开头明确说明 root 权限需求

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
→
推断 WRITE
install.sh:写入配置到/tmp; apply-qqbot-patch.sh:覆盖插件ts文件
命令执行 通过
声明 WRITE
→
推断 WRITE
apply-qqbot-patch.sh:通过sed注入execSync到TypeScript; scripts/*.sh:使用subprocess调用
环境变量 通过
声明 WRITE
→
推断 WRITE
install.sh:配置systemd服务和crontab
网络访问 通过
声明 NONE
→
推断 NONE
smart-status-report.sh:仅使用openclaw内部命令
技能调用 通过
声明 NONE
→
推断 NONE
无动态skill调用
浏览器 通过
声明 NONE
→
推断 NONE
无浏览器操作
数据库 通过
声明 NONE
→
推断 NONE
无数据库操作

可疑产物与外联

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

skill-card.md:9

中危 外部 URL
https://clawhub.ai/fanxinyun1991/skills/agent-guardian

skill-card.md:39

依赖与供应链

包名版本来源漏洞备注
langdetect * pip 否 无版本锁定,建议锁定为 1.0.9
inotify-tools * apt 否 apt-get 安装,系统包风险低

文件构成

15 个文件 · 1269 行
Shell 7 个文件 · 567 行Markdown 4 个文件 · 412 行Python 3 个文件 · 285 行JSON 1 个文件 · 5 行
需关注文件 · 4
scripts/install.sh Shell · 132 行
systemd 服务以 root 身份持久化运行 · langdetect 依赖无版本锁定 · install.sh 需要 root 权限
scripts/apply-qqbot-patch.sh Shell · 93 行
apply-qqbot-patch.sh 通过 sed 注入 execSync 修改第三方插件
scripts/supervisor.sh Shell · 142 行
状态文件存于 /tmp 共享目录
skill-card.md Markdown · 59 行
https://clawhub.ai/user/fanxinyun1991 · https://clawhub.ai/fanxinyun1991/skills/agent-guardian
其他文件 · msg-queue.py · SKILL.md · qqbot.md · lang-filter.py · generic.md · status-query-daemon.sh +2

安全亮点

功能声明与代码实现基本一致,无明显影子功能
skill-card.md 主动披露了已知的持久化和代码执行风险
无凭证收割、无数据外泄、无外部网络通信
补丁代码使用了 JSON.stringify 防止命令注入
语言过滤逻辑清晰,无隐蔽行为
状态管理完全在 /tmp 本地,无外传