安装验证:运行验证通过 (L5) · 验证于 dsh 0.2.1-rc.2 · 验证日期 安装验证详情 →
功能介绍AI
一个 DSH 宿主插件,通过 Chromium --app 模式把 DeepSeek Harness Web 界面变成独立的桌面应用窗口。
- 把 DSH Web 界面变成独立的桌面应用窗口
- 基于 Chromium --app 模式,无浏览器工具栏
- 以 DSH 宿主插件形式安装
能力标签为 AI 推断或 README 规则抽取(见角标),词表受限、未经安装验证;AI = 推断,README = 原文关键词。
安装
dsh plugin --profile web add github:MARIOMLY/dsh-desktop-app安装方式: GitHub · 运行验证通过 (L5)
验证与兼容性
按插件版本分组:每张卡是该插件版本实测过的 dsh 版本与安装兼容结论(L5 优先)。只列真测过的组合——未列出 = 未实测,不推定兼容。L1–L3 为插件级静态档(与 dsh 版本无关,各 dsh 行同值):在行内「验证等级」格里与 L4/L5 并列显示、标注「静态」,证据体为插件级单份、随行内「查看检查项与证据」出现,不在各版本重复存储。
External credentials(插件级):未检测到
○ 作者未声明 dsh 版本要求 —— 安装不会因版本被拒。
| 插件版本 \ dsh | dsh 0.2.1-rc.2 当前 | dsh 0.2.1-alpha.4 | dsh 0.2.1-alpha.2 |
|---|---|---|---|
| e5a520 | ✓ | ✓ | ✓ |
e5a520github✓ 运行验证通过 32026-10-18
https://github.com/MARIOMLY/dsh-desktop-app
✓dsh 0.2.1-rc.2当前2026-10-18L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-rc.2
- • 被测插件工件: github · https://github.com/MARIOMLY/dsh-desktop-app(版本未标注)
ID: dsh-desktop-app-4@e5a520@dsh0.2.1-rc.2 · 档位: l4-sandbox
签发:2026-10-18 · 有效至:2026-10-25
查看检查项与证据
已在加载器目录树中激活(150 个条目)
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/MARIOMLY/dsh-desktop-app(版本未标注)
ID: dsh-desktop-app-4@e5a520@dsh0.2.1-alpha.4 · 档位: l4-sandbox
签发:2026-10-16 · 有效至:2026-10-23
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
✓dsh 0.2.1-alpha.22026-10-14L5 · 运行验证通过
- • Node.js: v24.14.0
- • DSH: 0.2.1-alpha.2
- • 被测插件工件: github · https://github.com/MARIOMLY/dsh-desktop-app(版本未标注)
ID: dsh-desktop-app-4@e5a520@dsh0.2.1-alpha.2 · 档位: l4-sandbox
签发:2026-10-14 · 有效至:2026-10-21
查看检查项与证据
已在加载器目录树中激活(150 个条目)
L1–L3 为插件级静态结论(基础门槛,全 dsh 版本相同):证据为插件级单份,不在各版本重复存储。
作者徽章
将官方徽章嵌入你的 README,展示插件的安全与安装检测状态:
`[](https://www.dsh.so/artifact/dsh-desktop-app-4/)``[](https://www.dsh.so/artifact/dsh-desktop-app-4/)`安全报告
两层自动化检查,都不是人工审核:静态扫描(逐插件规则判定)与模型驱动的动态安全审计(只覆盖静态判定 warn 及以上的插件子集,不执行插件代码)。
静态扫描 低,动态审计最高 高,按「取更严者」→ 总评级 高。
v0.2.7dsh 清单0.2.7git2026-10-210.2.7版本一致clean · gitvet 为 AST 静态扫描(npm 发布物或 git 源码)。
静态发现(9 条)
- 警告childProcess · code-exec
lib/desktop.js:1028const launch = spawnSync( - 警告childProcess · code-exec
lib/desktop.js:1088const child = spawn(browser.browser.path, [`--app=${url}`], { detached: true, stdio: 'ignore' }) - 警告shellExec · shell
lib/desktop.js:603const out = execFileSync( - 警告shellExec · shell
lib/desktop.js:837const listing = execFileSync( - 警告shellExec · shell
lib/desktop.js:852execFileSync('taskkill', ['/PID', String(pid), '/F'], { stdio: 'ignore' }) - 警告netIp · network
lib/desktop.js:691baseUrl: ctx?.baseUrl ?? `http://127.0.0.1:${port}/`, - 警告netIp · network
lib/desktop.js:727`${browser.browser.path} --app=http://127.0.0.1:${port}/`, - 警告netIp · network
lib/desktop.js:1087const url = ctx?.authenticatedUrl ?? ctx?.baseUrl ?? `http://127.0.0.1:${port}/` - 警告netIp · network
lib/index.js:51const baseUrl = `http://127.0.0.1:${port}/`
展开 5 条审计发现
- high`browser` 参数接受任意已存在可执行文件并被启动/持久化,无任何校验
lib/desktop.js:1099只要路径包含分隔符且 existsSync 为真,resolveBrowser()(lib/desktop.js:135-138)就原样返回调用方给出的路径({ id: 'custom', path: explicit }),不校验扩展名、签名或白名单;lib/index.js:71 又把 args.browser 直接透传。actionOpen 会直接 spawn 该二进制,install/restart 还会把它写成启动脚本里的 $browser 并用 Start-Process 调用。因此一次 desktop_app({action:'open'|'install', browser:'...\\evil.exe'}) 调用即可启动任意程序,并在之后每次点击快捷方式时自动执行。
- medium`shortcutName` 路径穿越导致任意文件删除与 .lnk 覆盖
lib/desktop.js:910shortcutPath()(lib/desktop.js:181-183)只是 join(resolveDesktopDir(), name),未做任何清洗,shortcutName='..\\..\\Documents\\important.docx' 即可逃出桌面目录。actionRemove 对该路径执行 rmSync(shortcut, { force: true })(静默强制删除),actionInstall 又把同一路径交给 createWindowsShortcut() 覆盖已存在的 .lnk。被提示注入的模型调用 desktop_app({action:'remove', shortcutName:'../...'} ) 即可删除或替换 DSH 用户可写的任意文件。
- lowDSH 认证令牌以明文文件保存并出现在浏览器命令行中
lib/desktop.js:422带令牌的启动 URL(可换取认证 cookie)会从 server.log 读出并写入 ~/.dsh/desktop-app/tray-url.txt,同时作为参数出现在 427/1099 行启动的浏览器进程命令中,同用户的任意进程都能通过进程列表或 WMI 读取。
- low托盘宿主可执行资产被复制并启动,但不在本次审计源码中
lib/desktop.js:805installTrayHostFiles() 会把 tray-host.ps1/.cs/.cmd(以及可选 ico)复制到 ~/.dsh/desktop-app,随后 launch.ps1 每次启动都会隐藏执行 tray-host.cmd;这些文件在 package.json 的 files 中声明,却未包含在本次采集的源码里,因此其内容(任意 PowerShell/C#)无法审计。
- low按端口占用和命令行特征强杀进程
lib/desktop.js:856stopTrayHost() 会强杀任何命令行中包含 'tray-host' 的 powershell.exe;生成的 launcher/restart 脚本还会对占用目标端口的进程执行 Stop-Process -Force(lib/desktop.js:376、519)。若无关进程匹配该特征或占用该端口,会被无确认地终止。
工具参数缺少校验:browser 可为任意已存在可执行文件并被启动、写入生成的启动脚本;shortcutName 存在路径穿越,可删除或覆盖任意文件。
口径:动态审计只会把风险往严重里判,不会把风险降下来(只升不降,不构成豁免);模型判错时由人工复核撤回,撤回后回到静态判定。合并判定 = 两层中更严的那一个。
免责声明:静态扫描与动态安全审计都是自动化分析,不构成安全保证。安装前请自行审查。
活跃度
最近提交 2026-09-14 · 活跃度:稳定
• 仓库创建: 2026-09-12
• 星标: ★ 0 · 复刻: 0
• 健康度: 稳定 — 近 90 天有提交
来源
作者 README
GitHub 原文 ↗展示作者仓库中的原始 README 内容,实时抓取、未做改写;优先加载中文版(README.zh-CN.md 等),无中文版时回退英文。
