安装验证:沙盒安装通过,Web 冒烟失败 (L5 failed) · 验证于 dsh 0.2.1-rc.2 · 验证日期 安装验证详情 →
功能介绍AI
为 DSH 打造单实例多租户插件,通过 Caddy+Authelia 认证、ACL 与事件过滤实现会话/工作区安全隔离。
- Caddy+Authelia 前置认证提取用户身份
- 通过 ACL、影子路由和事件过滤实现会话/工作区隔离
- 支持工作区共享、邀请码注册与公开站点发布
能力标签为 AI 推断或 README 规则抽取(见角标),词表受限、未经安装验证;AI = 推断,README = 原文关键词。
安装
dsh plugin --profile web add github:Choi-Peng/dsh-tenancy安装方式: GitHub · 沙盒安装通过,Web 冒烟失败 (L5 failed)
验证与兼容性
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
依据:1 条要求、覆盖 3 个 @deepseek-ai/dsh-* 子包。 看原始区间
^0.1.1-rc.2 ×3
✗ 当前 dsh 0.2.1-rc.2 不在支持范围内 —— 官方安装门控会直接拒绝装(incompatible-version)。
强行安装需精确豁免一次:dsh plugin allow-version dsh-tenancy@0.1.0-alpha.2 0.2.1-rc.2(豁免记在本机 profile,本站不假定你是否已豁免)
能否正常运行是另一件事 → 见下方实测矩阵(L1–L5)。
| 插件版本 \ dsh | dsh 0.2.1-rc.2 当前 | dsh 0.2.1-alpha.4 | dsh 0.2.1-alpha.2 | dsh 0.2.0-rc.2 | dsh 0.2.0-rc.1 |
|---|---|---|---|---|---|
| 2df41c | ✗ | ✗ | ✗ | ✗ | ✗ |
2df41cgithub失败 112026-10-19
https://github.com/Choi-Peng/dsh-tenancy
✗dsh 0.2.1-rc.2当前2026-10-19L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.2.1-rc.2 · 档位: l4-sandbox
签发:2026-10-19 · 有效至:2026-10-26
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.2.1-alpha.42026-10-16L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.2.1-alpha.4 · 档位: l4-sandbox
签发:2026-10-16 · 有效至:2026-10-23
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.2.1-alpha.22026-10-11L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.2.1-alpha.2 · 档位: l4-sandbox
签发:2026-10-11 · 有效至:2026-10-18
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.2.0-rc.22026-10-09L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.2.0-rc.2 · 档位: l4-sandbox
签发:2026-10-09 · 有效至:2026-10-16
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.2.0-rc.12026-09-29L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.0-rc.1
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.2.0-rc.1 · 档位: l4-sandbox
签发:2026-09-29 · 有效至:2026-10-06
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.7-rc.22026-09-25L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.7-rc.2 · 档位: l4-sandbox
签发:2026-09-25 · 有效至:2026-10-02
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
○dsh 0.1.7-rc.12026-09-23未实测
- • Node.js: v24.14.0
- • DSH: 0.1.7-rc.1
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.7-rc.1 · 档位: l4-sandbox
签发:2026-09-23 · 有效至:2026-09-30
查看检查项与证据
该档位在这次扫描中未执行。
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.6-alpha.22026-09-20L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.6-alpha.2 · 档位: l3-fullscan
签发:2026-09-20 · 有效至:2026-09-27
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.6-alpha.12026-09-17L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.6-alpha.1
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.6-alpha.1 · 档位: l4-sandbox
签发:2026-09-17 · 有效至:2026-09-24
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.5-rc.22026-09-11L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.5-rc.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.5-rc.2 · 档位: l4-sandbox
签发:2026-09-11 · 有效至:2026-09-18
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗dsh 0.1.3-alpha.22026-09-09L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.1.3-alpha.2
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dsh0.1.3-alpha.2 · 档位: l4-sandbox
签发:2026-09-09 · 有效至:2026-09-16
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✗版本史前2026-10-04L5 · 失败
- • Node.js: v24.14.0
- • DSH: unknown
- • 被测插件工件: github · https://github.com/Choi-Peng/dsh-tenancy(版本未标注)
ID: dsh-tenancy@2df41c@dshunknown · 档位: l4-sandbox
签发:2026-10-04 · 有效至:2026-10-11
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-tenancy/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低;动态审计最高 中(有结论时以动态为准)→ 总评级 中。
v0.1.0-alpha.2dsh 清单0.1.0-alpha.2git2026-10-240.1.0-alpha.2版本一致clean · gitvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(12 条)
- 严重shellExec · shell
lib/sysuser.js:85out = await exec('getent', ['passwd', String(username)]); - 严重shellExec · shell
lib/sysuser.js:124await exec('useradd', [...base, '--user-group', username], opts); - 警告netIp · network
install.sh:371if curl -sf http://127.0.0.1:9091/auth/api/health >/dev/null 2>&1; then - 警告netIp · network
install.sh:441http://127.0.0.1:9443/api/host.describe 2>/dev/null || echo "000")" - 警告netIp · network
install.sh:570if curl -sf http://127.0.0.1:9091/auth/api/health >/dev/null 2>&1; then - 警告curlDownload · network
install.sh:150curl -sSL --retry 3 -o "$authelia_cache_tgz" "$authelia_url" - 警告curlDownload · network
install.sh:208curl -sSL --retry 3 -o "$caddy_cache_tgz" "$caddy_url" - 警告curlDownload · network
install.sh:439http_code="$(curl -s -o /dev/null -w "%{http_code}" \ - 警告shellExec · shell
lib/index.js:1506execFile('/bin/sh', ['-c', 'pm2 restart dsh-web'], { timeout: 30_000 }, (error, stdout, stderr) => { - 警告shellExec · shell
lib/index.js:1556const child = execFile('zstd', ['-c', filePath], { timeout: 30_000 }, (error, stdout) => { - 警告shellExec · shell
lib/register.js:185execFile('/bin/sh', ['-c', 'exec "$AUTHELIA_BIN" crypto hash generate argon2 --password "$REG_PW"'], { - 警告shellExec · shell
lib/register.js:221execFile('/bin/sh', ['-c', 'exec "$AUTHELIA_BIN" crypto hash validate --password "$REG_PW" -- "$REG_HASH"'], {
展开 5 条审计发现
- mediumroot 安装脚本下载 Authelia/Caddy 二进制无校验和/签名验证,且支持自定义 URL 前缀
install.sh:149脚本要求以 root 运行,并把两个压缩包内的二进制装到 /opt/authelia 与 /usr/local/bin 后由 systemd 启动;校验只有 gzip -t 与非空判断。若上游发布/镜像被篡改,或 GITHUB_PROXY 被指向攻击者主机(会被直接拼接在 URL 前),即可获得宿主机上的持久 root 代码执行。
- mediumsharedSecret 默认空 + localIsAdmin 默认 true,使可信 Host 下无身份头的请求成为完整管理员 local 主体
lib/index.js:112按出厂默认,只要通过来源校验且不带 X-Dsh-Tenancy-Key 与身份头,请求即被当作拥有全部管理组的 local 主体:可跨租户读写、使用 /tenancy/*、claim、sysuser、改密与重启。而来源校验对非 loopback Host 才拒绝——为让 /register 与 /tenancy/* 可用,部署方必须把公网域名加入 trustedHosts——因此共享密钥才是真正的身份边界;而 install.sh 目前并不写入该密钥(自动配置步骤被 `# deploy_dsh_plugin` 注释掉)。插件仅在启动时打印告警,没有任何 fail-closed 行为。
- low注册的 displayName 未做校验即写入 Authelia users.yml 用户块
lib/register.js:362与 username/password/email 不同,displayName 在服务端没有长度与字符校验(仅前端 maxlength='64'),却被拼进 Authelia 解析的 YAML 块中。若 buildUserBlock(lib/util.js,未采集)未对值做引号/转义处理,构造形如「引号 + 换行 + groups:」的显示名可能破坏用户块甚至注入 YAML 键(例如把自己加入 dsh-admins)。可利用性取决于本次未能查看的代码。
- low列表/搜索响应过滤对缺少 sessionId 字段的行 fail-open
lib/index.js任何未以 `sessionId` 暴露归属键的行(字段名不同、嵌套对象或上游 schema 变更)都会被原样返回给非管理员成员,使该形状的行绕过按会话的可见性过滤;workspace.list 对非对象条目也是同样的 fail-open。
- low仅管理员可用的重启接口通过 /bin/sh -c 执行 `pm2 restart dsh-web`(硬编码,不可注入)
lib/index.js这是启发式扫描标记的 shell 执行点。命令字符串为常量,未插入任何请求数据,且该路由位于来源可信检查、共享密钥检查与管理员闸门之后,没有任何用户可控输入进入 shell。残余影响仅为已认证管理员可重启 dsh-web 进程(对自己部署的可用性影响)。
安装脚本以 root 下载 Authelia/Caddy 却无校验和验证;sharedSecret 默认为空时回退为完整管理员 local 主体;shell 调用均为硬编码且仅管理员可达。
口径(2026-10-24):有动态审计结论时以动态结论为准(可能上调也可能下调);无结论时以静态/vet 融合档为准。动态审计永不写豁免表(豁免只能人工三筛手写);模型判错时由人工复核撤回,撤回后档位回到静态/vet。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-09-18 · 活跃度:稳定
• 仓库创建: 2026-08-27
• 星标: ★ 0 · 复刻: 0
• 健康度: 稳定 — 近 90 天有提交
来源
GitHub: github.com/Choi-Peng/dsh-tenancy
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
