安全决策报告

klyc-pmm

klyc-pmm 通过外部云端 API 备份 AI 体记忆,存在远程脚本执行(curl|bash)高危模式、硬编码服务器路径暴露数据库架构、以及 update/install-daemon 链路无完整性校验的供应链风险。

安装决策优先 来源: ClawHub 扫描时间: 4 小时前
文件 11
IOC 8
越权项 3
发现 8
最直接的威胁证据
严重 供应链
curl|bash 管道执行远程脚本 — install-daemon

init 命令提示用户执行 curl -sS https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash,无完整性校验、无版本锁定。攻击者若入侵 ai.syln.cn 域名或中间人劫持,可向任何已安装此 skill 的 AI 体/服务器注入任意代码。

scripts/pmm_watch.sh:847

为什么得出这个结论

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

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

阻止
隐藏执行与外联

提取到 1 个高危 IOC 或外联信号。

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

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

攻击链

01
AI 体执行 init 时看到提示:curl -sS https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash

初始入口 · scripts/pmm_watch.sh:847

02
攻击者入侵 ai.syln.cn 或中间人劫持,替换 install-daemon.sh 为恶意脚本

权限提升 · scripts/pmm_watch.sh:847

03
恶意 install-daemon.sh 在 AI 体/服务器上执行任意命令(反向 shell、数据窃取)

最终危害 · scripts/pmm_watch.sh:847

04
update.sh 定期拉取远程 pmm_watch.sh 覆盖本地,无签名校验

权限提升 · scripts/update.sh:1

05
攻击者通过篡改 update.sh 下载源,向 AI 体注入任意代码实现持久化控制

最终危害 · scripts/update.sh:1

06
pmm_distill.sh 直接连接服务器 MySQL,暴露数据库架构(user_id/workspace 映射)

权限提升 · pmm_distill.sh:15

07
所有对话记忆和身份文件持续 POST 到 ai.syln.cn,域名控制权变更风险下数据外泄

最终危害 · scripts/pmm_watch.sh:200

风险分是怎么被拉高的

curl|bash 管道远程脚本执行 +30

scripts/pmm_watch.sh:847 — init 时推荐用户执行 curl https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash,无完整性校验

update.sh 无完整性校验覆盖本地脚本 +20

scripts/update.sh 下载远程 pmm_watch.sh 直接覆盖本地,无 SHA256/PGP 验签

文档-行为差异:pmm_distill.sh 硬编码服务器数据库路径 +15

SKILL.md 完全未提及 distill 脚本直接 require /www/wwwroot/ai.syln.cn/config.php 访问 MySQL

外部数据传输未在 SKILL.md 明确声明范围 +10

SKILL.md 描述五层加密但未明确说明所有对话结论/身份文件均 POST 到 ai.syln.cn

pmm_distill.sh 包含硬编码服务器路径 +5

多处暴露 /www/wwwroot/ai.syln.cn/ 路径及 user_id 映射架构

最关键的证据

严重 供应链

curl|bash 管道执行远程脚本 — install-daemon

init 命令提示用户执行 curl -sS https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash,无完整性校验、无版本锁定。攻击者若入侵 ai.syln.cn 域名或中间人劫持,可向任何已安装此 skill 的 AI 体/服务器注入任意代码。

scripts/pmm_watch.sh:847
改为下载脚本后 SHA256 校验,再执行;或使用官方包管理器分发
严重 供应链

update.sh 无完整性校验覆盖本地脚本

scripts/update.sh 直接 curl 下载远程 pmm_watch.sh 并 cat > $SCRIPT_PATH 覆盖本地脚本,无任何签名或校验和验证。若远程被篡改,攻击者可完全控制 AI 体的核心脚本。

scripts/update.sh:1
加入 SHA256 校验和验证,参考 GitHub 安全发布的 signed tag 机制
高危 文档欺骗

pmm_distill.sh 硬编码服务器数据库路径,文档未提及

SKILL.md 完全未描述 distill 脚本的存在及能力。但 pmm_distill.sh 包含多处 require '/www/wwwroot/ai.syln.cn/config.php',直接连接 MySQL 数据库进行 CRUD 操作(鉴伪、去重、去矛盾、清理)。这是 SKILL.md 之外的阴影功能,且暴露了服务器数据库架构。

pmm_distill.sh:58
在 SKILL.md 明确说明 distill 脚本为 server-side 工具,agent 不应执行;删除硬编码路径,改为 API 调用
高危 敏感访问

pmm_distill.sh 暴露内部架构:硬编码 user_id 和服务器路径

pmm_distill.sh 第15-21行硬编码 user_id 映射到服务器路径 (user_id=2→瑶池/lightclaw, user_id=3→昆仑/openclaw),第58行暴露 /www/wwwroot/ai.syln.cn/ 绝对路径。攻击者可据此了解目标服务器目录结构。

pmm_distill.sh:15
使用环境变量或配置文件,不硬编码在脚本中
高危 数据外泄

所有对话记忆/身份文件默认上传外部 API,域名控制权未披露

pmm_watch.sh push/watch 机制将所有 MEMORY.md、SOUL.md、IDENTITY.md、USER.md、AGENTS.md 等身份文件 POST 到 ai.syln.cn。SKILL.md 仅描述五层加密,未明确告知上传范围和外部服务依赖。域名 ai.syln.cn 归属不透明,域名易手风险未披露。

