复现沙箱逃逸漏洞,验证宿主隔离是否可靠
32.2/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/9/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add zzszmyf/dsh-security-pocs该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · security
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-security-pocs(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/22 06:42:19
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 14 处,展示前 14 条)
- 删除本地文件poc-v1-js-config-exec.ts:19
rmSync(marker, { force: true }) - 读取本地文件poc-v1-js-config-exec.ts:36
console.log('[V1] marker written at config-load time:', existsSync(marker)) - 读取本地文件poc-v1-js-config-exec.ts:37
if (existsSync(marker)) console.log('[V1] marker content:', JSON.stringify(readFileSync(marker, 'utf8'))) - 读取本地文件poc-v1-js-config-exec.ts:37
if (existsSync(marker)) console.log('[V1] marker content:', JSON.stringify(readFileSync(marker, 'utf8'))) - 删除本地文件poc-v1-js-config-exec.ts:48
rmSync(marker, { force: true }) - 写入本地文件poc-v2-readonly-reads.ts:25
mkdirSync(workspace, { recursive: true }) - 写入本地文件poc-v2-readonly-reads.ts:26
mkdirSync(fakeHome, { recursive: true }) - 写入本地文件poc-v2-readonly-reads.ts:30
writeFileSync(secretPath, 'apiKey: dsh-poc-secret-value\n') - 删除本地文件递归poc-v2-readonly-reads.ts:51
rmSync(base, { recursive: true, force: true }) - 删除本地文件poc-v4b-exec-escape-to-rce.ts:43
rmSync(marker, { force: true }) - 读取本地文件poc-v4b-exec-escape-to-rce.ts:107
console.log('[V4b] unconfined host process wrote marker:', existsSync(marker)) - 读取本地文件poc-v4b-exec-escape-to-rce.ts:108
if (existsSync(marker)) console.log('[V4b] marker content:', JSON.stringify(readFileSync(marker, 'utf8'))) - 读取本地文件poc-v4b-exec-escape-to-rce.ts:108
if (existsSync(marker)) console.log('[V4b] marker content:', JSON.stringify(readFileSync(marker, 'utf8'))) - 删除本地文件poc-v4b-exec-escape-to-rce.ts:110
rmSync(marker, { force: true })
扫描于 2026/11/1(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 复现沙箱逃逸漏洞
- 验证宿主隔离可靠性
- PoC串联利用
DeepSeek Harness 三个漏洞的 PoC(外加一个串联利用):!!js 配置执行、只读沙箱全盘读取、vm 沙箱逃逸执行 → 无限制主机 RCE
README
由 DeepSeek 最新模型翻译生成dsh-security-pocs
针对 DeepSeek Harness(deepseek-harness,版本 0.1.0-rc.5,预发布版)中发现的三个安全漏洞(外加一个链式利用)的概念验证利用代码。
每个 PoC 都运行在真实代码路径上——真实的 vendored Loader、真实的沙箱插件、真实的动态插件运行器 → 注册表流水线。没有 mock。如果某个 PoC 通过,说明漏洞存在于产品中。
完整分析报告:WRITEUP.md。
免责声明。 仅供授权的安全研究和防御目的使用。这些 PoC 已向项目方披露。请勿在您不拥有的系统上运行它们。
发现
| # | PoC | 漏洞 | 验证结果 |
| V1 | poc-v1-js-config-exec.ts | !!js 配置表达式 = 加载时的同步任意代码执行(通过 process.getBuiltinModule)。唯一的防御是沙箱写入边界,而没有任何东西针对配置目录位置对其进行校验。 | 在配置加载时写入标记 |
| V2 | poc-v2-readonly-reads.ts | “只读”沙箱模式可读取整个宿主文件系统(写入围栏仅包裹 write/edit;bwrap 配置文件为 --ro-bind / /)。
展开完整文档(README 剩余 1 节)
dsh-security-pocs
针对 DeepSeek Harness(deepseek-harness,版本 0.1.0-rc.5,预发布版)中发现的三个安全漏洞(外加一个链式利用)的概念验证利用代码。
每个 PoC 都运行在真实代码路径上——真实的 vendored Loader、真实的沙箱插件、真实的动态插件运行器 → 注册表流水线。没有 mock。如果某个 PoC 通过,说明漏洞存在于产品中。
完整分析报告:WRITEUP.md。
免责声明。 仅供授权的安全研究和防御目的使用。这些 PoC 已向项目方披露。请勿在您不拥有的系统上运行它们。
发现
| # | PoC | 漏洞 | 验证结果 |
| V1 | poc-v1-js-config-exec.ts | !!js 配置表达式 = 加载时的同步任意代码执行(通过 process.getBuiltinModule)。唯一的防御是沙箱写入边界,而没有任何东西针对配置目录位置对其进行校验。 | 在配置加载时写入标记 |
| V2 | poc-v2-readonly-reads.ts | “只读”沙箱模式可读取整个宿主文件系统(写入围栏仅包裹 write/edit;bwrap 配置文件为 --ro-bind / /)。插件注入没有允许列表:inject: ['fs','web'] = 读取机密 + 外泄,且默认情况下未接入任何审批。 | 机密读取成功 / 写入被拒绝 |
| V4 | poc-v4-exec-escape.ts | 动态插件 vm 沙箱将原始宿主 exec(ToolRunContext)传递给模型编写的代码;exec.agent.ctx 是真实的运行时 Context。apply(ctx) 外观已被加固,但 execute(args, exec) 路径没有。 | 沙箱代码拉取了一个宿主服务 |
| V4b | poc-v4b-exec-escape-to-rce.ts | 链式:exec 逃逸 → ctx.get('subprocess') → 无限制的宿主进程生成。沙箱隔离仅存在于 shell 层;subprocess 接缝本身对隔离无感知。无需文件写入,无需审批。 | 无限制的宿主进程写入了标记 |
端到端攻击链(V4b):
恶意网页 / 仓库内容 / 抓取的文档 │ 提示注入 ▼ 模型调用 cordis_define + cordis_run(默认组合中零审批) │ ▼ vm 沙箱运行模型代码 → execute(args, exec) 接收到宿主 exec(guard.ts:582-584) │ ▼
exec.agent.ctx.get('subprocess').spawn(...) — 无 landlock/seatbelt/bwrap
│
▼
任意宿主进程 → 持久化(patch 文件 + !!js)→ 长期立足点
要求
- Node ≥ 22.3(process.getBuiltinModule;harness 的 engines 范围为 ^22.19 || >=24)
- pnpm
- 一份已完成 pnpm install 的 deepseek-harness 源代码检出,放置为本仓库的同级目录(或通过 DSH_CHECKOUT 指向)
git clone https://github.com/deepseek-harness/deepseek-harness.git
inside the checkout: pnpm install
运行这些 PoC 通过 harness 源码的 tsconfig 路径导入 @deepseek-ai/* 工作区包,因此必须从 harness 检出根目录运行:
cd deepseek-harness
pnpm exec tsx ../dsh-security-pocs/poc-v1-js-config-exec.ts
pnpm exec tsx ../dsh-security-pocs/poc-v2-readonly-reads.ts
pnpm exec tsx ../dsh-security-pocs/poc-v4-exec-escape.ts
pnpm exec tsx ../dsh-security-pocs/poc-v4b-exec-escape-to-rce.ts
如果检出目录位于其他位置:
DSH_CHECKOUT=/path/to/deepseek-harness pnpm exec tsx /path/to/dsh-security-pocs/poc-v4b-exec-escape-to-rce.ts
每个脚本在退出前都会清理自己的测试夹具(标记文件、临时目录)。
预期输出
poc-v1-js-config-exec.ts:
[V1] marker written at config-load time: true
[V1] marker content: "executed-at-config-load"
poc-v2-readonly-reads.ts:
[V2] read of a secret OUTSIDE the workspace under read-only mode:
"apiKey: dsh-poc-secret-value\n"
[V2] contrast — write under the same mode denied with code: FS_SANDBOX_DENIED
poc-v4-exec-escape.ts:
[V4] sandbox-realm tool code retrieved from the host Context: "HOST_SECRET_LEAKED"
poc-v4b-exec-escape-to-rce.ts:
[V4b] unconfined host process wrote marker: true
修复指导
- P0 — 向动态工具 execute 传入一个剥离了 agent.ctx 的门面 exec(guard.ts);让 SubprocessRuntime 自我约束——该约束应属于接缝的执行点,而不是“只有 bash-sandbox 调用它”的约定。
- P1 — 对动态插件注入进行 allowlist;将 define/run 接入审批流水线;从只读模式中排除机密目录。
- P2 — 启动时检查:已加载的配置目录 ∉ 可写根目录,若重叠则大声失败。
一旦修复落地,这些脚本可直接转换为回归测试(V4 属于 cordis-host-runner/tests/,恰好覆盖 sandbox-context.spec.ts 遗漏的 exec 表面)。
时间线
- 2026-08-13 — 向项目报告了发现;PoC 和报告已发布。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zzszmyf/dsh-security-pocs
复现沙箱逃逸漏洞,验证宿主隔离是否可靠
相关插件 · 安全 / 权限
智能体逆向工程morluto/rea
用智能体逆向工程任何东西,从应用行为到原生二进制。
★ 415,267已汉化DSH
73.3
智能体集群框架ruvnet/ruflo
面向 Claude Code 与 Codex 的智能体元基座meta-harness。
★ 80,414已汉化MCP
71.9
WorkBuddy 模型接入corrinehu/dsh-workbuddy-connect
2026 年 10 月 20 日起,WorkBuddy…
★ 1,604已汉化DSH
71.7
破甲一键通z91772524-ai/pojia-next
十五个 AI…
★ 967已汉化DSH
71.6
AI 代理虚拟终端strukto-ai/mirage
Mirage 是给 AI 智能体用的虚拟终端:一层 shell,统管数据、命令行和运行时。Unix…
★ 3,756已汉化DSH
70.8
Agent 操作层agentic-os-org/ANOLISA
ANOLISA(Agentic Nexus Operating Layer & Interface System Architecture)|智能体操作系统,带运行时、安全、可观测性,以及 Tokenless 响应压缩,降低 token 用量与成本。
★ 649已汉化DSH
70.7