插件安装前静态安全审计:生命周期脚本、动态执行、凭据外传组合特征与 patch 层风险;零依赖,tar 包全程内存解析不落盘。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:BotonJ/dsh-plugin-sentinel
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DSH 插件安检机 — 给 DeepSeek Harness 装一台插件安检机:在安装任何社区插件之前做纯静态安全审计,输出按严重度排序的结构化风险报告。
官方文档对 GitHub 安装方式的警告原话:
prepare脚本授权是 "permission to execute the package's code on your machine at install time, outside any sandbox the agent runs under"。DSH 生态 24 小时收录 288+ 社区插件——这台安检机就是为了让"先过安检再安装"成为一句话的事。
安装
dsh plugin --profile <你的profile> add github:<你的fork>/dsh-plugin-sentinel
# 或本地安装
dsh plugin --profile <你的profile> add ./dsh-plugin-sentinel
装好后对 DSH 说:
- 「帮我装 github:xxx/yyy 这个插件」→ 模型会先调
audit_plugin过安检,block则拒绝安装并说明风险 - 「巡检我当前 profile 装过的插件安不安全」→
audit_installed
提供的工具
| 工具 | 用途 |
|---|---|
audit_plugin |
审计一个插件目录或 .tgz 压缩包:安装期脚本、动态执行、凭据读取、网络外传、patch 层 !!js 表达式、静默禁用安全行、路径穿越、软链接… |
audit_installed |
巡检 profile 内全部社区 bundle(官方 @deepseek-ai/* 内置包标记 trusted 跳过) |
结论分级:pass(通过)/ review(需人工审查)/ block(建议拒绝)。风险分权重 critical=10 / high=5 / medium=2 / low=1。
安全设计:安检机自身的攻击面为零
| 决策 | 理由 |
|---|---|
| 零 npm 依赖、零安装脚本、零构建 | package.json 没有 scripts、没有 dependencies;从 GitHub 安装不需要 pnpm allowBuilds 授权,不存在安装期执行 |
| 原生 JSON-Schema ToolDefinition 注册(MCP 工具同款路径) | 全部源码只 import Node 内置模块,不依赖任何运行时包 |
纯 JS tar 解析(node:zlib + 手写 ustar/pax/GNU-longname) |
.tgz 审计全程在内存完成,被审计的恶意代码不落盘;全程不用 child_process |
词法剥离扫描:先剥注释/字符串再匹配危险 API;模板 ${} 插值内的代码保留 |
字符串和注释里写着 eval( 不算证据(防误报);藏在插值里的代码跑不掉(防漏报) |
| 组合规则 | process.env 读取 × 网络出站 = 凭据外传特征(critical);编码载荷 × 动态执行(critical);shell × 网络(critical) |
审计覆盖(v0.1 规则表)
- package.json:安装期 lifecycle 脚本(critical)、伪装插件、运行时依赖
- JS/TS 源码:
child_process、eval/new Function/vm、网络出站、process.env、文件写入、动态 require、homedir 探测 - 字符串字面量:敏感路径(
.ssh/.env/云凭据/DSH credentials)、外部 URL、长编码载荷(混淆特征) - cordis.patch.yml:
!!js配置表达式(加载期宿主执行,critical)、disabled: true静默禁用 sandbox/approval/guard 行(critical)、重配置安全行(high)、伪装安全行 id(high) - tarball 结构:路径穿越(critical)、软链接(high)、异常档案
局限(诚实地写)
- 词法扫描器不是完整 AST——针对蓄意构造的规避手法(如把代码藏进插值内的伪注释)可能漏报;它面向捕获真实世界的常见恶意模式,不承诺对抗性完备。规则表在
src/rules.js,欢迎补充。 review/block是"值得人看一眼/建议拒绝",最终决定权在人。
开发
node --test test/*.test.js # 27 个用例:扫描器/规则/解析器/tar/注册契约/端到端
MIT License.
链接
同类插件
toby-bridges/api-relay-audit★ 861
从 DeepSeek Harness 对 AI API 中转站和 LLM 代理运行本地安全审计,生成 Markdown 报告,覆盖提示词注入、模型替换信号、工具调用改写、错误泄漏、流完整性和按 profile 启用的 Web3 风险。
SeaOf0/dsh-redteam-model★ 646
面向授权安全研究的 DSH 合集:九个工作模式(redteam 总控、渗透测试、代码审计、二进制分析、攻防评估、免杀对抗、应急溯源、云安全攻防、CTF 解题)与十五个运行时插件,设置页管理台支持一键部署、安装、更新与卸载。
howmp/dsh-pentest★ 559
面向 DeepSeek Harness 的授权渗透模式:以探索链路记录目标、线索、资产与漏洞,并在 Web 中可视化展示。
PerryLink/dsh-auto-review★ 212
审批链上的第二模型自动审查:只读审查子代理返回带理由的 allow/deny 结构化裁决,默认 fail-closed。
NanmiCoder/dsh-auto-mode★ 164
在 Workspace Write 与 Full access 之间增加 Auto 权限档:日常操作留在官方 workspace-write 沙箱内,由当前会话模型复核升权与破坏性调用,精确的越界访问按次放行一次,意图不明时询问,命中关键路径则拒绝。
PerryLink/dsh-permission-rules★ 115
Claude Code 风格的声明式权限规则:按序 allow/deny/ask 的 YAML 规则,在 tools/pre-execute 瀑布上匹配工具名、参数、工作区路径与 agent 身份,带完整会话日志审计、干跑模式与热重载。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。