Safe Skill Installer v1.0.0
> 安装任何社区 / 第三方技能前,先做本地静态安全审计,再决定是否装入正式 skills 目录。
> 把"安装即运行"变成"先审后用",避免把恶意技能直接装进助手环境。
为什么需要
社区技能是别人写的代码,可能含网络外联、subprocess、eval/exec、凭据读取、提示注入、持久化等危险能力。
本技能把安装流程强制拆成「暂存 → 审计 → 通过才装入」,从源头阻断风险。
使用方式
# 审计并安装某个 SkillHub 技能(默认审计通过后需人工确认)
python safe_skill_install.py @user_663a53c6/mnemosyne-memory
# 审计通过后自动装入(跳过人工确认,仅当审计结果无 P0/P1 时允许)
python safe_skill_install.py @owner/skill-name --auto-install
# 仅审计,不装入(安全检查用)
python safe_skill_install.py @owner/skill-name --dry-audit
流程(脚本自动完成)
- 定位
skillhubCLI(PATH 或~/.local/bin/skillhub) - 下载到隔离暂存目录
~/.workbuddy/_skill_audit_tmp(不碰正式目录) - 定位
SKILL.md与所有脚本文件 - 静态扫描危险模式:网络 / 执行 / 凭据 / 提示注入 / 持久化 / 危险文件操作
- 生成审计报告(每项 通过 / 风险 标记 + 行号 + 片段)
- 审计通过 → 复制到
~/.workbuddy/skills/<name>/;有 P0/P1 风险 → 默认阻止,要求人工确认 - 清理暂存目录
审计项
| 类别 | 扫描内容 | 风险等级 |
|---|---|---|
| 网络外联 | socket / urllib / requests / httpx / aiohttp / websocket / urlopen / ftplib / smtplib / paramiko | P1 |
| 代码执行 | eval / exec / import / compile / pickle / marshal / subprocess / os.system / os.popen / shell=True / ctypes | P0 |
| 凭据读取 | getpass / input / password / secret / api_key / token= / skh_ | P1 |
| 提示注入 | base64 解码 / 零宽字符 / 忽略指令 / system prompt | P0 |
| 持久化 | crontab / 注册表 / HKEY / startup / autorun / 自启动 / 开机启动 | P1 |
| 危险文件操作 | os.remove / shutil.rmtree / os.unlink / os.rmdir / os.rmtree(非自身数据目录) | P2 |
判定逻辑
- 命中 P0 或 P1 → BLOCK,默认阻止装入,需人工复核。
- 仅命中 P2(如自身数据目录的正常读写)→ WARN,可装入。
- 无任何命中 → PASS。
集成到 WorkBuddy 安装习惯
当用户要求「从 SkillHub 安装 / 下载技能」时,本技能应作为强制前置:
先审计、通过后再装入 ~/.workbuddy/skills/,绝不直接 skillhub install 到正式目录。
已知限制
- 静态扫描无法覆盖运行时动态行为、未来更新引入的风险,建议定期复查。
- 仅做本地词法 / 正则扫描,不执行代码、不联网验证。
- 审计通过不代表绝对安全,仍建议阅读关键脚本。
- 审计本包自身会命中大量 P0/P1(用
--scan-dir指向本目录时):因为本包既要检测 socket/subprocess/crontab 等危险词、又真实调用subprocess调 skillhub、SKILL.md 也以这些词作说明——属预期,不代表本包危险。请用它审计其他技能目录。 - 良性技能若内部真实调用
subprocess/os.system等,可能被判 P0 需人工确认;这是词法审计的固有边界。
发布到 SkillHub(维护者用)
本技能包已符合 SkillHub 发布格式(含规范 SKILL.md frontmatter)。发布需 SkillHub 账号:
# 先本地预检(不发起请求)
skillhub publish . --version 1.0.0 --changelog "初始版本" --dry-run
# 确认无误后真实发布(--token 为 skh_ 开头的 API Token)
skillhub publish . --version 1.0.0 --changelog "初始版本" --token skh_你的TOKEN
MIT License · 复制即用 · 纯标准库 · 离线可用