Skip to content

Releases

v0.3.1 — 兼容 dsh-tools 0.2.1-rc.2(peer 范围扩展)

Choose a tag to compare

@ccr-wer ccr-wer released this 19 Oct 04:41

变更

  • peerDependencies.@deepseek-ai/dsh-tools 追加 ^0.2.1-rc.2
  • 代码与规则集零改动

验证

  • 临时 profile 挂载自检通过(dsh-tools 0.2.1-rc.2 + cordis 4.0.5,无 peer 告警,dump-config 含 - id: dolphin)
  • npm pack 21 文件

v0.3.0

Choose a tag to compare

@ccr-wer ccr-wer released this 12 Oct 14:19

dsh-dolphin-security v0.3.0

规则集由 162 条扩展至 165 条,补齐靶场实测漏检点,离线可用、随包分发、不依赖 semgrep registry、不引入 p/*。

规则变更

  • 扩展 dolphin.hardcoded-credentials(MIT, CWE-798/259/321):新增 AWS Access Key、GitHub Token(ghp_/gho_/ghu_/ghs_/ghr_/github_pat_)、URL 内嵌凭据(redis://user:pass@ 等)、字节字面量密钥(b"...")匹配。
  • 新增 dolphin.node-command-injection(MIT, CWE-78):覆盖 child_process 的 exec/execSync/execFile/execFileSync 动态命令拼接与模板插值(此前仅 Java/Python 规则覆盖)。
  • 新增 dolphin.node-code-injection(MIT, CWE-95):覆盖 new Function(...) / Function(...) 由外部输入拼接或模板插值构成(靶场 new Function("return "+code) 缺口)。
  • 新增 dolphin.node-innerhtml-xss(MIT, CWE-79):覆盖 el.innerHTML = 由不可信内容直接赋值,含双引号串内 ${...} 插值形态。

验证

  • semgrep --validate:0 错误,165 条规则
  • rules-license.js 闸门:PASS(仅 MIT 139 + Apache-2.0 26)
  • 靶场重测:总检出 13 → 23;server.js 1 → 6,config.py 7 → 12;安全对照组(spawn 数组写法、os.environ.get)零误报
  • 隐私清查:仓库内容无真实 token / 个人隐私 / 真实主机信息

第三方 MIT 源评估

Apiiro malicious-code-ruleset(MIT)与 elttam semgrep-rules(MIT)经评估均不引入——前者对本靶场增量 0 命中且会误报,后者无 JavaScript 规则目录。缺口由扩展 + 自研覆盖。

v0.2.8 — 重新发布(与 v0.2.7 代码逐字节一致)

Choose a tag to compare

@ccr-wer ccr-wer released this 11 Oct 12:36

说明 / Notes

  • 本版本与 0.2.7 的代码逐字节相同,是一次纯粹的重新发布(re-release),不包含任何功能、规则集或依赖变更;差异仅在版本元数据——package.json 的 version 字段(0.2.7 → 0.2.8)与 README.md / README_EN.md 的版本行。
  • 重发原因:0.2.7 这个版本号在 npm registry 上被一条**未批准的暂存发布记录(staged publish)**占用。此前为适配本机 npm CLI 版本与 token 权限,0.2.7 曾以 npm stage publish 送入暂存区(stage id 9d7d7fa7-0679-4588-9a17-a09ffd5f5770),而 npm stage approve 与 npm stage reject 均强制要求交互式 2FA(token 上的 Bypass 2FA 对这两步不生效),无法在无人值守下清除。随后直接发布 0.2.7 会被 registry 以 E409 Conflict — Cannot publish over previously staged version "0.2.7" 拒绝,故新开 0.2.8 版本号发布。
  • 与 0.2.7 的功能等价性可验证:全部代码与规则集文件逐字节相同(index.js、dolphin-core.js、dolphin-patrol.js、dolphin-ssh-core.js、dsh-code-scan/、rules/dolphin-core.yml);tarball 的差异仅来自元数据——package.json 的 version 字段与 README.md / README_EN.md 的版本行。0.2.8 的 npm pack 产物为 21 个文件 / 146.1 kB / shasum ad6df7baddd0b36cce21ff1a189e29481673a127(0.2.7 为 21 文件 / 145.9 kB / shasum 92342566b7601722df9f14e56939752bad991481)。因此 0.2.7 的全部修复内容(桌面端插件准入、LICENSE 标准化)同样适用于本版本。
  • 遗留项:npm 上那条 0.2.7 暂存记录尚未清除(需人工 2FA 执行 npm stage reject 9d7d7fa7-0679-4588-9a17-a09ffd5f5770),在此之前 0.2.7 版本号不可用。该记录不影响已发布版本,也不影响 latest 标签指向。

变更 / Changed

  • package.json 版本号 0.2.7 → 0.2.8;README.md 与 README_EN.md 的版本行同步更新。
  • 代码、规则集(162 条)、peerDependencies、files[] 与 0.2.7 完全一致,未做任何改动。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.8 | GitHub tag: v0.2.8

v0.2.7 — 桌面端插件准入修复 + LICENSE 标准化

Choose a tag to compare

@ccr-wer ccr-wer released this 11 Oct 10:11

修复 / Fixed

  • 桌面端(DSH 0.2.0-rc.2)插件准入拦截:安装本插件时被 evaluatePluginCompatibility() 判定为不兼容,报 peerDependencies {"@deepseek-ai/dsh-tools":"^0.1.5-rc.1"}。
    真实根因与"预发布版本只在同一版本元组内匹配"无关(实测 0.1.5-rc.2 满足 ^0.1.5-rc.1 为真)。DSH 的准入校验是把 @deepseek-ai/dsh 与 @deepseek-ai/dsh-* 的 peer 范围与运行时版本(getDshRuntimeVersion(),即 app-boot 包版本)比对,而不是与 peer 包自身的版本比对;桌面运行时为 0.2.0-rc.2,而 ^0.1.5-rc.1 展开为 >=0.1.5-rc.1 <0.2.0-0,上界越出 → 判定不兼容。
    现把范围改为 ^0.1.5-rc.1 || ^0.2.0-rc.2,显式覆盖 Web/CLI(0.1.5-rc.x)与桌面(0.2.0-rc.x)两条运行时线。
  • LICENSE 拆分为标准 MIT + 独立第三方声明,修复 GitHub 许可证识别失败:此前 LICENSE 在标准 MIT 正文(21 行)之后追加了 "Third-party notices" 段,GitHub 的许可证识别器因模板尾部存在多余内容而判定为 NOASSERTION(npm 侧始终显示 MIT,两边不一致)。现 LICENSE 仅保留标准 MIT 全文(21 行 / 1077 B,与官方模板逐行一致),第三方声明移入新增的 THIRD_PARTY_NOTICES.md。许可义务无任何减损:MIT 与 Apache-2.0 要求保留的版权与许可声明仍完整保留,THIRD_PARTY_LICENSES/ 目录内的许可证原文继续随包分发。
  • 补齐第三方声明的遗漏项:原声明只列出 dsh-code-scan(MIT)与 dsh-web(Apache-2.0)两项,遗漏了规则集的实际主体来源 —— GitLab SAST Rules(java/python/javascript 共 135 条 MIT)与 securego/gosec(go/ 共 26 条 Apache-2.0)。现已在 THIRD_PARTY_NOTICES.md 中补全为 4 项,并附许可证构成表与 Apache-2.0 合规说明(保留声明、随附原文、未用商标、已记录修改痕迹)。

变更 / Changed

  • peerDependencies 与 devDependencies 中的 @deepseek-ai/dsh-tools 同步放宽为 ^0.1.5-rc.1 || ^0.2.0-rc.2。
  • @deepseek-ai/cordis 范围刻意保持 ^4.0.1 不变:准入校验只检查 @deepseek-ai/dsh 与 @deepseek-ai/dsh-* 前缀,@deepseek-ai/cordis 从不参与判定;且 ^4.0.1 已覆盖桌面端实际提供的 4.0.4 与本机共享层的 4.0.2,改动不产生任何效果。
  • package.json 的 files[] 加入 THIRD_PARTY_NOTICES.md(自本版本的 npm 包起随包分发)。
  • 仓库侧维护(不涉及代码,不触发发版):补建 v0.2.1 tag(此前遗漏,对应提交 2b6f894)与 v0.2.1~v0.2.6 六个 GitHub Release;仓库 description 补充英文便于检索,homepage 指向 npm 包页面。

说明 / Notes

  • 兼容性为实测结论,非仅声明:桌面端运行时 0.2.0-rc.2 内置的 desktop-runtime.json 声明 287 个共享包(其中 279 个锁 0.2.0-rc.2),实际提供 @deepseek-ai/dsh-tools 0.2.0-rc.2 与 @deepseek-ai/cordis 4.0.4。实测 @deepseek-ai/dsh-tools 的 0.1.5-rc.2 与 0.2.0-rc.2 导出面逐符号一致(23/23),且以 0.2.0-rc.2 加载本插件 index.js 时 apply() 正常执行、dolphin_scan 与 dolphin_patrol 均成功注册。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.7 | GitHub tag: v0.2.7

v0.2.1 — 默认规则集升级 + 自研 CWE-798 规则

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:11

新增 / Added

  • 默认规则集升级:p/security-audit → p/security-audit + p/owasp-top-ten + 自建规则,补齐 CWE-79/89/22/95 官方空白(实测靶场命中 4 → 21,零误报)。
  • 自建规则 dolphin.hardcoded-credentials(CWE-798):官方 registry 的 hardcoded-password-default 已消失,社区规则集全线漏报硬编码凭据;本规则修复 JSON 冒号引号风格漏报,随 npm 包分发。
  • 多规则包支持:rulesConfig 支持空格分隔多包/文件(逐包展开 --config);远程巡逻时本地规则文件自动上传远端并改写路径、扫描后自动清理。
  • rulesConfig 含空格的注入自检用例更新(多 token 语义下恶意串被中性化为 --config 参数值)。

修复 / Fixed

  • 自建规则路径改为模块目录绝对路径解析,消费者在任意工作目录运行均可加载。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.1 | GitHub tag: v0.2.1

v0.2.6 — 内置规则集 162 条 + check_id 归一化 + 部署链修复

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:12

新增 / Added

  • 内置规则集:1 条 → 162 条。以 GitLab SAST Rules(上游 commit 53bf5cf6df3c51b6c02110f5a638b5e6213666cd)为源,逐文件判定许可证后收录 java 55 / python 68 / javascript 11 / go 27 共 161 条,另加自研 dolphin.hardcoded-credentials(CWE-798 硬编码凭据)1 条,合计 162 条 / 162 个唯一 ID。许可分布:MIT 136(GitLab 侧 135 + 自研 1)、Apache-2.0 26(go/ 下源自 securego/gosec),全部在白名单内,逐条注入 metadata.license。规则集为随包分发的单文件 rules/dolphin-core.yml,不再依赖远端 registry 拉取 p/* 规则包(规避 Semgrep SRL v1.0 的禁转售条款)。逐条来源/许可/注入结果见 rules/dolphin-core.manifest.json。
  • 规则 ID 索引与 check_id 归一化(buildRuleIdIndex() / normalizeCheckId()):semgrep 对「文件型 --config」会在 check_id 前拼接配置路径的点号化前缀(配置不在子进程 cwd 子树内时退化为完整绝对路径),导致同一规则在不同机器/目录下 ID 漂移,且把本机安装路径泄漏进报告。现改为以规则文件中的真实 ID 集合做最长后缀精确匹配,对 cwd、盘符、远端路径一律免疫。

修复 / Fixed

  • 便携 wheel 包平台硬闸门:Windows 宿主上执行 pip download --platform=manylinux* 只改 wheel 标签、不改环境标记求值,sys_platform == "win32" 仍为真;新版 semgrep 的 pywin32 依赖没有 manylinux wheel,pip 于是静默退避到 semgrep 1.136.0 + protobuf 4.25.9(退出码仍为 0,失败无声),装到远端 Python 3.14 上必崩(TypeError: Metaclasses with custom tp_new are not supported)。现改为:Windows 宿主且缓存未命中时明确拒绝备包并给出处置指引(在 Linux 侧下载或预置 DOLPHIN_SEMGREP_CACHE),不再生成坏包。
  • 部署失败信息被 pip warning 顶掉:三级部署链(pipx → venv → 便携包)报错时改为优先取「安装步」的 stderr;原逻辑取最后一步输出,npm/pip 的警告会把真实错误冲掉。新增 composePortableError() 统一收口。
  • venv 失败路径未登记清理:python3 -m venv 在缺 python3.14-venv 的发行版(如 Ubuntu 26.04)上会失败并报 ensurepip is not available,但残留目录原先未进 cleanupDirs,导致远端 /tmp/dolphin-venv-* 空壳累积。现无论成败都登记,扫描结束后统一回收。

变更 / Changed

  • 报告落盘逻辑去重:dolphin-core.js 抽出 writeReports()(runScan() 与 --mock 自测路径共用),dolphin-patrol.js 抽出 writeJsonReport()(runPatrol() 与 runLocalScan() 共用),消除四处重复的「建目录 → 序列化 → 写入」代码。
  • 开源合规中性化:.gitignore 补充 staging/(本地规则集构建/审计脚本,内含本机绝对路径)与 npm-dist/(0.2.5 解压快照);README、示例与源码注释中的本机绝对路径全部改为 <插件目录>、C:\Users\<user> 等中性写法。

说明 / Notes

  • 自检 42 项全部通过(改动前基线同为 42/0,本次重构只去重、不改行为)。端到端回归:Windows 与 WSL 两侧对同一靶场检出逐条一致(13 处 = ERROR 7 + WARNING 6),checkId 全部为纯规则 ID、无路径前缀,两次巡逻 findings 完全可复现。
  • 远程巡逻端到端约 32 秒(含 SFTP 上传约 55.7 MB 便携包)。
  • 本轮不涉及 Skill 侧封装包(skill-package/,已独立成库 github.com/ccr-wer/dolphin-security-skill)。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.6 | GitHub tag: v0.2.6

v0.2.5 — peerDependencies 版本范围修正

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:12

修复 / Fixed

  • peerDependencies 版本范围修正:@deepseek-ai/dsh-tools 由 ^0.1.1-rc.2 调整为 ^0.1.5-rc.1(peerDependencies 与 devDependencies 两处)。按 semver 规范,prerelease 版本仅在相同 [major, minor, patch] 元组内匹配,原范围连宿主 0.1.2-rc.1 都不满足(实测 satisfies('0.1.2-rc.1', '^0.1.1-rc.2') === false);在启用 strict-peer-dependencies 或宿主改为严格校验时会导致装配失败。新范围覆盖 0.1.5-rc.1 / 0.1.5-rc.2 / 0.1.5 正式版。@deepseek-ai/cordis 保持 ^4.0.1(0.1.2 与 0.1.5 宿主均依赖 ^4.0.2,本就满足)。

说明 / Notes

  • 已对 DSH 0.1.5-rc.1 做完整兼容性核对(对 dsh / dsh-tools / dsh-agent / dsh-session 四包做 0.1.2-rc.1 ↔ 0.1.5-rc.1 逐文件 diff):exec.agent?.session?.header?.cwd 调用链在 0.1.5 中完整保留;ctx.tools.register(defineTool(...)) 与 execute(args, exec) 签名未变;dsh.bundle.patch 挂载机制未变。Inbox 模块(@deepseek-ai/dsh-agent 的 lib/types/inbox.*,0.1.2 中即标注 @internal — not a plugin extension point)在 0.1.5 中被内部重构,本插件全库无引用,影响为零。
  • 回归验证:本地扫描与远程 SSH 巡逻两条链路均命中靶场 21 处(14 ERROR / 7 WARNING),三包规则集(p/security-audit + p/owasp-top-ten + 自建 CWE-798)全部生效。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.5 | GitHub tag: v0.2.5

v0.2.4 — Windows Git Bash 远端路径映射修复

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:12

修复 / Fixed

  • Windows Git Bash 远端路径映射修复:远端默认 shell 为 Git Bash/MSYS 时,exec 通道 /tmp 映射到 %TEMP%,而 SFTP 通道(sftp-server.exe)把 /tmp 映射到驱动器根的 C:\tmp,两通道错位导致远程规则文件「上传到 A 处、扫描却去 B 处找」(自建 CWE-798 规则静默失效)。新增 detectRemoteTempBase():探测到 MSYS 环境后,exec 仍用 /tmp、SFTP 改用「去盘符 + 正斜杠」的 Windows 原生路径(/Users/<user>/.../Temp),两通道指向同一物理目录;Linux/macOS 行为不变。实测 Windows 主机远程巡逻恢复三包规则全量命中(靶场 21 处:14 ERROR / 7 WARNING)。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.4 | GitHub tag: v0.2.4

v0.2.3 — 本地扫描与远程巡逻规则集对齐

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:11

新增 / Added

  • 本地 dolphin_scan 规则集与远程巡逻对齐:默认规则由单包 p/security-audit 升级为三包 p/security-audit + p/owasp-top-ten + 自建规则(绝对路径解析),本地扫描与 dolphin_patrol 输出一致(实测靶场命中 4 → 21,14 ERROR / 7 WARNING)。
  • package.json 补充 exports 字段映射(. → ./index.js),ESM 插件入口暴露完整。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.3 | GitHub tag: v0.2.3

v0.2.2 — LICENSE 修复与版本同步

Choose a tag to compare

@ccr-wer ccr-wer released this 26 Sep 06:11

修复 / Fixed

  • LICENSE 许可证声明修复:清除一次未正确解决的 merge 冲突残留(<<<<<<< HEAD / ======= / >>>>>>> 标记与误入的 MPL-2.0 文本),恢复为干净的纯 MIT 文本(44 行)+ 第三方声明,消除 SPDX 扫描器的 NOASSERTION 误判。
  • README / README_EN 版本号同步至 v0.2.2。

npm: https://www.npmjs.com/package/dsh-dolphin-security/v/0.2.2 | GitHub tag: v0.2.2