scripts/pmm_watch.sh:1
在 SKILL.md 明确声明所有上传的文件类型、数据范围及第三方域名;提供不依赖外部的本地-only 模式
中危 文档欺骗

SKILL.md 描述的 hook-pull 机制与实际代码不一致

SKILL.md 描述「每6小时自动拉取瑶池蒸馏钩子(pmm_hooks_pull.sh)」,但 hooks-pull 实际由 pmm_hooks_pull() 函数在 pmm_watch.sh 内部实现,且该函数会直接修改本地 MEMORY.md 文件(备份、增量合并)——此本地文件系统写入行为在文档中未明确说明。

scripts/pmm_watch.sh:340
文档应明确说明 hooks-pull 会修改本地 MEMORY.md 文件
中危 代码执行

pmm_boot.sh 包含硬编码外部 URL,可被社工利用

pmm_boot.sh 提示用户「AI 体可直接 fetch: https://ai.syln.cn/klyc-pmm/{token}」恢复记忆。若 ai.syln.cn 域名被攻击者接管,可构造钓鱼页面收集虚假昆仑令进行中间人攻击。

scripts/pmm_boot.sh:15
恢复 URL 应支持本地离线验证,不应依赖单一外部域名
低危 供应链

依赖无版本锁定

SKILL.md 仅声明 jq 和 curl,无版本约束。pip cryptography 在 pmm_watch.sh 中为可选依赖,且 ImportError 时静默降级明文传输,无告警。

scripts/pmm_watch.sh:126
在 skill.json 或 requirements.txt 中锁定 cryptography 版本

声明能力 vs 实际能力

文件系统 通过
声明 WRITE
推断 WRITE
SKILL.md 声明写 memory/ 日记,脚本在 ~/.klyc-pmm/ 和 workspace 写入文件
网络访问 阻止
声明 READ
推断 WRITE
SKILL.md 仅列 curl 但未声明上传全部记忆/身份文件到外部 API;pmm_watch.sh:847 还执行远程 bash 脚本
命令执行 阻止
声明 NONE
推断 WRITE
SKILL.md 未声明任何 shell 执行能力,但 pmm_watch.sh 包含 install-daemon 的 curl|bash 远程执行
环境变量 阻止
声明 NONE
推断 READ
pmm_distill.sh 直接读取 KLYC_API_ENDPOINT 等环境变量并通过 config.php 访问服务器数据库

可疑产物与外联

严重 危险命令
curl -sS https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash

scripts/pmm_watch.sh:847

中危 外部 URL
https://ai.syln.cn/klyc-pmm/

CHANGELOG.md:7

中危 外部 URL
https://ai.syln.cn/?route=klyc-pmm

SKILL.md:207

中危 外部 URL
https://ai.syln.cn/api

scripts/pmm_backup_files.sh:17

中危 外部 URL
https://ai.syln.cn/klyc-pmm/TOKEN

scripts/pmm_recover.sh:3

中危 外部 URL
https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh

scripts/pmm_watch.sh:847

中危 外部 URL
https://ai.syln.cn

scripts/pmm_watch.sh:914

中危 外部 URL
https://ai.syln.cn/skills/klyc-pmm/pmm_watch.sh

scripts/update.sh:7

依赖与供应链

包名版本来源漏洞备注
curl 未指定 系统 无版本锁定
jq 未指定 系统 无版本锁定
python3 (cryptography) * pip 可选依赖,ImportError 时静默降级明文

文件构成

11 个文件 · 1917 行
Shell 6 个文件 · 1451 行Markdown 3 个文件 · 460 行JSON 2 个文件 · 6 行
需关注文件 · 8
scripts/pmm_watch.sh Shell · 1009 行
curl|bash 管道执行远程脚本 — install-daemon · 所有对话记忆/身份文件默认上传外部 API,域名控制权未披露 · SKILL.md 描述的 hook-pull 机制与实际代码不一致 · 依赖无版本锁定 · curl -sS https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh | bash · https://ai.syln.cn/skills/klyc-pmm/install-daemon.sh · https://ai.syln.cn
pmm_distill.sh Shell · 247 行
pmm_distill.sh 硬编码服务器数据库路径,文档未提及 · pmm_distill.sh 暴露内部架构:硬编码 user_id 和服务器路径
SKILL.md Markdown · 206 行
https://ai.syln.cn/?route=klyc-pmm
CHANGELOG.md Markdown · 86 行
https://ai.syln.cn/klyc-pmm/
scripts/pmm_backup_files.sh Shell · 67 行
https://ai.syln.cn/api
scripts/update.sh Shell · 61 行
update.sh 无完整性校验覆盖本地脚本 · https://ai.syln.cn/skills/klyc-pmm/pmm_watch.sh
scripts/pmm_recover.sh Shell · 40 行
https://ai.syln.cn/klyc-pmm/TOKEN
scripts/pmm_boot.sh Shell · 27 行
pmm_boot.sh 包含硬编码外部 URL,可被社工利用
其他文件 · pmm-full-architecture.md · skill.json · _meta.json

安全亮点

客户端 AES-256-GCM 端侧加密设计合理,加密失败时降级明文有说明
token 存储在 ~/.klyc-pmm/token 本地文件,不在代码中硬编码
watch 模式支持 inotify 实时监控,周期兜底逻辑完整
hooks-pull 有增量合并逻辑,避免覆盖本地已有内容
HEARTBEAT.md 和 SOUL.md 追加写入前检查是否已有 PMM 规则