安装验证:沙盒安装通过,Web 冒烟失败 (L5 failed) · 验证于 dsh 0.2.1-rc.2 · 验证日期 安装验证详情 →
功能介绍
DSH 插件:读取本机冒险岛客户端 WZ —— 浏览/搜索/图鉴/精灵图 GIF/纸娃娃(可坐椅子)/聊天气泡/地图背景/桌宠
安装
dsh plugin --profile web add github:tzy502/dsh-maplestory-wz安装方式: GitHub · 沙盒安装通过,Web 冒烟失败 (L5 failed)
验证与兼容性
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
○ 作者未声明 dsh 版本要求 —— 安装不会因版本被拒。
| 插件版本 \ dsh | dsh 0.2.1-rc.2 当前 | dsh 0.2.1-alpha.4 |
|---|---|---|
| 38c546 | ✗ | ✓ |
38c546github✓ 运行验证通过 1失败 12026-10-19
https://github.com/tzy502/dsh-maplestory-wz
✗dsh 0.2.1-rc.2当前2026-10-19L5 · 失败
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • 被测插件工件: github · https://github.com/tzy502/dsh-maplestory-wz(版本未标注)
ID: dsh-maplestory-wz@38c546@dsh0.2.1-rc.2 · 档位: l4-sandbox
签发:2026-10-19 · 有效至:2026-10-26
查看检查项与证据
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.1-alpha.42026-10-18L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.4
- • 被测插件工件: github · https://github.com/tzy502/dsh-maplestory-wz(版本未标注)
ID: dsh-maplestory-wz@38c546@dsh0.2.1-alpha.4 · 档位: l4-sandbox
签发:2026-10-18 · 有效至:2026-10-25
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-maplestory-wz/)``[](https://www.dsh.so/artifact/dsh-maplestory-wz/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低,动态审计最高 高,按「取更严者」→ 总评级 高。
v1.0.0dsh 清单1.0.0git2026-10-211.0.0版本一致clean · gitvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(10 条)
- 警告childProcess · code-exec
index.js:144child = spawn(dotnet, argv, { env, stdio: ['pipe', 'pipe', 'pipe'] }); - 警告fsWrite · files
index.js:455await fs.writeFile(join(OUT_DIR, name), buf); - 警告fsWrite · files
index.js:555await fs.writeFile(join(OUT_DIR, name), buf); - 警告fsWrite · files
index.js:601await fs.writeFile(join(OUT_DIR, name), buf); - 警告childProcess · code-exec
lib/cmsdl.js:397proc = spawn(argv[0], argv.slice(1), { env: childEnv, stdio: ['ignore', 'pipe', 'pipe'] }); - 警告netIp · network
tools/restart-host.sh:34echo "host 已就绪:pid=$pid http://127.0.0.1:$PORT" - 警告netIp · network
tools/verify-commands.sh:11BASE="${1:-http://127.0.0.1:3099}" - 警告curlDownload · network
tools/verify-commands.sh:59code=$(curl -s -m 180 -o "$TMP/out.json" -w '%{http_code}' \ - 警告netIp · network
tools/verify-render.mjs:14const BASE = (process.argv[2] || 'http://127.0.0.1:3099').replace(/\/$/, ''); - 警告netIp · network
tools/verify.mjs:10const BASE = (process.argv[2] || 'http://127.0.0.1:3099').replace(/\/$/, '');
展开 5 条审计发现
- high调用方可指定下载 URL(宽泛主机白名单),下载后 chmod +x 并作为 cmsdl 执行
lib/cmsdl.jsapi.updateFetchTool 把 payload.args 原样传给 fetchTool。唯一的 URL 校验是主机白名单(含 raw.githubusercontent.com / github.com / objects.githubusercontent.com)加 ≥1 MB 体积检查;这些主机上的任意内容(如 raw.githubusercontent.com/<任意用户>/<仓库>/main/bin)会被下载到 ~/.dsh/wz-assets/cmsdl/cmsdl,chmod 0755、覆盖已安装工具,随后被 probe 执行(--version/--help)。任何能 POST /dsh-maplestory-wz/api 的人即可获得以 DSH 用户权限执行代码的能力,且该二进制会留存供后续 updateResources 使用。
- medium宿主 /api 不校验 Content-Type/Origin/CSRF,直接解析任意 POST body 并分发全部方法
index.js处理器从不检查 content-type 或 Origin,因此一个跨站「简单请求」(text/plain + 合法 JSON body)即可触发所有有副作用的命令:updateFetchTool/updateResources(下载/执行)、backgroundSet(写 ~/.dsh/wz-assets/background.json)、petSet/petSetChara、mapCanvas/mapMinimap(触发 worker 并写 PNG)。这正是把高危「下载并执行」能力变成路过即中的投递通道,也让任意本地页面可以篡改插件持久化配置。
- low地图 id 未做净化即拼进输出文件名并写入 wz-assets
index.jsmapMinimap/mapCanvas/mapBackground 用调用方提供的 args.id/args.path 直接拼输出文件名,没有分隔符检查,然后 join() 写盘。目前唯一的保护是前一步 callWz(...) 必须先成功,所以遍历形状的 id 预期会先失败;但一旦 worker 对 id 放宽,这就会变成写出 ~/.dsh/wz-assets 之外的文件。/file 路由已拒绝 '/' 与 '..',说明写侧没有贯彻同一约束。
- low/api 处理器无大小限制地缓冲请求体
index.js任何客户端都可以在 JSON.parse 之前向内存灌入任意大小的请求体,一次请求即可耗尽宿主内存并拖死承载该插件的 DSH 进程。
- low宿主侧「禁止写入 WZ 数据目录」的护栏在 Windows 路径分隔符下失效
lib/cmsdl.js在 Windows 上 path.resolve 返回反斜杠路径,`${resolvedData}/` 永远不是 `C:\\Data\\mxd\\Data` 的前缀,hitsData 恒为 false:run() 里这道纵深防御在未打开 allow_data_dir 时不再拦截写入 dataDir 的操作,只剩未采集的 worker 端 plan.blocked 检查。
宿主 HTTP API 允许调用方指定下载 URL(白名单含 raw.githubusercontent.com),下载后 chmod +x 并直接执行;同一 API 无 CSRF/Content-Type 校验。
口径:动态审计只会把风险往严重里判,不会把风险降下来(只升不降,不构成豁免);模型判错时由人工复核撤回,撤回后回到静态判定。合并判定 = 两层中更严的那一个。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-10-18 · 活跃度:活跃
• 仓库创建: 2026-10-16
• 星标: ★ 0 · 复刻: 0
• 健康度: 活跃 — 近 30 天有提交
来源
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
