安装验证:生态插件:`dsh plugin add` 装得上,但未声明 dsh.bundle、不挂载任何插件能力——L1-L5 插件安装验证阶梯不作评级依据;安全扫描照常执行。安装验证详情 →
功能介绍
DeepSeek Harness plugin market: browse, search and install community plugins from the sidebar foot entry (host + web client halves, DSH plugin spec).
安装
dsh plugin --profile web add github:Winnie-0721/dsh-plugin-market#v1.3.1安装方式: GitHub · 运行验证未定论 (L5 unknown)
验证与兼容性○ 生态插件
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
未采集到插件清单 —— 无法得知作者声明的版本范围。
| 插件版本 \ dsh | dsh 0.2.1-rc.2 当前 |
|---|---|
| v1.3.2 | · |
| v1.3.1 | ○ |
v1.3.2github2026-10-21
https://github.com/Winnie-0721/dsh-plugin-market
生态插件:`dsh plugin add` 装得上,但未声明 dsh.bundle、不挂载任何插件能力——等级位显示 L5 · 生态插件。
v1.3.1github○ 生态插件 12026-10-19
https://github.com/Winnie-0721/dsh-plugin-market
○dsh 0.2.1-rc.2当前2026-10-19生态插件
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • 被测插件工件: github · https://github.com/Winnie-0721/dsh-plugin-market#v1.3.1
ID: dsh-plugin-market-31@v1.3.1@dsh0.2.1-rc.2 · 档位: l4-sandbox
签发:2026-10-19 · 有效至:2026-10-26
查看检查项与证据
↳ 沿用自更早记录 dsh-plugin-market-31@v1.3.2@dsh0.2.1-rc.2(l3-fullscan)
↳ 沿用自更早记录 dsh-plugin-market-31@v1.3.2@dsh0.2.1-rc.2(l3-fullscan)
↳ 沿用自更早记录 dsh-plugin-market-31@v1.3.2@dsh0.2.1-rc.2(l3-fullscan)
未出现在 Web 档 loader 清单中
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-plugin-market-31/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低,动态审计最高 中,按「取更严者」→ 总评级 中。
—v1.3.2git2026-10-21v1.3.2版本一致clean · gitvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(12 条)
- 严重spawnShell · shell
verify/pack-inventory.mjs:32? spawnSync(line, { ...base, shell: true, ...opts }) - 警告childProcess · code-exec
plugin-market/lib/restart-helper.cjs:91const child = spawn(payload.execPath, payload.args, options) - 警告childProcessImport · code-exec
plugin-market/lib/restart.js:19import { spawn } from 'node:child_process' - 警告netIp · network
verify/adversarial-host.mjs:29process.env.DSHM_REGISTRY_URL = 'http://127.0.0.1:9/definitely-unavailable.json' - 警告netIp · network
verify/adversarial-host.mjs:142const SAME_ORIGIN = { origin: 'http://127.0.0.1:1', host: '127.0.0.1:1', 'content-type': 'application/json' } - 警告childProcess · code-exec
verify/lib/cdp.mjs:111const child = spawn(executable, args, { stdio: 'ignore', windowsHide: true }) - 警告netIp · network
verify/lib/cdp.mjs:112await waitForHttp(`http://127.0.0.1:${port}/json/version`, 30000, 'Edge 调试端口') - 警告netIp · network
verify/lib/cdp.mjs:113const targets = await waitForHttp(`http://127.0.0.1:${port}/json/list`, 10000, 'Edge target 列表') - 警告childProcess · code-exec
verify/pack-inventory.mjs:32? spawnSync(line, { ...base, shell: true, ...opts }) - 警告childProcess · code-exec
verify/pack-inventory.mjs:33: spawnSync(cmd, args, { ...base, shell: false, ...opts }); - 警告netIp · network
verify/probe-toggle-hot.mjs:27const base = `http://127.0.0.1:${port}` - 警告netIp · network
verify/probe-toggle-state.mjs:28const base = `http://127.0.0.1:${port}`
展开 4 条审计发现
- medium重启助手把宿主完整 process.env 编码进子进程命令行(argv)
plugin-market/lib/restart.js:79spawnRestartHelper() 以 `env: process.env` 调用 buildHelperCommand;buildRestartPayload 把所有字符串项放进 payload.env,再 JSON+base64 编成单个 argv 参数 `node restart-helper.cjs <payload>`。Linux 上 /proc/<pid>/cmdline 是所有用户可读的,Windows 进程列表同样可见,因此助手存活期间(最长 RESTART_HELPER_WAIT_MS = 60s)本机任意用户/进程都能解出其中的 API key、token、代理凭据。
- medium热挂载把未转义的包名直接拼进生成的 include YAML
plugin-market/lib/hot-mount.js:401client-only 分支生成 `{ id: `client-${packageName.replace(...)}`, name: packageName }`——id 做了清洗,name 原样使用;而 resolveProfileEntry() 对以 '.'、'/'、'file://'、'cordis:' 开头的名字直接放行。若包名含单引号(或指向 node_modules 下真实存在、声明了 dsh.client 的 file:///绝对路径),就能跳出引号标量,向会被 cordis Include 加载执行的 YAML 写入任意行,等于在宿主进程里加载攻击者选定的模块。可达性取决于未采集的安装处理是否在调用 hotMount 前校验包名。
- low重启围墙把通配绑定地址 0.0.0.0 当作回环权威
plugin-market/lib/restart-policy.js:3490.0.0.0 是绑定地址而非回环名字,把它放进 Host 白名单会让重启端点的 DNS rebinding 围墙比预期的 localhost/127.0.0.1/::1 更宽。利用仍要求对端地址是回环(directLoopbackRequest)且 Origin 匹配,未证明可直接绕过,属加固缺口。
- low主 HTTP 入口 plugin-market/lib/index.js 未被采集
verify/adversarial-host.mjs:8所有路由处理、鉴权/会话校验以及请求字段到 restart/hot-mount 参数的映射都在 lib/index.js 中,而该文件未提供。spawnRestartHelper 是否会收到攻击者可控的 execPath/args/env、安装名在 hotMount 之前是否校验,都无法核实;因此重启与热挂载路径的实际残余风险高于仅凭已审计代码的判断。
运行时代码大部分是防御性的,但重启助手把宿主完整环境变量放进命令行,热挂载把未转义的包名直接拼进 YAML;主入口 lib/index.js 未纳入审计。
口径:动态审计只会把风险往严重里判,不会把风险降下来(只升不降,不构成豁免);模型判错时由人工复核撤回,撤回后回到静态判定。合并判定 = 两层中更严的那一个。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-10-19 · 活跃度:活跃
• 仓库创建: 2026-10-03
• 星标: ★ 2 · 复刻: 1
• 健康度: 活跃 — 近 30 天有提交
来源
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
