ludwitt-university
Ludwitt University 是一个合法的 AI 教育平台技能,核心功能为 API 客户端(轮询状态 + CLI 命令),但存在未声明的自动更新机制(含远程 shell 执行)和 install.sh 的 curl|sh 安装模式,需要使用者知晓并主动确认,风险整体可控。
为什么得出这个结论
1/4 个维度触发声明资源与推断能力基本一致。
提取到 1 个高危 IOC 或外联信号。
没有形成明确的恶意路径。
依赖结构存在,但暂未看到明显高危告警。
风险分是怎么被拉高的
daemon.js:42 checkUpdateAvailable() 会输出 'curl -sSL https://opensource.ludwitt.com/install | sh' 作为更新指令,服务器可控制此字符串注入任意命令,需服务器被攻破才可利用。
install.sh:94-109 检测 CURSOR_SESSION_ID、CLAUDE_CODE_SESSION、OPENCLAW_STATE_DIR 等环境变量并记录框架类型,未在 SKILL.md 中声明。
SKILL.md 虽提及但非强制,install.sh 本身从远程 URL 拉取并执行脚本,是行业常见但本身有风险的模式。
最关键的证据
未声明的远程 shell 自动更新机制
daemon.js:checkUpdateAvailable() 从服务器响应中提取 updateInstructions 字段,输出为 'curl -sSL https://opensource.ludwitt.com/install | sh'。如果服务器被入侵,攻击者可替换 updateInstructions 为任意命令字符串,导致在 agent 控制台显示时执行任意 shell 命令。注意:这是服务器端攻击面,不在 skill 代码本身。
daemon.js:42 框架检测阴影功能
install.sh:94-109 检测 OPENCLAW_STATE_DIR、CURSOR_SESSION_ID、CLAUDE_CODE_SESSION 环境变量及 ~/.openclaw、~/.cursor 目录,将检测结果(openclaw/cursor/claude-code/generic)记录到日志并发送至服务器。这些环境变量/目录的存在性在 SKILL.md 中完全未声明。
install.sh:94 curl|sh 远程脚本执行
SKILL.md 的安装方式 B 和 daemon.js 中的更新提示均使用 curl -sSL URL | sh 从远程 URL 拉取并直接执行 shell 脚本。这种模式本身存在中间人注入风险(若未使用 HTTPS 验签或 curl 无 --cacert),且无法验证脚本内容。
daemon.js:42 后台守护进程持久化
install.sh:218-280 在 macOS (launchd) 和 Linux (systemd) 上注册后台服务,开机自启 daemon.js 进程,持续每 10 分钟轮询 API。这是合法的功能性设计,但确实改变了系统持久化状态。
install.sh:218 声明能力 vs 实际能力
install.sh:42 — curl -sSL https://opensource.ludwitt.com/install | sh 远程安装;daemon.js:42 — 输出远程 sh 更新指令(阴影功能,未在 SKILL.md 声明) SKILL.md 声明需要文件读写;daemon.js 写入 ~/.ludwitt/*.md, auth.json SKILL.md 声明需要网络访问;daemon.js 向 opensource.ludwitt.com 发送 API 请求 install.sh:94-109 — 检测 CURSOR_SESSION_ID, CLAUDE_CODE_SESSION, OPENCLAW_STATE_DIR 并写入日志 可疑产物与外联
curl -sSL https://opensource.ludwitt.com/install | sh daemon.js:42
https://opensource.ludwitt.com README.md:34
https://your-deployed-app.vercel.app SKILL.md:181
https://www.youtube.com/watch?v=... SKILL.md:183
https://opensource.ludwitt.com/install daemon.js:42
http://www.apple.com/DTDs/PropertyList-1.0.dtd install.sh:216
依赖与供应链
| 包名 | 版本 | 来源 | 漏洞 | 备注 |
|---|---|---|---|---|
| node (runtime) | 18+ | system | 否 | 仅依赖 Node.js 运行时,无 npm 第三方依赖包,纯原生实现 |
文件构成
daemon.js install.sh SKILL.md README.md