🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

沙箱逃逸验证集 zzszmyf/dsh-security-pocs

DeepSeek Harness
zzszmyf79 天前有提交已提供中文文档扫描:含敏感能力

复现沙箱逃逸漏洞,验证宿主隔离是否可靠

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
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 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
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 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 和报告已发布。
预览分享卡片长什么样 ↓zzszmyf/dsh-security-pocs
分享 · DeepSeek Harness Hub
zzszmyf/dsh-security-pocs

复现沙箱逃逸漏洞,验证宿主隔离是否可靠

回到顶部