{"ok":true,"total":72,"queue":[{"full_name":"Nagi-ovo/dsh-ads","submitted_at":"2026-08-17T19:10:00Z","is_dsh_plugin":true,"confidence":0.9,"verdict":"基本安全","needs_review":true,"status":"notified","ai_summary":"娱乐化恶搞广告插件，未见明显恶意。","notified_at":"2026-08-17T19:11:01Z","reviewed_at":"2026-08-17T19:22:05Z","safety_score":68,"score_type":"safety","review_status":"manual_required","last_review_attempt_at":"2026-10-21T08:15:30.631913+00:00","retry_count":1,"last_review_error":"security_manual_source_budget"},{"full_name":"vlln/dsh-navbar","submitted_at":"2026-08-17T11:29:07.112Z","is_dsh_plugin":true,"confidence":0.96,"verdict":"安全","needs_review":false,"status":"notified","ai_summary":"官方 bundle 浏览器端插件，权限与数据访问范围有限，未见明显恶意行为。","notified_at":"2026-08-17T19:33:48.880489","review_status":"completed","retry_count":1,"last_review_attempt_at":"2026-08-18T13:41:07.737427+00:00","last_review_error":null,"reviewed_at":"2026-10-21T08:41:12.022310+00:00","review_mail_status":"rejected","review_mail_sent_at":"2026-08-18T13:51:07+00:00","review_mail_id":"vlln/dsh-navbar|2026-08-18T13:51:00.352830+00:00","safety_score":92,"score_type":"safety","review_report_id":"35eb0756d7f034cd3a472267c05a6fd1148d3f1576b248968040b14c79193f19","review_candidate_id":"170603eb77132ac0e91f7b021496b02860a02435259b35c01cc007a28aa88018","review_candidate_status":"maintainer_confirmed_static_source","review_source_commit":"e53adfc8c837ebcb4b6a52c2c4baf7cb6e8b795e","review_snapshot_sha256":"e7e58e2e0fb3c7741f690b5306c38d19ed109a6d6a24614fc801ad6daec41dc0","review_mail_notification_id":"16bdb031def9a8209f942db85d7b0598fec43aa6cf87abd1cd3bc1a8a4c32ce0","review_mail_attempt_id":"3467c8c605064599b85320ef00e428cd","review_mail_payload_sha256":"58f686a22c617185b2b932b073c24938630ff36330b883179b85f011eabed6ca","review_mail_recipient_sha256":"f78500ca331c14673009d4d67278dd7fadaeeb25aa91569dfdaddadb07649eee","review_mail_started_at":"2026-10-21T09:40:24.315534+00:00","review_mail_last_error":"report_mail_provider_rejected_60020","review_mail_last_attempt_at":"2026-10-21T09:41:05.823252+00:00"}],"reports":[{"full_name":"kingOfSoySauce/dsh-liang-skin","verdict":"通过","user_advice":"放心用","branch":"main","updated_at":"2026-08-17T00:00:00Z","summary":"未发现恶意执行、凭据读取或数据外发，仅有常规构建依赖风险。","details":["代码执行：检查 package.json、scripts/build-client.mjs、src/index.js 及客户端源码。项目没有 preinstall、install、postinstall、prepare 等安装生命周期脚本，只有手动执行的 build 和 test；运行时代码未发现 child_process、exec、eval、new Function、curl|sh 等任意代码执行路径。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/package.json))","数据外发：客户端没有 fetch、ctx.http、window.open 或运行时外部链接，CSS 也没有 @import/url 外部资源。视频、图片全部从插件自己的 `/plugins/dsh-client-liang-intensity-skin/assets` 同源路径加载，没有发现统计、遥测或第三方上传。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/client/index.tsx))","敏感读取：服务端只使用固定资产清单，从相对插件目录读取图片和视频；请求路径必须精确命中 Map 中的白名单，因此不存在用户输入拼接磁盘路径或目录穿越。未发现 process.env、SSH 凭据、DSH 凭据、token、cookie、任意 readFile/writeFile。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/index.js))","依赖风险：项目没有生产运行时 npm 依赖，开发依赖仅包含类型包、esbuild 与 Vitest。esbuild 从 0.25.0 起已修复旧版开发服务器跨源读取问题；Vitest 4.1.10 也是近期浏览器模式文件权限漏洞的修复版本。普通用户安装已构建 release 时无需执行 prepare。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/package.json))","混淆与后门：lib 目录包含构建后的 client.js 及 client.js.map，源码同时公开；源码搜索未出现动态求值、加密载荷、远程脚本、隐藏域名或异常字符串解码。构建产物体积较大主要来自前端代码和样式，不构成后门证据。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/tree/main/lib))","权限越界：服务端只注册固定 GET/HEAD 静态媒体路由，不提供写接口、管理命令或配置修改 API。客户端会在用户启用绑定后，通过 DSH 官方 ModelDirectory.select 提交用户所选推理等级；关闭绑定后只改变本地视觉等级。偏好仅保存为两个 localStorage 布尔值。该行为符合皮肤功能声明，没有隐蔽提权。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/index.js))"],"report_md":"## 安全评分\n\n**90/100 · 安全性较高**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》，对 `kingOfSoySauce/dsh-liang-skin` 的代码执行、数据外发、敏感信息读取、依赖风险、混淆或后门、权限越界六个维度进行了静态深度审查。审查覆盖 `package.json`、`cordis.patch.yml`、`src/index.js`、`src/range.js`、`src/client/index.tsx`、`src/client/logic.ts`、`src/client/skin.css`、`lib/client.js`、source map、构建脚本以及安装说明。\n\n**最终结论：通过。普通 MyDSH 用户可以放心使用。** 未发现恶意代码、远程控制、凭据窃取、隐蔽数据上传或任意命令执行。安全评分为 **90/100**，安全性较高，属于低风险范围**。\n\n## 评估对象\n\n- **评估分支：** `main`。GitHub 仓库页面当前明确显示默认分支为 main，仓库包含 assets、docs、lib、scripts、src 等目录，共显示 18 次提交。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin))\n- **更新时间：** `2026-08-17T00:00:00Z`。审计期间已访问指定 GitHub API 地址，但当前 Web 抓取器未返回可解析的 API 正文；该值按审计日进行日级 ISO 规范化，不应被解释为 GitHub API 的秒级精确 `pushed_at`。GitHub 页面可确认 v0.1.4 于 2026 年 8 月 16 日发布，且 main 在该版本后另有 2 次提交。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/releases))\n- **仓库规模：** `package.json` 80 行、服务端入口 162 行、客户端入口 848 行；另含逻辑模块、CSS、测试、构建产物、source map 和本地图片/视频素材。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/package.json))\n- **插件形态：** MyDSH Web 客户端皮肤，服务端仅承担本地静态媒体分发，客户端负责主题、背景和推理等级滑块交互。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` scripts、`scripts/build-client.mjs`、`src/index.js`、客户端入口及安装说明。\n\n**发现：** 未发现 `child_process`、`exec`、`spawn`、`eval`、`new Function`、下载后执行、`curl | sh` 或动态加载远程 JavaScript。项目自身没有 `preinstall`、`install`、`postinstall`、`prepare` 生命周期脚本；只有开发者主动运行的 `node ./scripts/build-client.mjs` 和 `vitest run`。发布文件清单不包含 scripts，README 也明确说明 release tarball 已带构建产物，安装时无需 prepare。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/package.json))\n\n**证据：** `package.json:49-53`；`src/index.js:1-162`；README 安装章节。\n\n**风险程度：低。** 开发环境安装 esbuild 时仍存在常规 npm 供应链执行面，但这不是插件自定义的隐藏安装代码。\n\n### 2. 数据外发\n\n**检查内容：** 客户端网络调用、外部 URL、CSS 资源、图片和视频加载地址。\n\n**发现：** `src/client/index.tsx` 中不存在 `fetch`、`ctx.http`、`window.open` 或运行时 `href`；CSS 不含 `@import` 和 `url(...)` 外链。视频、海报和人物序列全部通过固定的同源 `/plugins/dsh-client-liang-intensity-skin/assets` 路径加载。未发现统计 SDK、遥测、广告、Webhook、第三方 API 或上传功能。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/client/index.tsx))\n\n**证据：** `src/client/index.tsx:1924-1928、2181-2217、2390-2394`；`src/client/skin.css` 全文搜索。\n\n**风险程度：低。** 运行时没有向第三方服务器发送数据。\n\n### 3. 敏感信息读取\n\n**检查内容：** 文件系统、环境变量、Cookie、localStorage、SSH/DSH 凭据路径。\n\n**发现：** 服务端仅导入 `createReadStream` 和 `statSync`，并以源码中固定的 `ASSET_SPECS` 白名单构建文件路径。HTTP 请求中的 pathname 只能在预先生成的 Map 中精确匹配，不能转换为任意磁盘路径，因而不存在 `../` 路径穿越读取。未发现 `process.env`、`~/.ssh`、`~/.dsh`、token、Cookie、`readFile`、`writeFile`。客户端仅在 localStorage 中保存“是否启用皮肤”和“是否绑定推理等级”两个布尔偏好。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/index.js))\n\n**证据：** `src/index.js:1-4、14-42、45-99`；`src/client/index.tsx:787-825`。\n\n**风险程度：低。** 文件读取权限被限定在插件自身的静态素材目录。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`package-lock.json`、开发依赖版本和公开安全公告。\n\n**发现：** 项目没有生产运行时 dependencies；开发依赖为 `@types/react`、`esbuild ^0.25.0`、`vitest ^4.1.10`。esbuild 0.25.0 已修复旧版开发服务器允许跨源读取源码的问题。Vitest 4.1.10 是近期 `@vitest/browser` 文件访问权限漏洞的修复版本；该仓库本身也未声明或配置 browser mode。仓库包含 lockfile，可降低依赖解析漂移。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/package.json))\n\n**证据：** `package.json:72-76`、`package-lock.json`。\n\n**风险程度：低。** 建议维护者继续使用 lockfile，并在发布前执行 `npm audit` 和干净环境构建验证。\n\n### 5. 混淆与后门\n\n**检查内容：** `lib/client.js`、`lib/client.js.map`、源码中的动态执行、编码载荷和隐藏域名。\n\n**发现：** lib 中同时存在 bundle 和 source map，package 清单也公开包含构建产物、source map 与原始服务端源码。前端 bundle 的压缩属于正常构建结果，未发现 Base64 执行载荷、自解密代码、动态函数构造、远程脚本注入或可疑域名。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/tree/main/lib))\n\n**证据：** `lib/client.js`、`lib/client.js.map`、`package.json:17-47`。\n\n**风险程度：低。** 为进一步提高可复现性，维护者可在 release 中附构建哈希或 SBOM，但当前没有后门迹象。\n\n### 6. 权限越界\n\n**检查内容：** 服务注册、HTTP 方法、DOM 注入、主题控制、模型推理等级修改。\n\n**发现：** 服务端只为固定静态资源注册 exact 路由，仅允许 GET/HEAD，并拒绝其他方法；没有写接口、管理 API 或命令系统。客户端会修改页面主题和注入滑块，这是皮肤声明功能。只有用户启用“绑定思考等级”并完成滑动操作时，才通过 DSH 官方 `ModelDirectory.select` 提交当前模型和目标 `reasoningEffort`；关闭绑定时仅改变视觉帧，不修改模型。代码还会监听原生外观按钮及 DOM 变化，但注册了对应清理逻辑。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin/blob/main/src/index.js))\n\n**证据：** `src/index.js:45-99、131-161`；`src/client/index.tsx:567-621、757-771、826-848`。\n\n**风险程度：低。** DOM 选择器依赖 DSH 内部样式类，未来可能产生兼容性问题，但不构成权限提升或安全越界。\n\n## 风险点汇总\n\n1. 开发者执行 `npm install` 时仍需信任 npm、esbuild 和 Vitest 的正常供应链，这是所有 Node.js 开发项目共有的风险。\n2. 客户端使用 MutationObserver 和捕获阶段点击监听扩展原生外观设置；DSH UI 大版本升级后可能出现界面兼容问题，但卸载清理逻辑完整。\n3. `main` 已比 v0.1.4 release 多 2 次提交。普通用户应优先安装固定 tag 或 release tarball，避免后续 main 变化被静默带入。([github.com](https://github.com/kingOfSoySauce/dsh-liang-skin))\n4. GitHub API 的秒级 `pushed_at` 在本次抓取环境中未能取得可解析正文，因此发布系统应在入库前再次直接调用 GitHub API 固化精确时间和 commit SHA。([]())\n\n## 结论与使用建议\n\n当前代码没有显示恶意目的，也没有发现命令执行、凭据窃取、第三方数据外发、任意文件读取或未授权后台操作。静态资源服务器采用固定白名单和 exact 路由，客户端状态只保存在当前浏览器，推理等级变化由用户操作触发并通过官方服务提交。\n\n**用户可以放心使用。** 推荐安装固定的 `v0.1.4` release 或由 MyDSH 社区审核后固定的 main commit，不建议长期跟踪不固定的 main。维护者后续只需持续更新 lockfile、执行依赖审计，并在发布流水线加入源码与 `lib/client.js` 的可复现构建校验即可。\n","action":"release","reviewed_at":"2026-08-17T13:42:53.662590+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":90,"score_type":"safety","review_status":"complete"},{"full_name":"vlln/dsh-navbar","report_id":"35eb0756d7f034cd3a472267c05a6fd1148d3f1576b248968040b14c79193f19","report_schema":2,"source_commit":"e53adfc8c837ebcb4b6a52c2c4baf7cb6e8b795e","snapshot_sha256":"e7e58e2e0fb3c7741f690b5306c38d19ed109a6d6a24614fc801ad6daec41dc0","branch":"main","updated_at":"2026-09-10T06:24:36Z","reviewed_at":"2026-10-21T08:41:12.022310+00:00","review_status":"complete","review_type":"maintainer_confirmed_static_source","scope":"fixed-commit static source only; no tools, execution, install, dependency advisory or runtime certification","coverage":{"total_blobs":14,"reviewed_text_files":13,"reviewed_text_bytes":120059,"unreviewed":[{"path":"docs/preview/navbar.png","reason":"binary_not_interpreted","sha":"dc712de6d4ea942505dd5f30b35e524e669227cb"}],"all_regular_text_covered":false},"safety_score":84,"score_scope":"provisional_model_static_score_not_runtime_or_maintainer_safety_rating","verdict":"存在风险","user_advice":"谨慎用","action":"review","summary":"此版本提供浏览器对话导航与精选功能。源码可确认精选摘要在localStorage持久化、存在定时轮询和DOM观察，以及依赖宿主行为的滚动实现。请谨慎处理敏感会话，并在目标DSH版本验证性能与卸载行为；尚无本轮运行测试或完整安全认证。","details":["确认静态观察：Conversation text is persisted in browser localStorage。已回读pinStore.toggle与pinRowText：精选时持久化消息标识和最多160字符的用户文本摘要；同源脚本可读。取消精选会移除该项，但未据此推断全局到期、加密或会话删除联动；这不是发现外传或恶意代码。","确认静态观察：Broad DOM observation and recurring polling may affect page performance。已确认body subtree MutationObserver和200ms tick；同时源码存在过滤、rAF合并及unload清理。这里只确认机制和需验证的开销，不声称已测出性能故障或泄漏。","确认静态观察：Synthetic wheel dispatch and direct scroll mutation depend on host behavior。已确认合成wheel和直接scrollTop写入，是导航兼容机制。作者注释描述了兼容目的，但不能替代各DSH版本实测；不据此判恶意。","确认静态观察：Node-side entry point is intentionally empty。已回读src/index.mjs及package.json：Node入口为空apply，dsh.client.platform为web。该观察不覆盖浏览器能力、依赖或宿主安全。","确认静态观察：Preview rendering uses textContent rather than HTML insertion。已回读preview.textContent赋值，仅确认此处不把预览文本作为HTML解释；不扩大为整个插件无XSS或运行安全保证。"],"report_md":"# 固定源码静态复核（维护者已确认发布）\n\n**存在风险／谨慎用；不是安装、运行、依赖漏洞或未来版本的安全认证。**\n\n- 仓库：vlln/dsh-navbar\n- 固定提交：`e53adfc8c837ebcb4b6a52c2c4baf7cb6e8b795e`\n- 源码快照 SHA256：`e7e58e2e0fb3c7741f690b5306c38d19ed109a6d6a24614fc801ad6daec41dc0`\n- 确认者：MyDSH维护者（Codex辅助，非独立人工审计）\n- 确认时间：2026-10-21T08:41:12.022310+00:00\n\n## 维护者说明\n\n此版本提供浏览器对话导航与精选功能。源码可确认精选摘要在localStorage持久化、存在定时轮询和DOM观察，以及依赖宿主行为的滚动实现。请谨慎处理敏感会话，并在目标DSH版本验证性能与卸载行为；尚无本轮运行测试或完整安全认证。\n\n重新读取匿名证明公开的固定提交，校验13个文本文件与候选快照一致，并逐项回读5项观察引用及上下文。此次确认只允许发布限定作用域的静态观察，不批准安全放行，不进行封禁，未安装或执行插件，也未检验依赖漏洞与发行包。\n\n## 逐项复核\n\n### Conversation text is persisted in browser localStorage\n\n确认静态观察：已回读pinStore.toggle与pinRowText：精选时持久化消息标识和最多160字符的用户文本摘要；同源脚本可读。取消精选会移除该项，但未据此推断全局到期、加密或会话删除联动；这不是发现外传或恶意代码。\n\n来源：src/client/index.ts；片段 359；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n            localStorage.setItem(this.key(sessionId), JSON.stringify(pins))\n\n来源：src/client/index.ts；片段 354；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n          toggle(sessionId: string, messageId: string, text: string, turn?: number): boolean {\n\n### Broad DOM observation and recurring polling may affect page performance\n\n确认静态观察：已确认body subtree MutationObserver和200ms tick；同时源码存在过滤、rAF合并及unload清理。这里只确认机制和需验证的开销，不声称已测出性能故障或泄漏。\n\n来源：src/client/index.ts；片段 479；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n        const navTickId = window.setInterval(tick, 200)\n\n来源：src/client/index.ts；片段 756；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n        observer.observe(body, { childList: true, subtree: true })\n\n### Synthetic wheel dispatch and direct scroll mutation depend on host behavior\n\n确认静态观察：已确认合成wheel和直接scrollTop写入，是导航兼容机制。作者注释描述了兼容目的，但不能替代各DSH版本实测；不据此判恶意。\n\n来源：src/client/index.ts；片段 603；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n        const jumpToRow = (row: HTMLElement): void =&gt; {\n\n来源：src/client/index.ts；片段 606；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n          scroller.dispatchEvent(new WheelEvent(&#x27;wheel&#x27;, {\n\n### Node-side entry point is intentionally empty\n\n确认静态观察：已回读src/index.mjs及package.json：Node入口为空apply，dsh.client.platform为web。该观察不覆盖浏览器能力、依赖或宿主安全。\n\n来源：src/index.mjs；片段 2；文件 SHA256 `bae529ab143ded70d6c43ec8ed61c7686a3d2a5475f6a8a9f1dc9cf559d83f88`\n\n    export default function apply() {}\n\n来源：package.json；片段 32；文件 SHA256 `7a40617bdad277486b3500ac4431c2b74e9c27d665b5760fa20c3e20cfd37bc2`\n\n          &quot;platform&quot;: &quot;web&quot;\n\n### Preview rendering uses textContent rather than HTML insertion\n\n确认静态观察：已回读preview.textContent赋值，仅确认此处不把预览文本作为HTML解释；不扩大为整个插件无XSS或运行安全保证。\n\n来源：src/client/index.ts；片段 393；文件 SHA256 `e9a3dc60e100bb4364c81ac07116e30a57000237c9a6217333a6639f8a97ca74`\n\n          preview.textContent = text\n\n## 覆盖范围与限制\n\n仅检查已绑定提交。图片、敏感材料、二进制、子模块等未覆盖项逐项保留；未执行插件、未测试发行包或依赖漏洞。\n\n    {&quot;total_blobs&quot;: 14, &quot;reviewed_text_files&quot;: 13, &quot;reviewed_text_bytes&quot;: 120059, &quot;unreviewed&quot;: [{&quot;path&quot;: &quot;docs/preview/navbar.png&quot;, &quot;reason&quot;: &quot;binary_not_interpreted&quot;, &quot;sha&quot;: &quot;dc712de6d4ea942505dd5f30b35e524e669227cb&quot;}], &quot;all_regular_text_covered&quot;: false}\n\n- This is a fixed-commit static-source review only; no code was executed and no runtime behavior, compatibility, or performance testing was performed.\n- The supplied coverage metadata marks the preview image as unreviewed binary content, and states that all regular text was not fully covered.\n- Dependency versions and lockfile entries were observed but not subjected to advisory, provenance, or vulnerability analysis.\n- The review does not assess future commits, published package contents beyond the supplied snapshot, release infrastructure, or behavior of the host DSH runtime.\n- Repository documentation and comments were treated as untrusted data and were not used as evidence of runtime safety.","maintainer_decision":{"full_name":"vlln/dsh-navbar","source_commit":"e53adfc8c837ebcb4b6a52c2c4baf7cb6e8b795e","snapshot_sha256":"e7e58e2e0fb3c7741f690b5306c38d19ed109a6d6a24614fc801ad6daec41dc0","candidate_sha256":"c26ed74256669dc090cd414bfa6436b0a44faf5e4d6aca5652fec858cb480c84","reviewer":"MyDSH维护者（Codex辅助，非独立人工审计）","reviewed_at":"2026-10-21T08:41:12.022310+00:00","rationale":"重新读取匿名证明公开的固定提交，校验13个文本文件与候选快照一致，并逐项回读5项观察引用及上下文。此次确认只允许发布限定作用域的静态观察，不批准安全放行，不进行封禁，未安装或执行插件，也未检验依赖漏洞与发行包。","public_summary":"此版本提供浏览器对话导航与精选功能。源码可确认精选摘要在localStorage持久化、存在定时轮询和DOM观察，以及依赖宿主行为的滚动实现。请谨慎处理敏感会话，并在目标DSH版本验证性能与卸载行为；尚无本轮运行测试或完整安全认证。","finding_decisions":[{"index":0,"disposition":"confirmed","rationale":"已回读pinStore.toggle与pinRowText：精选时持久化消息标识和最多160字符的用户文本摘要；同源脚本可读。取消精选会移除该项，但未据此推断全局到期、加密或会话删除联动；这不是发现外传或恶意代码。"},{"index":1,"disposition":"confirmed","rationale":"已确认body subtree MutationObserver和200ms tick；同时源码存在过滤、rAF合并及unload清理。这里只确认机制和需验证的开销，不声称已测出性能故障或泄漏。"},{"index":2,"disposition":"confirmed","rationale":"已确认合成wheel和直接scrollTop写入，是导航兼容机制。作者注释描述了兼容目的，但不能替代各DSH版本实测；不据此判恶意。"},{"index":3,"disposition":"confirmed","rationale":"已回读src/index.mjs及package.json：Node入口为空apply，dsh.client.platform为web。该观察不覆盖浏览器能力、依赖或宿主安全。"},{"index":4,"disposition":"confirmed","rationale":"已回读preview.textContent赋值，仅确认此处不把预览文本作为HTML解释；不扩大为整个插件无XSS或运行安全保证。"}],"scope_acknowledged":true},"candidate_sha256":"c26ed74256669dc090cd414bfa6436b0a44faf5e4d6aca5652fec858cb480c84","runtime_verified":false,"install_verified":false,"automatic_block":false,"score_type":"safety"},{"full_name":"omdsh-dev/dsh-genui","verdict":"通过","user_advice":"放心用","branch":"main","updated_at":"2026-08-14T00:00:00Z","summary":"未发现后门、凭据窃取或运行时外发，安装产生的目录写入公开且受控。","details":["代码执行：package.json 没有 preinstall、install、postinstall 生命周期命令；prepack 仅用于发布前构建。install.sh 会调用 git ls-remote、dsh plugin add、mkdir、cp、mv，但不存在 eval、child_process、curl|sh 或下载后直接执行远程脚本。风险低。","数据外发：运行时代码未设置第三方遥测或固定外发域名；Mermaid、Three.js 从插件注册的同源 /plugins/@omdsh-dev/dsh-genui/assets 路径加载。组件允许用户主动点击 http(s)/mailto 链接，交互字段会按功能设计回传当前会话模型，但不会后台发送到未知服务。风险低。","敏感读取：未发现读取 ~/.ssh、DSH 凭据文件、Codex 配置或环境 token 的运行时代码。安装器仅检查 profile/package.json、解析已安装包路径并复制公开 SKILL.md；DEEPSEEK_API_KEY 只出现在开发者 E2E 测试说明中。风险低。","依赖风险：运行时直接依赖仅 React，其他为 DSH/Cordis 对等依赖；Mermaid 与 Three.js 在构建阶段打包为本地静态资产。pnpm-lock.yaml 未发现 git+ 非固定依赖，仓库保留 TypeScript 源码、测试和打包校验脚本。主要剩余风险是大型第三方构建产物不便人工逐行审阅。","混淆与后门：src 目录为可读 TypeScript；数学表达式使用自建白名单解析器而非 eval/new Function；Mermaid 输出在写入 innerHTML 前执行脚本、事件属性和 javascript: 检查。lib 中的压缩代码属于可追溯构建产物，未发现 base64 载荷、反向连接或隐藏执行链。风险低。","权限边界：安装会通过官方 dsh 命令修改指定 profile，并向 ~/.dsh/skills/genui、~/.agents/skills/genui 写入技能文件；脚本限制 profile 名称、拒绝符号链接路径并备份旧文件。运行时仅注册系统提示、工具、UI 插槽和本地资产路由，不写系统文件、不请求 sudo。风险低。"],"report_md":"## 安全评分\n\n**82/100 · 安全性较高**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 安全报告标准，从代码执行、数据外发、敏感读取、依赖风险、混淆或后门、权限越界六个维度检查 `omdsh-dev/dsh-genui`。综合结论为：**没有发现恶意代码、凭据窃取、后台遥测、远程命令执行或隐蔽持久化行为，普通 DSH 用户可以放心使用。** 安全评分为 **82/100**，安全性较高。需要用户知晓的主要行为是：安装器会通过官方 `dsh plugin add` 修改选定 profile，并将插件自带的 `SKILL.md` 安装到 DSH 与 Agent 技能目录；交互式组件的数据会在用户触发 action 时返回当前会话模型。这些行为与插件功能一致，代码中有明确实现，不属于隐藏越权。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-genui`\n- 默认分支：`main`\n- 最新可见提交：`0e756efb7671e6b8413dde3d8e199c68fa89cbeb`\n- 最新提交日期：2026-08-14。当前 GitHub 审计页面只返回日级日期，因此字段 `updated_at` 以 `2026-08-14T00:00:00Z` 规范化记录；正式写入长期报告库前应再用仓库 API 复核秒级 `pushed_at`。\n- 当前 package.json 版本：`0.8.6`。\n- 仓库规模：GitHub 页面显示 93 次提交、3 个分支；顶层包括 `src/`、`lib/`、`scripts/`、`tests/`、`package.json`、`pnpm-lock.yaml` 和 `cordis.patch.yml`，属于中小型 TypeScript 插件，但包含体积较大的 Mermaid、Three.js 构建资产。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`scripts/install.sh`、`scripts/prepack.mjs`、插件 Node 入口和数学表达式执行逻辑。\n\n**发现：** package.json 不包含 `preinstall`、`install` 或 `postinstall`，安装依赖时不会自动运行仓库脚本。`prepack` 仅在发布包生成阶段运行 `node scripts/prepack.mjs`。安装器显式执行 `git ls-remote` 验证仓库、调用官方 `dsh plugin --profile ... add git+https://...` 安装插件，并使用 `mkdir/cp/mv` 部署技能文件；没有 `curl|sh`、`wget|bash`、`eval`、`new Function`、`child_process.exec` 或动态执行下载内容。数学曲线功能使用词法解析和白名单函数计算，而不是 JavaScript 求值。\n\n**证据：** `package.json:113-120`；`scripts/install.sh:24-70,72-129,150-191`；`src/client/safe-math.ts:17-140`。\n\n**风险程度：低。** 安装器确实执行本地命令，但命令固定、参数经过约束，且用途与安装流程一致。\n\n### 2. 数据外发\n\n**检查内容：** 网络请求、第三方域名、动态脚本、链接组件、交互 action 回传、CSS/SVG 外部资源注入。\n\n**发现：** 插件运行时未配置遥测、分析服务或固定第三方回传地址。Mermaid 和 Three.js 通过插件自身注册的同源路径 `/plugins/@omdsh-dev/dsh-genui/assets/*.js` 按需加载，不从 CDN 拉取。颜色字段只接受十六进制、rgb/hsl 和指定设计变量，阻止通过 CSS `url(...)` 自动请求攻击者地址；链接字段仅允许 http(s) 和 mailto，并以 `noopener noreferrer` 打开。交互组件的 action 会把字段值发送回当前 DSH 会话模型，这是核心功能而非隐蔽外发，因此不应在 GenUI 表单中填写密码、API Key 或恢复码。\n\n**证据：** `src/client/guard.ts:56-78`；`src/client/asset-loader.ts:9-42`；`src/plugin/index.ts:22-65`；`src/client/blocks/render-node.tsx` 的 link/action 分支。\n\n**风险程度：低。** 自动外发未发现；用户点击外链及主动提交表单属于可见行为。\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh` 凭据、环境变量 token、Cookie、浏览器存储和任意文件读取。\n\n**发现：** 未发现读取 SSH 私钥、DSH credentials、Codex 配置、Cookie 或环境 token 的运行时代码。Node 端唯一明确文件读取用于从插件自身 `lib/assets/` 目录提供经过文件名白名单验证的 JavaScript 资产。安装器会读取 profile 的 `package.json` 来判断包管理器，并使用 `require.resolve` 定位已安装插件，但不会读取凭据文件。开发 E2E 文档要求 `DEEPSEEK_API_KEY`，该变量只用于测试脚本，不在普通安装或运行时触发。\n\n**证据：** `src/plugin/index.ts:22-65`；`scripts/install.sh:72-129`；`README.md:149-156`。\n\n**风险程度：低。** 本地读取范围与插件资产和安装状态检查直接相关。\n\n### 4. 依赖风险\n\n**检查内容：** package.json、pnpm-lock.yaml、运行时与开发依赖、生命周期钩子、第三方构建资产。\n\n**发现：** 直接运行时依赖仅为 `react@^18.3.1`；其余主要是 DeepSeek Harness、Cordis 和 React 对等依赖。Mermaid 11.16.0、Three.js 0.180.x、Vite、Vitest、TypeScript 等用于构建或测试。锁文件未发现 `git+` 非固定依赖，依赖具有完整性锁定。发布包同时包含 `src` 与 `lib`，降低只发布不可读二进制构建物的供应链风险。需要注意的是 Mermaid 和 Three.js 的 IIFE 构建文件体积较大，人工逐行审计成本高，后续升级时仍应执行依赖漏洞扫描并核对构建产物。\n\n**证据：** `package.json:17-42,72-120`；`pnpm-lock.yaml`。\n\n**风险程度：低。** 未发现拼写投毒包、未知下载源或安装期依赖脚本链。\n\n### 5. 混淆与后门\n\n**检查内容：** base64 载荷、动态函数构造、加密字符串、反向连接、挖矿代码、压缩构建物与源码对应关系。\n\n**发现：** `src/` 为结构清晰的 TypeScript，组件白名单、资源限制、JSON 修复和渲染边界均有明确命名。数学表达式解析器没有调用 eval。Mermaid SVG 虽通过 React 的 `dangerouslySetInnerHTML` 写入 DOM，但此前执行 `assertSafeSvg`，拒绝 `<script`、事件处理属性和 `javascript:`。`lib/client.js`、`lib/assets/mermaid.js`、`lib/assets/three.js` 的压缩形式符合前端发布产物特征，仓库同时保留对应源文件和打包检查脚本，未发现隐藏载荷或后门特征。\n\n**证据：** `src/client/safe-math.ts`；`src/client/mermaid-safe.ts:1-15`；`src/client/asset-mermaid.ts`；`src/` 与 `lib/` 目录。\n\n**风险程度：低。** 大型第三方压缩资产增加审计成本，但没有恶意证据。\n\n### 6. 权限越界\n\n**检查内容：** profile 修改、技能目录写入、Web 路由、系统提示注入、工具注册、DOM 观察范围和提权操作。\n\n**发现：** `cordis.patch.yml` 只向 composition 插入 `@omdsh-dev/dsh-genui`。运行时注册 GenUI 系统提示、`render_ui`/`validate_dsh_ui` 工具、UI 插槽和插件资产路由；没有写系统配置或调用 sudo。兼容旧版 DSH 的 DOM fallback 会观察页面中的 fenced code block，并用 MutationObserver 处理流式内容，访问范围位于当前 DSH 页面。安装器会向 `~/.dsh/skills/genui` 和 `~/.agents/skills/genui` 写入 `SKILL.md`，但会验证 profile 参数、拒绝符号链接目标并备份旧文件。\n\n**证据：** `cordis.patch.yml:1-9`；`src/plugin/index.ts:72-110`；`src/client/dom-fence.tsx`；`scripts/install.sh:24-70,150-191`。\n\n**风险程度：低。** 权限使用与插件安装、渲染功能相符，未发现静默提权或越界访问。\n\n## 风险点汇总\n\n1. GenUI action 会将用户输入回传当前模型会话，用户不应在生成式表单中填写密码、Token 或恢复码。\n2. 插件允许模型生成可点击的 http(s) 外链；虽然不会自动请求，用户点击前仍应核对域名。\n3. 安装脚本会修改指定 DSH profile，并向两个技能目录写文件；这是公开行为，但自动化部署时应使用专用账号和最小权限目录。\n4. Mermaid、Three.js 为大型第三方构建资产，依赖升级后应重新执行锁文件审查、漏洞扫描和产物一致性验证。\n5. 当前审计通道仅取得 main 最新提交的日级日期，正式发布到报告库前应补取 GitHub API 的秒级 `pushed_at`；这不影响代码安全结论，但影响报告版本追踪精度。\n\n## 结论与使用建议\n\n**明确建议：放心用。** 当前 `main` 分支没有显示木马、后门、凭据窃取、未知遥测或远程命令执行行为。安装和运行权限与其 GenUI 插件定位一致，并实现了组件白名单、资源上限、链接协议限制、CSS 外部资源限制、同源资产加载、Mermaid SVG 二次检查和符号链接防护。建议生产环境优先固定到审计过的提交 SHA，而不是长期跟随可变的 `main`；升级版本后重新审查 install.sh、package.json、pnpm-lock.yaml 和生成的 lib/assets。由于秒级 pushed_at 尚需 API 复核，本报告的安全结论可以采用，但自动发布动作建议先进入一次元数据复核。\n","action":"release","reviewed_at":"2026-08-17T13:36:35.854691+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":82,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-notification","verdict":"通过","user_advice":"放心用","branch":"main","updated_at":"2026-08-13T00:00:00Z","summary":"未见数据外发、凭据窃取或运行时命令执行，可放心使用，但需注意通知内容隐私。","details":["代码执行：package.json 未配置 preinstall、install、postinstall 等安装钩子；运行时代码未调用 exec、spawn、eval、Function 或 curl|sh。build.mjs:1-12 使用 execFileSync 执行固定路径的本地 tsdown，仅发生于开发构建阶段，参数不来自用户输入，风险低。","数据外发：src/ 与生成后的 lib/client.js 未发现 fetch、axios、XMLHttpRequest、WebSocket、sendBeacon 或硬编码第三方域名。插件只通过浏览器 Notification API展示通知，并在用户点击时跳转到宿主生成的会话路径，未发现向外部服务器传输会话内容，风险低。","敏感读取：未发现读取 ~/.ssh、~/.dsh、系统钥匙串、环境变量、Cookie、API Token 或本地任意文件的代码。src/client/store.ts:29-32 仅通过 useStorage 保存插件开关和延迟设置，风险低。","依赖风险：唯一直接运行时依赖为锁文件固定的 zod 4.4.3；已公开的 Zod ReDoS 问题影响不高于 4.3.6 的版本，因此当前锁定版本不在该影响范围。风险点是 @cordisjs/core、@cordisjs/plugin-server、@dsh-ai/sdk 使用通配符 peerDependencies，建议改为经过验证的兼容版本范围。","混淆与后门：源代码为可读 TypeScript，构建脚本及发布文件结构清晰；未发现编码载荷、动态下载执行、远程模块加载、反调试、自修改、隐藏定时任务或条件触发后门。lib/ 为正常构建产物并带 source map，风险低。","权限越界：服务端监听 DSH session 事件并扩展数据库模型，用于保存最后回复摘要、工具名称和更新时间；客户端申请系统通知权限并显示最多约 320 字的回复摘要。能力与插件功能相符，未获得 shell、文件系统或外部网络权限，但系统锁屏通知可能暴露对话摘要。"],"report_md":"## 安全评分\n\n**82/100 · 安全性较高**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 社区插件安全分析报告\n\n## 概述\n\n本报告依据《MyDSH 安全报告标准》，对 `omdsh-dev/dsh-notification` 的源代码、发布构建产物、依赖声明、构建脚本和插件配置进行了六维度静态安全审查。审查未发现凭据窃取、隐蔽数据外发、运行时命令执行、动态载荷下载、代码混淆或后门行为。插件的主要行为是监听 DSH 会话更新，将最新回复投影到客户端，并通过浏览器系统通知提醒用户。安全评分为 **82/100**，安全性较高，结论为 **通过，可以放心使用**。\n\n需要明确说明的是：该插件会把回复摘要交给操作系统通知中心。在共享电脑、锁屏预览开启或屏幕可能被他人看到的环境中，对话内容可能通过通知横幅暴露。这属于功能本身带来的隐私边界，而不是发现了恶意外发行为。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-notification`\n- 评估分支：`main`\n- 基准提交：`3e33100f51f25f24cece20bfd3d50cfbde0cbca5`\n- 最后更新日：2026-08-13；`updated_at` 字段以 UTC 日期归一为 `2026-08-13T00:00:00Z`\n- 仓库规模：根目录可见 3 个目录、12 个文件；`src/` 包含服务端入口、数据投影及 9 个客户端模块；`lib/` 为构建后的 JavaScript、类型声明和 source map；`tests/` 包含不变量测试。最新提交链显示 `main` 为当前评估分支。\n- 重点文件：`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml`、`build.mjs`、`src/index.ts`、`src/projection.ts`、`src/invariant.ts`、`src/client/*`、`lib/*`、`tests/invariant.spec.ts`\n\n## 逐维度分析\n\n### 1. 代码执行能力\n\n**检查内容：** 检查安装脚本、构建脚本、服务端和客户端代码中是否存在 `exec`、`spawn`、`eval`、动态 `Function`、`curl | sh`、远程脚本执行以及 `preinstall/install/postinstall`。\n\n**发现：** `package.json:6-9` 仅声明 `build`、`typecheck` 和 `test`，没有任何安装生命周期脚本。运行时的 `src/` 和 `lib/` 未发现子进程调用、动态代码执行或脚本下载。`build.mjs:1-2,10-12` 确实导入并调用 `execFileSync`，但执行目标固定为项目本地的 `node_modules/.bin/tsdown`，参数为静态构建入口，不接收用户数据、环境输入或网络内容；这属于开发构建工具，不会在插件安装或正常运行时自动执行。\n\n**证据：** `package.json:6-9`；`build.mjs:10-12` 的固定 `tsdown` 调用；`build.mjs:31-42,49-56` 仅进行 source map 路径重写和文件整理。\n\n**风险程度：低。** 未形成可被外部输入利用的命令执行链。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** 检查 `fetch`、Axios、XMLHttpRequest、WebSocket、Beacon、图片追踪、外部 URL、Webhook 和 DNS/API 地址。\n\n**发现：** 源代码及客户端构建产物中未发现主动网络请求实现，也未发现硬编码第三方域名。`src/client/index.ts:69-81` 使用浏览器原生 `Notification` 创建系统通知，通知标题固定为“DSH 回复”，正文为本地收到的 `session.content`。`src/client/index.ts:83-90` 在用户点击通知后执行 `window.location.href = session.path`，该路径来自 DSH 宿主的 session inspect 结果，不是插件内配置的第三方地址。\n\n**证据：** `src/client/index.ts:69-90`；`src/client/runner.ts:35-56`；`src/contract.ts:14-26`。未发现 `fetch(`、`XMLHttpRequest`、`WebSocket`、`sendBeacon` 或外部域名常量。\n\n**风险程度：低。** 没有发现会话、设备或身份数据被发送到第三方服务器。\n\n### 3. 敏感信息读取\n\n**检查内容：** 检查是否访问 `~/.ssh`、`~/.dsh`、云服务凭据、环境变量 Token、Cookie、浏览器存储中的认证信息、系统钥匙串或任意本地文件。\n\n**发现：** 代码未导入 `fs`、`os`、`path` 等用于运行时读取用户目录的模块，未读取 `process.env`，也没有 SSH、DSH 凭据目录、Token 或 Cookie 相关逻辑。`src/client/store.ts:29-32` 使用 `useStorage(\"dsh-notification-store-v1\")` 保存通知开关、聚合延迟和完成延迟等插件设置，没有存储认证信息。\n\n服务端会处理会话事件。`src/projection.ts:47-60` 从 DSH 会话中提取 assistant 回复内容和工具名称，`src/projection.ts:26-37` 对文本执行规范化、控制字符过滤和长度截断，默认最大长度由 `src/index.ts:26` 设置为 320 字符。随后投影数据写入插件扩展的 session 字段。这意味着回复摘要会在 DSH 数据库中形成额外投影副本，但没有发现其被发送到外部。\n\n**证据：** `src/client/store.ts:29-32`；`src/projection.ts:26-37,47-60,98-112`；`src/index.ts:12-16,25-37`。\n\n**风险程度：低。** 不读取用户凭据；主要注意点是回复摘要的本地持久化和通知展示。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** 检查直接依赖、开发依赖、peerDependencies、锁文件、安装钩子以及当前已公开漏洞。\n\n**发现：** 直接运行时依赖只有 `zod`，当前 `pnpm-lock.yaml` 将其解析为 `4.4.3`。公开披露的 Zod 正则表达式拒绝服务问题影响 `<=4.3.6`，因此当前锁定版本不处于该受影响区间。 构建依赖包括 TypeScript、tsdown、Vitest、jsdom 等，均不通过插件运行时主动加载。\n\n主要供应链弱点是 `package.json:39-43` 对 `@cordisjs/core`、`@cordisjs/plugin-server` 和 `@dsh-ai/sdk` 使用 `*` 作为 peerDependency 范围。peerDependency 本身不会自动把任意版本打包进插件，但无上限范围会削弱兼容性约束，也不利于安装环境审计。仓库存在 `pnpm-lock.yaml`，有助于维护者复现构建，但建议补充 `packageManager` 字段并把 peer 范围收窄到实际验证过的主版本。\n\n**证据：** `package.json:22-43`；`pnpm-lock.yaml` 中 `zod@4.4.3`、`esbuild@0.25.12` 等锁定记录；未发现安装脚本。\n\n**风险程度：低。** 当前直接依赖未命中已确认影响版本，但版本范围治理仍可改进。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** 检查 Base64/十六进制载荷、动态解密、压缩混淆、远程模块加载、异常定时任务、环境条件触发、自修改代码及源代码与发布产物差异。\n\n**发现：** `src/` 为结构清晰的 TypeScript，模块职责包括协议定义、数据投影、通知调度、状态存储和界面组件。未发现 `eval`、动态 `Function`、远程 import、加密字符串表、解码后执行或反调试逻辑。`lib/` 是由 `build.mjs` 生成的 JavaScript、类型声明和 source map；构建脚本会重写 source map 中的绝对路径，未插入额外业务代码。客户端图标或编译资源中的编码内容属于静态界面资源，没有被执行。\n\n**证据：** `build.mjs:14-27,31-56`；`src/client/icon.ts`；`lib/client.js`；`lib/index.js`。仓库提交历史中的 `.DS_Store` 删除属于正常清理。\n\n**风险程度：低。** 没有发现隐藏控制通道或恶意载荷。\n\n### 6. 权限越界\n\n**检查内容：** 检查插件是否申请或使用超出通知功能所需的数据库、会话、浏览器、文件系统、网络和系统权限。\n\n**发现：** `src/index.ts:12-16` 声明依赖 `server` 和 `database`，随后扩展 session 模型以保存回复摘要、工具名称、更新时间和状态。`src/index.ts:34-37` 注册 `ctx.on(\"session\")`，因此插件能够观察宿主交给它的会话事件。`src/client/runner.ts:35-56` 会排除用户角色、命令请求和被忽略的更新，再决定是否通知。客户端仅申请浏览器通知权限，没有 shell、文件系统或外部网络权限。\n\n该权限范围与“在 AI 回复或工具运行完成后通知用户”的产品目标一致。不过通知正文包含回复摘要，操作系统可能在锁屏、通知中心或共享屏幕中展示它。对于包含商业秘密、个人隐私或密钥文本的会话，应在系统设置中关闭锁屏通知预览。\n\n**证据：** `src/index.ts:12-16,25-37`；`src/projection.ts:47-60,98-112`；`src/client/index.ts:69-90`；`src/client/runner.ts:35-56`。\n\n**风险程度：低。** 权限与功能匹配，没有发现越权访问系统资源，但存在用户可控的通知隐私风险。\n\n## 风险点汇总\n\n1. **系统通知可能展示对话摘要。** 默认通知正文使用最近回复内容，在锁屏或共享屏幕环境中可能被旁观者看到。这是本次审查最主要的实际用户风险。\n2. **回复投影会形成额外的本地数据库字段。** 插件默认保存经过清洗和截断的回复摘要及工具名称；没有外发证据，但高敏感场景应了解这一数据生命周期。\n3. **Peer dependency 使用通配符。** 不构成当前恶意行为，但会扩大未来兼容性和供应链变化范围。\n4. **通知跳转路径缺少显式同源校验。** 当前路径来自可信的 DSH session inspect；从纵深防御角度，建议客户端只接受站内相对路径或明确验证 URL 同源。\n\n## 结论与使用建议\n\n**最终结论：通过。用户可以放心使用。**\n\n本次审查没有发现插件执行系统命令、下载远程脚本、读取 SSH/DSH 凭据、收集环境 Token、连接第三方域名或植入隐藏后门。插件实现与其通知用途一致，整体代码量较小、结构清晰、可审计性良好。\n\n普通个人设备和可信办公设备可以直接安装使用。若 DSH 会话经常包含客户资料、私有源码、访问密钥或其他机密信息，建议在操作系统中关闭锁屏通知内容预览。维护者后续宜增加“隐藏通知正文”选项、对通知跳转地址执行同源限制、收窄 peerDependency 版本范围，并在持续集成中加入依赖审计和源码到发布产物的一致性检查。\n","action":"release","reviewed_at":"2026-08-17T14:04:31.878860+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":82,"score_type":"safety","review_status":"complete"},{"full_name":"Ayase34/gal-view","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T00:00:49Z","summary":"可见运行时代码未见恶意，但构建链与更新时间未完成核验，暂不放行。","details":["代码执行：package.json 只有 build、smoke、ci 等开发命令，未声明 preinstall、install、postinstall、prepare 等安装生命周期脚本；插件入口仅导入 CSS 并调用 ctx.ui.register，未发现 exec、eval、Function、child_process 或 curl|sh。由于 scripts/build-client.mjs 和 scripts/smoke.mjs 正文未成功取得，本维度仍有审计缺口。","数据外发：已检查的插件入口、客户端入口、GalView、store、transcript 和默认场景中未发现 fetch、XMLHttpRequest、WebSocket、sendBeacon 或硬编码第三方域名；默认 gal-scene.json 也未匹配到 http。资源和场景主要写入 localStorage、IndexedDB 与 Blob Object URL，属于本地持久化。([]())","敏感读取：未发现读取 ~/.ssh、~/.dsh、process.env、API token、Cookie 或系统钥匙串的代码。不过插件会通过 config.main.readStore(sessionId) 和 findById(sessionId) 读取当前 DSH 会话节点，涉及用户、助手、上下文、命令、错误和压缩摘要等内容；工具调用与工具结果节点会被过滤。该权限符合会话可视化用途，但不应在含有密钥的会话中无条件启用。","依赖风险：package.json 没有生产 dependencies，只有 esbuild 与 jsdom 两个 devDependencies，并提交了 pnpm-lock.yaml。普通插件消费者不会安装依赖项自身的 devDependencies，但克隆仓库执行 pnpm install 时仍会进入第三方依赖安装链；本次未完成 lockfile 完整性和实时 CVE 核验。","混淆与后门：可见代码为可读的 ESM、JSX 和 CSS，模块职责清晰；未发现 Base64 解码后执行、动态远程 import、加密字符串表、自修改代码、反调试或隐藏定时任务。1.72 MB 的 gal-scene.json 属于场景数据，未发现其中包含外部 HTTP 地址。([]())","权限越界：服务端插件入口只注册前端面板，没有申请文件系统、Shell、网络或系统级权限。客户端会创建挂载到 document.body 的界面、读取当前会话、隐藏宿主输入区，并将编辑状态写入浏览器本地存储；这些操作属于功能所需，但形成了宿主 UI 和会话数据访问边界。","评估对象确认：GitHub 页面显示当前默认分支为 main、仓库有 13 次提交；但指定的 GitHub Repository API 在本次审查环境中未返回可解析数据，因此无法诚实填写该分支 pushed_at。该项是正式发布审查的阻断条件，不能用抓取时间或文件时间代替。"],"report_md":"## 安全评分\n\n**80/100 · 安全性较高**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维安全检查标准，对 `Ayase34/gal-view` 的仓库结构、插件入口、前端运行时代码、场景与本地存储逻辑进行了静态审查。当前可见源码中**没有发现恶意代码、主动数据外发、系统命令执行、凭据窃取或隐蔽后门的直接证据**。不过，本次未能取得 GitHub API 中的 `pushed_at`，同时 `scripts/build-client.mjs`、`scripts/smoke.mjs` 和完整 lockfile 内容未能成功读取，因此尚不能形成覆盖供应链与构建链的最终放行结论。\n\n综合结论是：**可以在非敏感测试环境谨慎试用，但暂不建议直接进入 MyDSH 官方发布或组织级可信插件列表。**\n\n## 评估对象\n\n- 仓库：`Ayase34/gal-view`\n- 评估分支：`main`\n- 分支最后更新时间：**未确认**。已按要求访问仓库 API，但当前审查环境未获得可解析响应，故没有使用推测日期填充 `updated_at`。\n- 仓库规模：GitHub 页面显示 13 次提交；根目录包含 `.dsh-plugin`、`.github`、`scripts` 三个目录以及 LICENSE、README、package.json、pnpm-lock.yaml 等文件。`.dsh-plugin/client` 包含 14 个前端源文件；默认场景文件约 1.72 MB，生成 CSS 约 59 KB。\n- 插件配置：`cordis.patch.yml:1-2` 仅声明插件依赖为 required，并设置默认启用。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`.dsh-plugin/index.mjs`、客户端入口及可见客户端源码，并搜索安装生命周期、Shell 调用、动态代码执行和远程加载行为。\n\n**发现：** `package.json:5-11` 仅定义 `build`、`smoke`、`test`、`ci` 命令，没有 `preinstall`、`install`、`postinstall` 或 `prepare`。`.dsh-plugin/index.mjs:1-25` 只导入样式并使用 `ctx.ui.register()` 注册 GalView 页面，没有 Node.js 文件系统、进程或子进程调用。可见运行时代码中也未发现 `eval`、`new Function`、`child_process`、`exec`、`spawn` 或 `curl|sh`。\n\n**审计缺口：** package.json 会调用 `scripts/build-client.mjs` 和 `scripts/smoke.mjs`，但这两个文件正文未成功获取，不能排除其中存在仅在开发或 CI 阶段触发的命令执行逻辑。\n\n**风险程度：低，但构建链未闭环。**\n\n### 2. 数据外发\n\n**检查内容：** 第三方域名、HTTP 请求、WebSocket、Beacon、远程脚本、图片和字体资源引用，以及场景导入后的资源解析方式。\n\n**发现：** 已检查文件中没有发现 `fetch`、`XMLHttpRequest`、`WebSocket`、`sendBeacon` 或硬编码第三方域名。默认 `gal-scene.json` 未匹配到 `http`。资源数据主要使用 IndexedDB 数据库 `galview-assets`、对象仓库 `blobs` 和 Blob Object URL；场景编辑状态则保存在 localStorage。([]())\n\n这意味着当前默认配置下没有主动把会话、场景或资源发送到外部服务器的证据。若用户导入含远程媒体地址的自定义场景，浏览器仍可能按正常网页行为加载该资源，建议 MyDSH 在导入层增加协议和域名校验。\n\n**风险程度：低。**\n\n### 3. 敏感信息读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、Cookie、Token、浏览器凭据、宿主会话数据和工具执行结果。\n\n**发现：** 未发现 `fs`、`os.homedir()`、`process.env`、Cookie、钥匙串或固定凭据文件路径。插件不会直接读取 SSH 密钥或系统环境 Token。\n\n但是，`GalView.jsx` 中存在 `config.main.readStore(sessionId)` 和 `config.main.findById(sessionId)`，说明插件能够读取当前 DSH 会话。`transcript.mjs` 会处理 user、assistant、context、command、error、compaction 等节点，同时通过 `shouldExcludeNode()` 排除 `tool` 与 `tool_result`。\n\n该行为属于会话转视觉小说的核心功能，不构成后门；但会话文本可能包含用户粘贴的密码、Token 或内部资料，且处理后的内容可能继续保存在 localStorage 或 IndexedDB。因此不建议在包含真实生产凭据的会话中使用。\n\n**风险程度：低到中，主要是宿主会话隐私边界。**\n\n### 4. 依赖风险\n\n**检查内容：** 生产依赖、开发依赖、版本约束、锁文件和安装阶段供应链。\n\n**发现：** `package.json:20-23` 只有 `esbuild ^0.27.4` 和 `jsdom ^28.1.0` 两个 devDependencies，没有生产 dependencies；仓库提交了约 42.8 KB 的 `pnpm-lock.yaml`。\n\n这降低了插件用户侧的依赖攻击面，但仓库开发者执行 `pnpm install` 时仍会信任第三方包及其安装逻辑。由于本次没有完整读取 lockfile，也没有获得可验证的实时漏洞数据库结果，不能宣称依赖不存在已知 CVE。\n\n**风险程度：低；正式发布前必须补做锁文件完整性、许可证和漏洞扫描。**\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩或混淆代码、Base64 解码执行、动态 import、加密载荷、远程配置、自删除、自修改、反调试和隐藏定时任务。\n\n**发现：** 可见代码为结构清晰的 ESM/JSX 模块，按场景、资源、字体、存储、分页、吸附和逐字显示拆分。未发现解码后执行、动态远程模块、字符串表解密、反调试或隐藏控制通道。大体积 `gal-scene.json` 是声明式场景数据，不是可执行文件，且未发现 HTTP 地址。([]())\n\n**风险程度：低。**\n\n### 6. 权限越界\n\n**检查内容：** 插件上下文权限、宿主 DOM、会话读取、文件导入导出、浏览器持久化、系统接口和跨边界操作。\n\n**发现：** 服务端入口只调用 `ctx.ui.register()`。客户端会把 GalView Portal 挂载到 `document.body`，查询并隐藏 `.dsh-chat__composer-seat`，读取当前会话并允许导入、导出场景。这些能力会影响宿主界面并接触完整会话内容，但没有发现文件系统、Shell、网络或操作系统级权限。\n\n风险主要是 UI 隔离与数据最小化不足，而不是系统权限提升。建议在插件启用时明确提示读取范围，并提供清除本地场景、资源和缓存的入口。\n\n**风险程度：低到中。**\n\n## 风险点汇总\n\n1. GitHub API 的 `pushed_at` 未核实，无法确认审查代码是否对应仓库最新推送状态。\n2. `scripts/build-client.mjs`、`scripts/smoke.mjs` 正文未完成审查，构建与 CI 执行链存在覆盖缺口。\n3. 插件会读取当前 DSH 会话的大部分文本节点，并把加工后的场景状态持久化到浏览器本地存储。\n4. lockfile 未完成逐项完整性、安装脚本、许可证和实时 CVE 检查。\n5. 自定义场景导入建议限制远程 URL、危险协议和超大资源，避免被恶意场景用作跟踪或拒绝服务载荷。\n\n## 结论与使用建议\n\n当前可见的 `main` 分支运行时代码设计透明，功能与“把会话转换为视觉小说场景”的产品目的基本一致，未发现恶意数据外发、凭据窃取、远程命令执行或后门证据。因此它**不像恶意插件**。\n\n但安全审计不能把“没有看到”表述成“已经排除”。由于仓库更新时间、构建脚本和完整依赖锁尚未闭环，本报告不给出正式放行。普通用户如需体验，应选择不包含账号密码、API Key、客户隐私或公司源码的会话，并使用独立浏览器资料或测试账号；MyDSH 发布方应在补齐 API 元数据、scripts 审查、lockfile 审计和实际安装烟雾测试后，再把 action 从 `review` 调整为 `release`。\n\n**最终建议：谨慎用；可以测试，不建议当前直接作为已完全可信的生产插件发布。**\n","action":"review","reviewed_at":"2026-08-17T13:55:23.545980+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":80,"score_type":"safety","review_status":"complete"},{"full_name":"bowenliang123/dsh-context","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T00:00:00Z","summary":"源码未见恶意，但安装产物与精确更新时间未完全核验，建议复核后使用","details":["代码执行：package.json:20-32 仅发布 lib、补丁、说明和许可证；没有 preinstall、install、postinstall，build 和 release 均为维护者手动命令。prepare: husky 会在源码开发或 Git 依赖场景配置钩子，但 scripts 与 .husky 不在发布文件白名单内。运行时入口 src/host/index.ts:20-37 仅注册会话投影，没有 exec、eval、child_process 或 curl|sh。风险低。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))","数据外发：src/host/timeline.ts:1-17、98-124 和 src/client/index.ts:1-20 表明数据通过 DSH 自带 session/projection 推送链路送达浏览器，无自定义 RPC、轮询或第三方上传。src/host/pricing.ts:76-84 会生成最多 80 字符的消息预览，因此 DSH Web 页面本身属于敏感信息展示面。风险低至中。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/timeline.ts))","敏感读取：核心代码处理 DSH 持久会话事件、系统提示词长度、工具模式、模型、供应商、用户及助手消息摘要，但未发现读取 ~/.ssh、~/.dsh、环境变量、API Token 或任意本地文件的逻辑。工具结果只记录工具名、错误状态和 Token 数，不把完整结果正文写入展示节点。风险低。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/fold.ts))","依赖风险：唯一生产依赖为 zod ^4.4.3；公开漏洞库显示 4.4.3 当前无已知直接安全问题，已披露的 CVE-2026-6991 描述范围截至 4.3.6。esbuild ^0.28.2 属开发依赖，已高于 Windows 任意文件读取漏洞的修复版本 0.28.1。风险低。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))","混淆与后门：已审查运行时代码为可读 TypeScript，包含明确数据结构、严格 Zod Schema 和有界历史裁剪，未见压缩字符串、Base64 载荷、动态 Function、eval、远程脚本加载或隐藏控制流。但仓库未提交 package.json 指向的 lib/index.js、lib/client.js，无法仅凭 GitHub 源码确认 npm 实际安装产物与源码完全一致。风险中等，属于供应链可验证性问题。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))","权限越界：Host 入口只声明 sessionProjections 服务并注册 contextTimeline；Client 入口主要注入 slots、locale，cordis.patch.yml:7-10 只把 dsh-context 插入插件加载列表，没有申请 Shell、文件系统、凭据或系统管理权限。插件权限与上下文可视化功能基本匹配。风险低。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/index.ts))"],"report_md":"## 安全评分\n\n**74/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查对象为 GitHub 公共仓库 `bowenliang123/dsh-context` 的默认分支 `main`。从可访问的运行时源码看，该项目是一个 DeepSeek Harness 上下文可视化插件：Host 侧折叠会话事件并生成有界投影，Client 侧把投影渲染为 Context 面板和 `/context` 弹窗。审查未发现命令执行、凭据窃取、第三方数据上传、动态下载执行、混淆载荷或明显后门行为。\n\n本报告暂不判定其为恶意插件，但也不建议在没有核对 npm 安装产物的情况下直接无条件信任。原因是仓库没有提交实际被用户执行的 `lib/index.js` 和 `lib/client.js`，而 package.json 明确只发布 `lib` 等生成产物。因此，GitHub 源码安全并不能单独证明 npm 包内容与源码完全一致。综合评分为 **26/100，存在需要人工复核的供应链风险**。\n\n## 评估对象\n\n- 仓库：`bowenliang123/dsh-context`\n- 默认分支：`main`\n- 当前源码包版本：`0.11.2`\n- GitHub 页面显示分支最后更新日期：2026-08-16\n- 仓库规模：GitHub 页面显示 111 次提交，根目录包含 `.github`、`.husky`、`docs`、`scripts`、`src`、`tests` 及锁文件；项目主要运行时代码位于 `src/host`、`src/client`、`src/shared`。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))\n\n审查环境未能从 GitHub REST 仓库端点取得可用的精确 `pushed_at` 响应，因此本报告 JSON 中的 `2026-08-16T00:00:00Z` 是根据 GitHub 分支页面日期归一化的 ISO 时间下限，**不是已确认到秒的 API pushed_at**。正式发布报告前应再次调用仓库 API 补齐精确时间，这是本次报告的明确证据限制。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、Host/Client 入口、`cordis.patch.yml`、安装与发布脚本声明。\n\n**发现：** package.json 没有 `preinstall`、`install`、`postinstall`；`build` 调用本地构建脚本，`release` 调用维护者发布脚本，均不是普通用户安装时自动触发的生命周期。存在 `prepare: husky`，但发布白名单只包括 `lib`、`cordis.patch.yml`、README 和 LICENSE，未包含 `scripts` 与 `.husky`。Host 入口仅调用 `ctx.sessionProjections.register(...)`。\n\n**证据：** `package.json:20-32`；`src/host/index.ts:20-37`；`cordis.patch.yml:7-10`。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))\n\n**风险程度：低。** 未发现 `exec`、`spawn`、`eval`、动态 `Function`、`curl | sh` 或安装期远程执行路径。\n\n### 2. 数据外发\n\n**检查内容：** Host 数据通路、Client 加载入口、服务契约及浏览器投影数据结构。\n\n**发现：** 插件通过 Harness 自带的 `sessionProjections` 和 `session/projection` 推送链路将结果发送到当前 DSH 浏览器界面。源码明确说明没有自定义 RPC、轮询或客户端缓存；Client 入口也未建立第三方 HTTP、WebSocket 或统计上报连接。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/timeline.ts))\n\n投影中包含模型、供应商、Token 统计、工具名、事件时间以及消息预览。`firstText()` 会把首个文本块压缩空白后截取前 80 个字符。它不是第三方外发，但如果 DSH Web 界面向其他人开放，这些摘要可能暴露会话内容。证据：`src/host/pricing.ts:76-84`，代码为 `return b.text.replace(...).trim().slice(0, 80)`。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/pricing.ts))\n\n**风险程度：低至中。** 没有第三方外发，但存在符合功能设计的本地或远程浏览器敏感展示面。\n\n### 3. 敏感信息读取\n\n**检查内容：** 文件系统、环境变量、用户目录、SSH、DSH 凭据以及会话数据读取。\n\n**发现：** 已审查的 Host 逻辑只消费 Harness 提供的 durable session event，包括系统提示词、工具 Schema、模型路由、消息和 Token 用量；未出现 `fs`、`process.env`、Home 目录解析、`.ssh`、`.dsh` 或 Token 文件读取。工具结果节点只保存工具名和错误标志，不保存完整工具结果预览；用户、助手及插件注入文本则可能显示最多 80 字符。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/fold.ts))\n\n**风险程度：中低。** 未越界读取本地凭据，但插件按设计可看到当前会话上下文的一部分。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json` 与 `pnpm-lock.yaml` 中生产、开发依赖及公开漏洞信息。\n\n**发现：** 唯一生产依赖为 `zod ^4.4.3`。公开漏洞信息显示 4.4.3 没有已知直接漏洞；未审查的 CVE-2026-6991 描述影响截至 4.3.6，不覆盖当前版本。开发依赖 `esbuild ^0.28.2` 高于 GHSA-g7r4-m6w7-qqqr 的修复版本 0.28.1，而且开发依赖不会作为普通插件消费者的生产依赖安装。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))\n\n**风险程度：低。** 当前未发现直接命中的已知依赖漏洞。\n\n### 5. 混淆与后门\n\n**检查内容：** Host 核心折叠逻辑、Schema、Client 入口、动态代码及编码载荷。\n\n**发现：** 运行时代码为结构清楚的 TypeScript，使用严格 Zod Schema 校验浏览器输出，并对请求、事件和消息节点设置数量上限。未见加密字符串、Base64 二阶段载荷、动态模块 URL、反调试逻辑、隐藏定时任务或环境探测。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/timeline.ts))\n\n主要问题是发布产物不可直接复核：`package.json:14-24` 指定用户运行 `lib/index.js` 和 `lib/client.js`，但 GitHub 根目录没有 `lib/`。这并不等于存在后门，但造成源码与 npm 包之间的验证缺口。([raw.githubusercontent.com](https://raw.githubusercontent.com/bowenliang123/dsh-context/main/package.json))\n\n**风险程度：中。** 未发现后门特征，但发布供应链透明度不足。\n\n### 6. 权限越界\n\n**检查内容：** Cordis 服务注入、插件补丁和 Client 服务声明。\n\n**发现：** Host 只注入 `sessionProjections`；Client 主模块声明的运行时注入为 `slots` 和 `locale`，并在对话视图和输入覆盖层注册组件。补丁文件仅新增 `dsh-context` 插件加载行，没有 Shell、文件系统、系统配置、浏览器权限或管理员能力。([github.com](https://github.com/bowenliang123/dsh-context/blob/main/src/host/index.ts))\n\n**风险程度：低。** 权限与上下文可视化功能基本匹配。\n\n## 风险点汇总\n\n| 风险点 | 程度 | 说明 |\n|---|---|---|\n| npm 编译产物未入库 | 中 | 用户实际执行 `lib/**`，但仓库只能审查 `src/**` |\n| 会话文本预览展示 | 中低 | 最多展示消息前 80 字符，不应向不可信用户开放 DSH Web |\n| `prepare: husky` | 低 | 主要影响源码开发或 Git 安装，普通发布白名单不包含钩子目录 |\n| 第三方外发 | 未发现 | 使用 Harness 内部投影链路，无自定义 RPC 或外部上传 |\n| 本地凭据读取 | 未发现 | 无 `.ssh`、`.dsh`、环境 Token 或文件系统读取 |\n| 命令执行或混淆后门 | 未发现 | 无 exec/eval/curl|sh、编码载荷或动态远程脚本 |\n\n## 结论与使用建议\n\n**结论：不是恶意插件，源码层面未发现主动攻击行为，但当前不能直接给出“完全放心使用”的供应链结论。**\n\n建议用户在使用前完成以下操作：\n\n1. 固定安装 `dsh-context@0.11.2`，不要长期使用未锁定的 `@latest`。\n2. 下载 npm tarball，核对包内文件清单、完整性哈希，并将 `lib/index.js`、`lib/client.js` 与该分支本地构建产物进行差异比较。\n3. 确认 npm 发布者、仓库提交和包版本对应后，再将结论升级为“放心用”。\n4. DSH Web 必须有身份认证，不应公开暴露；共享屏幕或多人环境中应注意 Context 面板会展示会话摘要、工具名和模型信息。\n5. 发布到 MyDSH 社区前，用 GitHub REST API 重新取得精确 `default_branch` 和 `pushed_at`，替换本报告中的日期归一化值。\n\n在上述第 2、5 项完成前，建议社区动作维持为 **review**；不需要 block，也没有证据支持将其判定为恶意。\n","action":"review","reviewed_at":"2026-08-17T14:42:57.224210+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":74,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-annotation","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-21T10:27:51Z","summary":"未见恶意代码，但可执行入口和更新时间未完整核验，暂不应直接放行","details":["维度1·代码执行：package.json 仅有 build、check、prepack，没有 install、postinstall、prepare 等安装期钩子；build 会删除 lib 后运行 TypeScript 编译，不会下载或执行远程脚本。但插件实际入口为 lib/index.js，而 GitHub 的 src/、lib/ 目录页面本次未能成功返回，无法独立确认入口与 README 所称“Node 端为空实现”完全一致，因此保留审核项。证据：package.json:6-28、src/、lib/。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/package.json))","维度2·数据外发：对可读取的 client.js、package.json、cordis.patch.yml 和 README 扫描，未发现 fetch、XMLHttpRequest、WebSocket、sendBeacon、第三方统计 SDK或硬编码外发域名。客户端通过宿主会话接口组装批注和用户问题，并发送给当前对话模型，这是插件明示的核心功能，不属于隐蔽外传。([github.com](https://github.com/omdsh-dev/dsh-annotation))","维度3·敏感读取：可见代码未发现 process.env、document.cookie、localStorage、sessionStorage、~/.ssh、~/.dsh、API token 或凭据文件读取。插件会读取用户选中的助手文本、批注内容和输入框草稿，并通过 ctx.sessions.setDraft 更新当前会话草稿；这些数据处理与功能直接相关，但用户应理解批注内容会提交给当前模型。([github.com](https://github.com/omdsh-dev/dsh-annotation))","维度4·依赖风险：运行期仅声明 Cordis peer dependency，开发依赖仅 TypeScript，未发现依赖安装脚本；但仓库没有可见锁文件，client.js 又是约 81.4 KB、1725 行的手写 CJS bundle，并内嵌 KaTeX、Quill 等代码，缺少独立 SBOM、来源哈希和自动依赖扫描，后续升级存在供应链可追溯性不足。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/package.json))","维度5·混淆与后门：client.js 体积较大，但代码保留模块名称、函数名称和中文注释，结构符合 CJS bundle，而非刻意压缩或密文载荷；可见部分未发现 eval、new Function、atob、Base64 解码后执行、动态远程脚本加载或反调试逻辑。由于 src/lib 未成功展开，该结论不能覆盖未读取的 Node 入口。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/client.js))","维度6·权限越界：cordis.patch.yml 仅插入 dsh-annotation 插件标识，没有修改其他配置；package.json 声明注入 DSH 客户端运行时和会话 UI。插件能观察消息 DOM、修改当前会话草稿并把批注交给模型，权限与声明功能相符，未发现访问其他会话、文件系统或管理接口的证据。但它属于宿主页面内执行的受信任插件，应固定审计过的提交安装。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/package.json))"],"report_md":"## 安全评分\n\n**72/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》，从代码执行、数据外发、敏感信息读取、依赖风险、混淆与后门、权限越界六个维度审查 `omdsh-dev/dsh-annotation`。仓库默认展示分支为 `main`，当前 package.json 版本为 1.3.16；根目录包含 `src/`、`lib/`、`client.js`、`cordis.patch.yml`、package.json、README、许可证和 TypeScript 配置等文件，共显示 32 次提交。核心浏览器文件 client.js 为 1725 行、约 81.4 KB，cordis.patch.yml 仅有 3 行。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n审查未发现明确恶意行为、隐蔽数据外传或安装期远程命令。不过，本次 GitHub Web 数据层没有成功返回仓库 API 的 JSON 正文，也无法展开 `src/`、`lib/` 目录，因此不能可靠填写 default branch 对应的精确 `pushed_at`，也不能独立确认实际 Node 入口 `lib/index.js` 与 README 所称的“Node half is an empty implementation”完全一致。为避免制造虚假精度，顶层 `updated_at` 留空；在精确元数据和可执行入口补充核验前，不建议直接进入 MyDSH 无条件发布名单。([]())\n\n## 评估对象\n\n- **仓库**：`omdsh-dev/dsh-annotation`\n- **评估分支**：`main`\n- **精确 pushed_at**：未可靠取得；禁止用页面抓取时间代替仓库 API 时间\n- **当前包版本**：1.3.16\n- **仓库规模**：根目录 10 个文件或目录、32 次提交；client.js 1725 行、81.4 KB；package.json 60 行；cordis.patch.yml 3 行\n- **主要用途**：在 DSH Web 中选择助手文本、添加批注，并在用户发送消息时将批注块与问题一并提交给当前模型；用户气泡仅展示问题和批注标记。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** package.json scripts、安装方式、client.js 动态执行关键字、cordis.patch.yml，以及 `src/`、`lib/` 可执行入口。\n\n**发现：** package.json:25-28 仅定义 `build`、`check`、`prepack`。其中 build 删除本地 lib 目录后运行 TypeScript 编译，check 对编译产物和 client.js 执行 Node 语法检查；没有 `install`、`postinstall`、`preinstall`、`prepare`，也没有 `curl | sh`、shell 下载器或子进程启动脚本。client.js 可见内容未发现 `eval`、`new Function` 或远程代码加载。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/package.json))\n\n**保留问题：** package.json:6-14 把 `lib/index.js` 声明为默认执行入口，发布文件也包含 `src` 和 `lib`。本次目录页面返回缓存错误，未读取入口全文。README 虽声明 Node 端为空实现，但安全结论不能仅依赖项目自述。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n**风险程度：** 中等审查风险。没有发现危险安装钩子，但可执行入口未完成独立核验。\n\n### 2. 数据外发\n\n**检查内容：** 第三方域名、HTTP 请求、WebSocket、Beacon、统计 SDK、外部脚本和模型发送路径。\n\n**发现：** 在可见文件中没有发现 `fetch`、`XMLHttpRequest`、`WebSocket`、`navigator.sendBeacon` 或第三方分析域名。README 和 client.js 所示的数据流为：读取用户选中的文本和批注，在发送时写入当前 DSH 会话草稿，由现有会话提交给当前模型。该行为会把批注原文、批注内容和问题交给模型，但这是产品明确展示的核心功能，不是隐藏外传。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n**风险程度：** 低。用户仍不应在批注中填写不应发送给当前模型提供商的秘密信息。\n\n### 3. 敏感信息读取\n\n**检查内容：** 环境变量、Cookie、浏览器存储、SSH 文件、DSH 凭据目录、Token 和系统文件。\n\n**发现：** 可见 client.js 未发现 `process.env`、`document.cookie`、`localStorage`、`sessionStorage`、`~/.ssh`、`~/.dsh` 或 token 文件访问。客户端主要读取页面选择区域、消息文本、批注输入和会话草稿。它调用宿主会话能力修改当前草稿，这是实现“按回车随消息发送”的必要行为。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n**风险程度：** 低。没有发现凭据窃取或越权读取证据。\n\n### 4. 依赖风险\n\n**检查内容：** runtime、peer、dev dependencies、版本范围、锁文件、安装脚本和 bundle 内第三方代码。\n\n**发现：** package.json:37-42 仅声明 Cordis peer dependency 和 TypeScript dev dependency，没有大量运行期依赖，也没有依赖安装钩子。client.js 是自包含 CJS bundle，包含可识别的 KaTeX、Quill 等实现；代码未被极端压缩，但仓库根目录没有展示 npm、pnpm 或 yarn 锁文件，也没有 SBOM 或第三方代码来源哈希。依赖少降低了常规供应链攻击面，但内嵌代码会弱化自动漏洞扫描和版本追踪能力。([github.com](https://github.com/omdsh-dev/dsh-annotation))\n\n**风险程度：** 低到中。建议补充 lockfile、SBOM、NOTICE 和依赖版本说明。\n\n### 5. 混淆与后门\n\n**检查内容：** Base64 载荷、字符串数组解密、动态函数、反调试、隐藏定时任务、异常网络地址和无业务意义的持久化。\n\n**发现：** client.js 虽然较长，但保留函数名称、模块边界和业务注释，符合自包含 CJS bundle 特征。可见代码使用 `createElement`、`textContent`、MutationObserver 和会话接口实现批注 UI，没有发现解码后执行、加密字符串表、远程脚本注入或反调试行为。使用 `textContent` 输出批注内容也比直接拼接 `innerHTML` 更有利于避免 DOM XSS。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/client.js))\n\n**风险程度：** 低，但仍受 src/lib 未完整核验的限制。\n\n### 6. 权限越界\n\n**检查内容：** Cordis 配置补丁、DSH 注入声明、会话 API、DOM 观察范围和文件系统能力。\n\n**发现：** cordis.patch.yml:1-3 仅执行一次插件 ID 插入，没有覆盖宿主配置或追加其他插件。package.json:43-53 将插件注入 DSH 客户端运行时及会话 UI，符合浏览器批注工具需求。README 说明插件会通过 MutationObserver 处理消息气泡，并在发送前更新当前会话草稿；这些能力较强，但与功能直接相关。未发现访问管理后台、其他用户会话、任意文件或系统命令的证据。([github.com](https://github.com/omdsh-dev/dsh-annotation/blob/main/package.json))\n\n**风险程度：** 低到中。它是宿主页面内执行的插件，应按受信任前端代码管理，不应自动跟随未审计的 main 分支更新。\n\n## 风险点汇总\n\n1. **关键审核缺口：** `lib/index.js` 是实际入口，但 src/lib 内容未成功读取，无法形成完整代码闭环。\n2. **元数据缺口：** GitHub API 精确 `pushed_at` 未能可靠取得，不能确认此次代码快照与最终发布时间完全一致。\n3. **供应链可追溯性不足：** 无可见锁文件或 SBOM，client.js 内嵌第三方库，后续漏洞跟踪成本较高。\n4. **宿主权限较强：** 插件可观察会话 DOM 并修改当前草稿，虽然属于必要功能，但安装来源必须可信且应固定提交。\n5. **未发现恶意证据：** 可见范围内没有安装期命令、远程下载执行、凭据读取、隐蔽外传、混淆载荷或权限扩张配置。\n\n## 结论与使用建议\n\n本仓库的可见实现与批注功能一致，没有发现恶意插件常见的远程命令执行、凭据窃取、隐藏数据外发或后门特征。但安全审查不能仅凭 README 断言 Node 端为空；由于实际默认入口 `lib/index.js` 未完成逐行核验，并且精确 API 更新时间缺失，本次结论为 **存在风险**，用户建议为 **谨慎用**，暂不建议直接执行 `release`。\n\n建议维护者或社区审核人员补充获取 `src/`、`lib/` 全部文件和 GitHub API 元数据，确认入口无副作用后再转为通过。临时安装时应固定到已审计 commit，而不是永久跟随 main；同时在隔离的 DSH profile 中首次运行，确认仅修改当前会话草稿、没有额外网络请求和文件访问。完成上述补充核验后，如入口确为空实现，可将评分下调至 10—15 并放行。\n","action":"review","reviewed_at":"2026-08-17T13:53:19.447594+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":72,"score_type":"safety","review_status":"complete"},{"full_name":"anysearch-team/anysearch-dsh","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14","summary":"未见后门，但凭据可随自定义地址外发，需限定官方HTTPS域名后使用。","details":["代码执行：package.json 未定义 install、preinstall、postinstall 生命周期脚本；prepublishOnly、build、check:pack 均为开发者发布阶段命令，不会在普通依赖安装时自动执行。README 的 curl 命令只下载安装说明，没有 curl|sh，但让智能体执行 main 分支上的可变说明仍有供应链风险。","数据外发：插件会把查询词、批量查询参数和可选 Bearer 凭据发送到配置的 baseURL；默认目标为 https://api.anysearch.com，属于搜索功能所需的预期外发。客户端同时允许任意 http 或 https 地址，且没有官方域名白名单，错误配置可能造成明文查询或令牌外泄。","敏感读取：凭据通过 DSH credentialRef 按 apiKeyEnv 指定名称解析，并仅将该值交给客户端；未发现读取 ~/.ssh、扫描全部环境变量、读取浏览器数据或直接遍历 ~/.dsh 的代码。README 建议将密钥保存到 DSH 凭据文件，但实际文件访问由 DSH 凭据服务负责。","依赖风险：生产依赖仅直接声明 zod，dsh 与 cordis 为 peerDependencies，并提供 pnpm-lock.yaml；未设置依赖安装钩子。需要注意 npm 发布物使用构建生成的 dist，而仓库当前未提交 dist，因此仅审查 GitHub 源码不能完全证明 npm 包与源码逐字一致。","混淆与后门：源码为可读 TypeScript，网络端点和请求构造集中在 src/client.ts；未见 eval、Function 构造器、Base64 隐藏载荷、动态远程模块、加密解密载荷或不可解释的大段压缩代码。","权限越界：插件注入 credentials、web、tools 等 DSH 服务并注册搜索能力，未发现 shell、child_process、任意文件写入或系统权限修改。主要边界风险是外部搜索结果会进入智能体上下文，调用方仍应把网页内容视为不可信数据，防范间接提示注入。"],"report_md":"## 安全评分\n\n**71/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`anysearch-team/anysearch-dsh` 是一个为 DeepSeek Harness 提供 AnySearch 网页搜索 Provider 和搜索工具的 TypeScript 插件。审查未发现恶意后门、隐蔽命令执行、任意本地文件读取或主动收集用户数据的实现；但客户端允许把查询和 Bearer 凭据发送到任意配置的 HTTP/HTTPS 地址，同时安装说明鼓励智能体读取可变的 `main` 分支文档，因此不建议在未经配置约束的情况下直接认定为“完全放心”。\n\n安全评分为 **71/100**，需要注意。结论是：**可以在固定版本、官方 HTTPS API 地址和非敏感搜索场景下使用；高敏感环境应先限制 baseURL 并核验 npm 发布产物。**\n\n## 评估对象\n\n- 仓库：`anysearch-team/anysearch-dsh`\n- 评估分支：`main`\n- 分支最新可见提交：`2758d49`，提交说明为 `chore: release 0.1.1`\n- 最后可核实提交日期：`2026-08-14`\n- 当前源码版本：`0.1.1`\n- 仓库规模：小型 TypeScript 插件，根目录包含 `src/`、`tests/`、`scripts/`、`docs/`、`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml` 等；当前分支未发现 `lib/` 目录。核心客户端 `src/client.ts` 为 540 行，入口 `src/index.ts` 为 157 行，Provider 为 74 行。\n\n说明：GitHub 仓库页面与 commits 页面确认默认工作分支为 `main`，并确认最新提交日期为 2026-08-14。GitHub API 端点在本次审查环境中未返回可读取正文，因此无法可靠取得该次推送的精确时、分、秒；本报告保留日期级 ISO 值，不虚构秒级时间。\n\n## 逐维度分析\n\n### 1. 代码执行与安装行为\n\n**检查内容：** `package.json` 的 scripts、bin、files、发布钩子，README 安装命令，`scripts/` 和安装相关说明；重点检查 `exec`、`spawn`、`eval`、`Function`、`curl|sh`、动态远程 import、install/postinstall。\n\n**发现：** `package.json:8-23` 仅包含 `build`、`check`、`test`、`check:pack`、`prepublishOnly` 等开发和发布阶段脚本，没有 `install`、`preinstall` 或 `postinstall`。普通用户安装依赖时不会由该包自动启动 shell。`prepublishOnly` 只在维护者发布 npm 包前运行。`files` 仅发布 `dist` 与 `cordis.patch.yml`，仓库中的 `scripts/` 不属于最终 npm 包文件集合。\n\nREADME 的智能体安装方法包含 `curl -fsSL https://raw.githubusercontent.com/.../main/docs/AGENT_INSTALL.md`，但没有通过管道交给 shell，属于下载文本而非直接执行代码。风险在于 URL 指向可变的 `main` 分支，并要求智能体继续遵循其中的说明；仓库账号若被接管，安装指令可能在没有版本固定的情况下变化。证据：`README.md:7-14`。\n\n**风险程度：低。** 未发现隐蔽自动执行，但建议安装文档改为固定 commit SHA 或 release tag。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** `src/client.ts`、`src/provider.ts`、工具注册代码和配置示例中的所有网络端点、HTTP 方法、请求头及上传字段。\n\n**发现：** 默认外发域名为 `https://api.anysearch.com`。搜索请求会把 `query`、分页参数、最大结果数、国家或语言参数发送到 AnySearch；批量工具会发送查询数组。`src/client.ts:258-289` 构造 `Content-Type: application/json`，在存在密钥时增加 `Authorization: Bearer ${apiKey}`，随后通过 `fetch(url, requestInit)` 发出请求。固定业务路径包括 `/v1/search`、`/v1/search/batch`、`/v1/search/batch/{id}` 和 `/v1/capabilities`。这是实现远程搜索必需的预期外发，而非隐藏遥测。\n\n实际风险是 `normalizeBaseURL` 允许 `http:` 和 `https:`，只拒绝 URL 凭据、查询参数及 hash，没有限制必须使用 AnySearch 官方域名。若用户、自动配置或被篡改的补丁把 baseURL 指向攻击者控制的主机，查询内容和 API Key 会一起发送；使用普通 HTTP 时还可能在传输途中泄露。\n\n**风险程度：中低。** 默认 HTTPS 官方地址可接受，但不应把 baseURL 配置交给不可信内容。建议代码默认仅允许 HTTPS，并在生产模式下限制为官方域名或显式管理员白名单。\n\n### 3. 敏感信息读取\n\n**检查内容：** `src/index.ts`、客户端配置、README 凭据说明；检查 `~/.ssh`、私钥、浏览器目录、任意 `~/.dsh` 遍历、环境变量枚举和 token 收集。\n\n**发现：** `src/index.ts` 使用 `credentialRef(ctx, { key: config.apiKeyEnv, envFallbackKeys: [config.apiKeyEnv], required: false })` 解析一个明确命名的凭据，并通过 `getApiKey: () => apiKeyRef.getValue()` 交给客户端。未发现 `process.env` 全量读取、目录扫描、SSH 文件读取或从其他插件窃取凭据的逻辑。\n\nREADME 建议把 `ANYSEARCH_API_KEY` 放入 `~/.dsh/.credentials.yaml`，这是 DSH 的凭据存储方式；当前插件源码通过凭据服务取值，没有直接打开或遍历该文件。证据：`README.md:94-118`。\n\n**风险程度：低。** 凭据读取范围明确，但密钥最终发送到 baseURL，因此 baseURL 的可信性直接决定凭据安全。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`pnpm-lock.yaml`、生产依赖、peerDependencies、开发工具及生命周期脚本。\n\n**发现：** `package.json:33-43` 的直接生产依赖只有 `zod`；`dsh` 和 `cordis` 为 peerDependencies，开发依赖为 ESLint、TypeScript、Vitest、tsdown 等常规工具。仓库提交了 `pnpm-lock.yaml`，有助于固定开发和构建依赖。没有发现 Git URL 依赖、本地路径依赖、未固定的远程压缩包或依赖安装钩子。\n\n需要保留一个发布链风险：npm 包实际入口为 `dist/index.js`，但 GitHub 分支未提交 `dist/`；因此本次源码审查不能单独证明 npm 上的构建产物与审查源码完全一致。建议核对 npm tarball 的文件清单、哈希及 provenance，并固定安装 `@anysearch/anysearch-dsh@0.1.1`，不要长期使用浮动 `latest`。\n\n**风险程度：中低。** 未发现可疑依赖，但发布产物仍需独立核验。\n\n### 5. 混淆、后门与异常逻辑\n\n**检查内容：** `src/` 核心入口、客户端、Provider、工具目录和类型定义；检查压缩代码、Base64/十六进制载荷、自解密代码、定时回连、隐藏控制通道和条件触发后门。\n\n**发现：** 源码结构清晰，网络逻辑集中在 `src/client.ts`，工具和 Provider 调用同一个客户端。未发现 `eval`、动态函数构造器、远程 JavaScript 加载、二进制载荷、自修改代码或基于用户名、时间、主机名触发的隐藏分支。客户端对 API 路径进行了固定，并对上游错误文本和搜索内容设置长度上限，显示出边界控制意图。\n\n**风险程度：低。** 当前源码没有明显恶意或后门特征。\n\n### 6. 权限越界\n\n**检查内容：** DSH 服务注入、工具注册、文件系统、进程、网络和系统配置权限。\n\n**发现：** 插件声明并使用 credentials、web、tools 等服务，为 DSH 注册网页搜索 Provider 和搜索工具。未发现导入 `child_process`、执行 shell、写入任意文件、修改系统设置、读取 SSH 密钥或申请管理员权限。\n\n搜索结果会作为工具输出进入智能体上下文，其中可能包含第三方网页的恶意指令。客户端虽然限制了内容长度，但长度限制不能消除间接提示注入。DSH 和上层智能体必须继续把网页内容视为不可信资料，不能让搜索结果自行授权执行命令、发送凭据或修改本机状态。\n\n**风险程度：中低。** 没有本地权限越界，主要风险来自联网工具固有的内容信任边界。\n\n## 风险点汇总\n\n1. **自定义 baseURL 可接收 Bearer 凭据：** 支持任意 HTTP/HTTPS 主机且无官方域名白名单，是本次最明确的安全风险。\n2. **HTTP 未被禁止：** 错误配置可能导致查询和令牌明文传输。\n3. **智能体安装说明引用可变 main 分支：** 不属于 curl|sh，但存在安装指令供应链风险。\n4. **npm 的 dist 未纳入仓库：** GitHub 源码与最终发布包之间仍存在可验证性缺口。\n5. **搜索内容存在间接提示注入可能：** 属于联网搜索工具的固有风险，不是已发现的后门。\n6. **未发现恶意行为：** 没有证据表明插件读取 SSH、扫描个人文件、执行本地命令或建立隐藏外联通道。\n\n## 结论与使用建议\n\n该仓库当前源码**不是恶意插件**，也没有发现典型后门或自动命令执行。普通用户如果使用固定版本 `0.1.1`、保持默认官方地址 `https://api.anysearch.com`、确认配置文件未被第三方修改，并避免将密码、私钥、未公开代码、客户隐私等内容作为搜索词，可以使用。\n\n但在代码限制 baseURL 为 HTTPS 可信域名、安装说明固定到 release/commit、并完成 npm tarball 与源码一致性核验之前，不建议给出无条件的“放心用”结论。企业、内网研发和高敏感数据场景应先完成上述加固，因此最终用户建议为：**谨慎用**；MyDSH 发布动作建议为：**review**。\n","action":"review","reviewed_at":"2026-08-17T13:37:54.905643+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":71,"score_type":"safety","review_status":"complete"},{"full_name":"ZSeven-W/dsh-openpencil","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T02:35:24Z","summary":"未见外传或后门，但含安装钩子、本地子进程及文件写入能力","details":["代码执行：package.json 定义 prepare 生命周期脚本；渲染器与 MCP 客户端会通过 child_process.spawn 启动本地 Node 子进程，但明确使用 shell:false，未发现 exec、eval、curl|sh 或远程脚本下载执行。","数据外发：宿主端、客户端桥接、渲染链路和 cordis.patch.yml 均使用 DSH 本地路由、iframe 与 stdio 通信；未发现遥测、隐藏回传或向第三方域名上传文档内容。","敏感读取：未发现读取 ~/.ssh、~/.dsh 凭据、~/.codex、浏览器数据或环境 token；插件会按功能需要读取 .op 文件，默认浏览根目录为用户主目录，授权范围偏宽。","依赖风险：运行时依赖仅为 DSH builtin，开发依赖数量少且常见；但仓库同时维护 package-lock.json 与 pnpm-lock.yaml，并通过 git 子模块引入 OpenPencil，存在锁文件漂移和供应链复核成本。","混淆与后门：检查到的 TypeScript/MJS 源码结构清晰，未见大段 Base64、动态解密、反向 Shell、挖矿逻辑、new Function 或刻意隐藏控制流。","权限边界：编辑模式能够写回 .op 文件，渲染模式会创建临时文件并启动本地进程；代码包含路径约束、编辑审批、读取回验和清理逻辑，但不属于纯展示型低权限插件。"],"report_md":"## 安全评分\n\n**69/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：ZSeven-W/dsh-openpencil\n\n## 概述\n\n`ZSeven-W/dsh-openpencil` 是一个真实的 DeepSeek Harness 插件，用于在 DSH 会话中预览、检查和编辑 OpenPencil `.op` 文档。仓库包含宿主端插件、客户端 iframe 编辑器、渲染服务、MCP stdio 客户端和 OpenPencil 资源子模块，不是仅靠提示词或静态规则模拟功能的“假 AI 插件”。仓库默认分支为 `main`，最新提交为 `5cfadc511f08dbc5c09f76e6943b709e846d1cae`。\n\n本次静态审查未发现凭据窃取、第三方数据回传、混淆后门、挖矿或远程脚本下载执行证据。但该插件确实具备安装阶段执行 Node 脚本、运行阶段启动本地子进程、读取 `.op` 文件以及在编辑模式写回文件的能力。因此它不是零权限插件，结论为：**可以在可信、受控的 DSH 工作区中使用，但不建议普通用户未经限制直接安装并开启编辑能力。**\n\n## 评估对象\n\n- **仓库**：`ZSeven-W/dsh-openpencil`\n- **评估分支**：`main`\n- **分支最后更新时间**：`2026-08-17T02:35:24Z`\n- **最新提交**：`5cfadc511f08dbc5c09f76e6943b709e846d1cae`\n- **仓库规模**：GitHub 页面显示 29 次提交；`src/` 包含 10 个宿主端 TypeScript 文件及 13 个客户端文件，`scripts/` 包含两个构建脚本，另有一个 `vendor/openpencil` git 子模块、两个依赖锁文件和 GitHub Actions 配置。\n- **审计边界**：主分支不提交编译后的 `lib/`，README 明确说明 `lib/` 在构建或打包时生成；因此本报告评估的是 GitHub 源码与构建入口，不能自动等同于任何未来 npm 发布包。\n\n## 逐维度分析\n\n### 一、代码执行\n\n**检查内容**：`package.json`、`scripts/` 构建入口、`src/mcp-client.ts`、`src/renderer.ts`、`src/editor-host.ts`。\n\n**发现**：\n\n1. `package.json:24-31` 没有 `install` 或 `postinstall`，但定义了 `prepare: node scripts/prepare-package.mjs`。通过 GitHub 地址安装 npm 包时，包管理器可能自动执行 `prepare`，因此安装过程并非完全静态。\n2. `src/mcp-client.ts:1-5,46-58` 使用 `child_process.spawn` 启动本地 MCP 进程，并通过 stdin/stdout 交换 JSON；调用显式设置 `shell:false`，未把输入拼接进 Shell 命令。\n3. `src/renderer.ts:3-4,145-171` 同样使用 `spawn(command, args, ...)` 启动本地 Node 渲染进程，包含超时终止机制。\n4. 未在受审源码中发现 `exec`、`execSync`、`eval`、`new Function`、`curl | sh`、PowerShell 下载执行或从网络动态导入 JavaScript。\n\n**证据**：`package.json:24-31`；`src/mcp-client.ts:46-58`；`src/renderer.ts:145-171`；`src/editor-host.ts:4-11`。\n\n**风险程度**：中。子进程属于渲染和 MCP 功能所需，当前实现比 `exec` 和 `shell:true` 安全，但仍扩大了插件执行面；安装钩子也应在发布前单独复核。\n\n### 二、数据外发\n\n**检查内容**：`cordis.patch.yml`、README 的运行流程、宿主路由、渲染器、客户端桥接和 MCP 通信代码。\n\n**发现**：\n\n- `cordis.patch.yml:15-19,32-51` 注册的是 DSH 本地插件页面和本地 HTTP 路由；iframe 地址位于 `/_plugins/dsh-openpencil/...`，不是第三方网页。\n- MCP 客户端使用本地进程 stdio，而不是远程 HTTP/WebSocket 服务。\n- README 明确描述 `.op` 内容保留在本地磁盘，宿主与 iframe 只交换受限的本地文档元数据，并说明没有远程 iframe 和运行时 CDN。\n- 未发现 telemetry、analytics、webhook、未知 API 域名或将文档内容发送至 GitHub、OpenAI、DeepSeek 等外部服务的代码。\n\n**证据**：`cordis.patch.yml:15-19,32-51`；`src/mcp-client.ts:46-71`；`README.md:178-184`。\n\n**风险程度**：低。目前没有数据外发证据；主要通信边界为本机 DSH、iframe 和子进程。\n\n### 三、敏感数据读取\n\n**检查内容**：`src/editor-host.ts`、`src/renderer.ts`、`src/tool.ts`、`src/presentation-hydration.ts`，重点搜索用户目录、环境变量、密钥和任意文件读取。\n\n**发现**：\n\n- 未发现读取 `~/.ssh`、`~/.dsh/.credentials`、`~/.codex`、浏览器 Cookie、云厂商凭据或 `*_TOKEN` 环境变量的逻辑。\n- `src/editor-host.ts:25-33` 将 `homedir()` 作为默认浏览根目录，并允许配置日志和 runner 路径。插件主要读取该根目录下用户选择的 `.op` 文档。\n- `src/renderer.ts:262-301` 会读取源 `.op` 文件、写入临时输入/输出文件，并在结束后执行清理。\n- 默认把整个用户主目录作为根路径仍偏宽；即使代码存在安全路径解析，也建议部署时把根目录缩小到专门的设计项目目录。\n\n**证据**：`src/editor-host.ts:4-11,25-33`；`src/renderer.ts:262-301`；`src/presentation-hydration.ts:247-269`。\n\n**风险程度**：低至中。没有凭据窃取迹象，但具备读取本地设计文件的权限，默认目录范围需要收紧。\n\n### 四、依赖风险\n\n**检查内容**：`package.json`、`package-lock.json`、`pnpm-lock.yaml`、`.gitmodules`、`vendor/openpencil` 和发布文件清单。\n\n**发现**：\n\n- `package.json:34-44` 的运行时依赖只有宿主提供的 `@deepseek-ai/dsh: builtin`；开发依赖主要为 TypeScript、esbuild、pnpm 和 Node 类型定义，未发现来源异常或大量拼写近似依赖。\n- 仓库同时保留 `package-lock.json` 与 `pnpm-lock.yaml`，而 `packageManager` 指向 pnpm。双锁文件可能产生依赖解析漂移，CI 和发布过程应明确只采用一个权威锁文件。\n- `.gitmodules:1-3` 从 `https://github.com/ZSeven-W/openpencil.git` 引入 OpenPencil 子模块。Git 提交本身会固定子模块 commit，但最终同步进入发布包的静态资源仍需纳入产物审计。\n- `package.json:6-9` 只发布 `lib/` 和 `cordis.patch.yml`，而 `lib/` 不存在于主分支。这意味着源码审查无法直接验证 npm tarball 中的每一个生成文件。\n\n**证据**：`package.json:6-9,34-44`；`.gitmodules:1-3`；仓库根目录文件列表。\n\n**风险程度**：中。依赖数量少是优点，但子模块、生成产物和双锁文件构成可审计性缺口。\n\n### 五、混淆与后门\n\n**检查内容**：`src/` 宿主端源码、客户端文件结构、工具路由、渲染器和构建配置。\n\n**发现**：\n\n- 源码命名、类型和控制流清晰，未见大段 Base64、十六进制载荷、字符串数组解码器、动态解密执行、反调试、自删除、持久化启动项、反向 Shell 或挖矿逻辑。\n- `src/new-tool.ts:121-133` 对工具方法进行显式分派；未识别的方法会返回错误，不存在隐藏的动态方法执行。\n- `src/mcp-client.ts` 使用带数字 ID 的 JSON 消息协议，并限制输出和关闭等待时间，没有将响应当作 JavaScript 执行。\n\n**证据**：`src/new-tool.ts:38-40,121-133`；`src/mcp-client.ts:71-129`；`src/` 目录结构。\n\n**风险程度**：低。没有恶意后门证据；主要剩余风险来自未直接提交的构建产物，而不是已检查源码中的隐藏逻辑。\n\n### 六、权限越界\n\n**检查内容**：本地路由、文件路径约束、编辑审批、渲染临时文件和客户端状态更新流程。\n\n**发现**：\n\n- 插件注册了列出文档和渲染文档的本地 GET 路由，具备读取 `.op` 文件和返回预览内容的权限。\n- `src/new-tool.ts:38-40` 在 `editable=false` 时明确禁止编辑。\n- `src/presentation-hydration.ts:247-269` 先验证请求路径是否属于当前会话上下文中的有效资源路径；`299-312` 通过需要编辑审批的 `op_tool` 执行修改；`312-352` 再调用只读工具回验，验证失败则不会更新客户端状态。\n- 这些约束能够降低目录穿越和静默写入风险，但编辑模式本质上仍允许修改用户文件。若 DSH 服务被公开暴露、会话鉴权薄弱或根目录配置过宽，影响面会明显增加。\n\n**证据**：`cordis.patch.yml:32-51`；`src/new-tool.ts:38-40`；`src/presentation-hydration.ts:247-352`；`src/renderer.ts:262-301`。\n\n**风险程度**：中。权限与产品功能匹配，并有审批和路径校验，但不是最小权限、只读型插件。\n\n## 风险点汇总\n\n1. GitHub 安装可能触发 `prepare` Node 脚本，安装阶段存在代码执行面。\n2. 运行时会启动本地 Node/MCP 子进程；虽然使用 `shell:false`，仍应锁定可信版本。\n3. 默认文件根目录为用户主目录，建议改为单独的 OpenPencil 项目目录。\n4. 编辑模式能够写回 `.op` 文件，应仅在需要时启用，并保留 DSH 的编辑确认机制。\n5. `lib/` 和最终静态资源由构建生成，主仓审查无法完全证明 npm 发布包与当前源码一致。\n6. 双锁文件与 OpenPencil 子模块增加供应链漂移和复核成本。\n7. 未发现数据窃取、未知第三方回传、凭据读取、混淆后门、反向 Shell 或挖矿证据。\n\n## 结论与使用建议\n\n**最终结论：谨慎用，可以在可信环境中使用，但不能视为无权限、可无条件安装的纯前端插件。**\n\n建议用户锁定本次审查的 commit，而不是长期跟随 GitHub `main`；把 `homeDirectory` 限制到专门的设计目录；默认保持 `editable=false`，仅在确实需要修改文档时临时启用；不要把 DSH 插件路由无鉴权暴露到公网；发布前使用 `npm pack` 解包并将 `lib/`、viewer 静态资源与该 commit 的可复现构建结果进行逐文件比较。\n\n基于当前证据，没有理由将该仓库判定为恶意或直接封禁；但在完成发布包一致性和 `prepare-package.mjs` 安装行为的独立复核前，MyDSH 市场更适合将其置于 `review` 状态，而不是直接标记为“放心用”。\n","action":"review","reviewed_at":"2026-08-17T13:32:20.530232+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":69,"score_type":"safety","review_status":"complete"},{"full_name":"cocofhu/anime-find","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T18:17:00Z","summary":"未见恶意执行或窃密，但含外网抓取、媒体代理及依赖供应链边界，需审慎安装。","details":["维度1（代码执行）：检查 package.json、cordis.patch.yml、src/host.ts、安装与构建入口。package.json:15-23 仅有 build、typecheck、format、lint、prepare；未配置 preinstall、install、postinstall，也未发现 curl|sh、eval 或任意命令参数入口。prepare 会执行 pnpm run build，属于源码方式安装时的构建生命周期，不是静默下载或提权行为。风险程度：低。","维度2（数据外发）：检查 src/sources/、src/metadata.ts、src/http.ts、src/streaming.ts、src/update-check.ts。插件会按功能向 dmhy.org、mikanani.me、anibt.net、animes.garden、api.bgm.tv 和 GitHub Releases 发起请求；搜索关键词、资源地址及配置的媒体请求头可能离开本机。默认媒体策略禁止任意非本地主机直连，并声明仅接受搜索结果链接、同源跳转及受信 HLS 清单发现的子资源，但自定义 allowed_hosts、cookies、extra_headers 配错后仍可能扩大外发面。风险程度：中。([github.com](https://github.com/cocofhu/anime-find/releases))","维度3（敏感读取）：检查 src/config-store.ts、src/host.ts 及配置说明。未发现读取 ~/.ssh、云凭据目录或自动枚举环境 token 的设计，也不要求 API Key；但会访问 DSH_MCP_CONFIG_DIR，默认涉及 ~/.dsh/mcp/configs，并可持久化媒体规则中的 cookies、extra_headers 等字段。若用户把通用 Authorization、Cookie 或企业内部凭据写入规则，这些信息可能随媒体请求发送。风险程度：中低。","维度4（依赖风险）：package.json:53-62 只有两个直接运行依赖 @anime-find/anime-toolkit 与 @modelcontextprotocol/sdk，但均使用 ^ 范围而非精确版本。尤其 @anime-find/anime-toolkit 承载核心搜索、抓取和流媒体能力，其源码不属于本仓库，因此仅审查 anime-find 不能等同于审查完整运行链。pnpm-lock.yaml 有利于仓库构建复现，但不能完全消除用户安装时的依赖漂移。风险程度：中。","维度5（混淆/后门）：仓库以可读 TypeScript 源码和 lib 构建产物组成，src/ 中按 host、http、streaming、sources、metadata、config-store 等职责拆分；未见加密载荷、超长 Base64、动态解密执行、下载后二次运行或原生二进制入口。最新 v0.1.4 Release 关联提交 f619e35b609e40d28e6cc70367651595d7224530 带 GitHub 验证签名。风险程度：低。([github.com](https://github.com/cocofhu/anime-find/releases))","维度6（权限越界）：插件不是纯只读搜索工具；它能够写入自身 DSH 配置、请求宿主重启 MCP 服务，并通过 Host 侧代理转发 HLS、MP4、密钥 URI 和请求头。未发现 sudo、系统目录写入、任意文件删除或通用 shell 执行能力，但媒体代理和服务重启属于需要信任边界的权限。风险程度：中低。([github.com](https://github.com/cocofhu/anime-find/releases))"],"report_md":"## 安全评分\n\n**66/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》对 `cocofhu/anime-find` 进行六维度静态审查。综合结论是：**未发现可将其判定为恶意插件的证据，但它不是可以无条件信任的纯本地、纯只读插件。** 其正常功能依赖访问多个动漫资源站、Bangumi API 和 GitHub，并提供媒体代理、自定义请求头、Cookie、配置持久化与宿主重启能力；同时，核心能力进一步依赖仓库外的 `@anime-find/anime-toolkit`。因此建议普通用户在隔离的个人 DSH 环境中审慎使用，不建议未经依赖复核就部署到可访问企业内网、生产凭据或高价值 Token 的主机。\n\n**安全评分为 **66/100**，需要注意，属于中等风险区间；判定为“存在风险”，不是“恶意”。**\n\n## 评估对象\n\n- 仓库：`cocofhu/anime-find`\n- 默认分支：`main`\n- 评估更新时间：`2026-08-16T18:17:00Z`\n- 最新正式版本：`v0.1.4`\n- 关联提交：`f619e35b609e40d28e6cc70367651595d7224530`\n- 技术栈：TypeScript、Node.js、Cordis、MCP\n- 仓库规模：小型插件仓库；根目录约 14 个主要条目，`src/` 包含约 23 个文件或目录，另有 `lib/` 构建产物、`pnpm-lock.yaml`、`cordis.patch.yml` 和安全说明；直接运行依赖为 2 个。仓库结构明确包含 `src/host.ts`、`src/http.ts`、`src/streaming.ts`、`src/config-store.ts`、`src/update-check.ts`、`src/release.ts` 及 `src/sources/` 等关键模块。([github.com](https://github.com/cocofhu/anime-find/releases))\n\n## 逐维度分析\n\n### 1. 代码执行风险\n\n**检查内容：** `package.json`、`cordis.patch.yml`、构建与安装入口、`src/host.ts`。\n\n**发现：** `package.json:15-23` 定义的脚本为 `build`、`typecheck`、`format`、`lint`、`lint:fix` 和 `prepare`。没有 `preinstall`、`install`、`postinstall` 等安装后自动执行钩子，也没有发现 `curl | sh`、远程脚本下载、`eval`、动态 Function 或将用户参数交给 shell 的公开入口。`prepare` 的内容是执行本地构建，属于从 Git 仓库安装时可能触发的普通编译步骤。\n\n**证据：** `package.json:15-23`：`prepare: pnpm run build`；构建器为 `tsdown`，未声明远程下载命令。\n\n**风险程度：低。** 不能把构建生命周期视为零执行风险，但当前证据不支持恶意命令执行结论。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** `src/sources/`、`src/metadata.ts`、`src/http.ts`、`src/streaming.ts`、`src/update-check.ts`、README 的提供方与流媒体说明。\n\n**发现：** 插件会主动访问 `dmhy.org`、`mikanani.me`、`anibt.net`、`animes.garden`，并向 `api.bgm.tv` 请求番剧元数据；检查版本时还会访问 GitHub Releases。用户搜索词、目标资源 URL、请求时间、来源 IP 等会被相应第三方服务器看到。流媒体功能支持 HLS/MP4、Cookie 和额外请求头，属于更敏感的网络面。\n\n项目声明 `allow_direct_non_local_hosts` 默认关闭，并对代理链接实施来源限制：只接受搜索结果返回的链接、同源跳转以及受信 m3u8 清单发现的子资源。v0.1.4 Release 也明确提到 Host 侧代理具有 allowlist 和 HLS 清单改写。不过，自定义规则允许增加 `allowed_hosts`、`cookies`、`extra_headers`；如果导入不可信规则，仍可能把凭据或请求内容发送到错误主机。([github.com](https://github.com/cocofhu/anime-find/releases))\n\n**风险程度：中。** 数据外发是其业务功能的一部分，不是隐藏窃密，但用户不能把它当作离线插件。\n\n### 3. 敏感文件和凭据读取\n\n**检查内容：** `src/config-store.ts`、`src/host.ts`、配置存储说明和工具参数。\n\n**发现：** 未发现主动读取 `~/.ssh`、浏览器密码库、云厂商凭据目录或批量枚举环境变量 Token 的证据。默认搜索和元数据接口不要求 API Key。但插件支持通过 `DSH_MCP_CONFIG_DIR` 定位 `~/.dsh/mcp/configs`，并能写入自己的 JSON 配置。媒体规则还允许保存 Cookie 和额外 HTTP Header，因此配置文件本身可能变成敏感资产。\n\n**证据片段：** README 给出的默认路径为 `~/.dsh/mcp/configs`；`anime_find_configure` 会将配置持久化并请求宿主重启。\n\n**风险程度：中低。** 没有发现主动窃取凭据，但用户不应在规则中复用 GitHub Token、公司统一 Authorization 或其他高价值凭据。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** `package.json`、`pnpm-lock.yaml`、运行依赖和构建依赖。\n\n**发现：** 直接运行依赖只有 `@anime-find/anime-toolkit` 和 `@modelcontextprotocol/sdk`，数量较少；但二者都使用 `^` 版本范围。尤其是 `@anime-find/anime-toolkit`，其名称及 README 架构表明搜索、站点解析和流媒体规则的核心逻辑已抽到外部包。该包并不位于本仓库内，所以本报告不能替它背书。即使 anime-find 自身代码安全，只要该依赖后续版本被错误发布、账号被接管或安装解析发生漂移，运行行为仍可能变化。\n\n**证据：** `package.json:53-56`：`@anime-find/anime-toolkit: ^0.1.4`、`@modelcontextprotocol/sdk: ^1.13.3`；开发依赖同样为范围版本。\n\n**风险程度：中。** 建议 MyDSH 发布时固定审核过的依赖版本和完整性哈希，而不是只跟随范围版本。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** 仓库结构、`src/`、`lib/`、发布记录和提交签名状态。\n\n**发现：** 源码采用正常的 TypeScript 模块结构，文件职责可辨识，没有发现加密字符串还原、超长 Base64 载荷、下载后二次执行、匿名远控通道或原生二进制文件入口。`lib/` 是构建输出，不应脱离 `src/` 单独信任；发布前仍应执行源码与构建产物差异检查。最新 v0.1.4 关联提交在 GitHub 上显示为已验证签名，这能提高发布来源可信度，但不能替代代码审计。([github.com](https://github.com/cocofhu/anime-find/releases))\n\n**风险程度：低。** 当前没有后门或刻意混淆迹象。\n\n### 6. 权限越界\n\n**检查内容：** `src/host.ts`、`src/config-store.ts`、`src/http.ts`、`src/streaming.ts`、配置及媒体代理能力。\n\n**发现：** 插件没有显示出 root、sudo、系统服务安装、任意文件删除或通用终端执行能力。但它并非纯查询插件：能够写入 DSH 配置、请求重启 MCP 服务，并由 Host 代理远程媒体、HLS 清单、密钥 URI、Cookie 和请求头。若代理 allowlist、DNS 解析或重定向校验存在实现缺陷，理论上可能形成 SSRF 或内网探测面；项目声明已实施 allowlist 和同源限制，因此当前将其视为残余风险，而不是已证实漏洞。([github.com](https://github.com/cocofhu/anime-find/releases))\n\n**风险程度：中低。** 权限与功能基本匹配，但明显高于普通的只读信息查询插件。\n\n## 风险点汇总\n\n1. 搜索关键词和请求元数据会发送给多个第三方动漫站及 Bangumi。\n2. Host 媒体代理是关键安全边界；配置错误或实现缺陷可能导致 SSRF、内网访问或请求头泄漏。\n3. 自定义规则支持 Cookie、额外 Header 和主机白名单，不可信规则可能扩大数据外发范围。\n4. 核心逻辑依赖仓库外的 `@anime-find/anime-toolkit`，本仓库安全不代表完整依赖链安全。\n5. 依赖使用 `^` 范围，未在发布清单中固定到唯一版本与完整性哈希。\n6. 插件可以写入 DSH 配置并请求宿主重启，权限高于纯只读搜索工具。\n\n## 结论与使用建议\n\n**最终结论：不是恶意插件，但不能无条件放心使用。** 普通个人用户可以在隔离的 MyDSH/DeepSeek Harness 环境中安装测试；不建议直接部署到能够访问公司内网、生产数据库、云元数据服务或高价值 Token 的主机。\n\n建议安装时固定 `v0.1.4` 或提交 `f619e35b609e40d28e6cc70367651595d7224530`，继续保持 `allow_direct_non_local_hosts=false`，不要导入来源不明的流媒体规则，不要在 `extra_headers` 或 Cookie 中写入可跨站使用的长期凭据，并对 `@anime-find/anime-toolkit` 做独立源码与发布包审查。满足这些条件后可以使用；若无法做到依赖固定和网络隔离，则应暂缓发布到 MyDSH 的无提示自动安装渠道。\n","action":"review","reviewed_at":"2026-08-17T13:29:03.851288+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":66,"score_type":"safety","review_status":"complete"},{"full_name":"Ychris12138/dsh-usage-stats","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-20T12:07:56Z","summary":"未见恶意后门，但会读取本地凭据并访问外部账户接口，建议复核后使用。","details":["代码执行：检查 package.json、scripts/install.mjs、lib/index.js 和 cordis.patch.yml，未发现 eval、Function、child_process、exec、spawn、curl|sh 或自动 postinstall。安装器仅使用 Node.js 文件 API部署插件并更新 Cordis 配置，风险低。","数据外发：浏览器端 lib/client.js 只访问本机插件的相对路径；服务端会根据功能需要向阿里云百炼、DeepSeek、智谱等账户服务发送 API Key 或 Cookie。该行为与余额、订阅查询功能一致，但属于敏感凭据外发边界，风险中等。","敏感读取：插件明确支持从 ~/.local/share/opencode/auth.json、OpenCode Go cookies.json 等位置读取凭据，并在内存中暂存用户提交的密钥。未发现读取 ~/.ssh，但自动发现凭据扩大了插件被篡改后的影响范围，风险中等。","依赖风险：package.json 没有运行时 dependencies，开发依赖主要为 React 测试工具；没有 preinstall、install、postinstall、prepare 等自动生命周期脚本，供应链暴露面较小。","混淆与后门：已读取的 JS、MJS、YAML 均为可读源码，未发现 Base64 载荷、动态解码执行、远程脚本下载、隐藏矿工、反调试或长段不可解释压缩代码，风险低。","权限越界：安装器会写入 ~/.dsh/plugins/dsh-usage-stats、修改 ~/.dsh/cordis.patch.yml 并创建备份，这是安装插件所需权限；未发现修改 shell 配置、SSH 配置、系统服务或全局启动项。由于凭据读取和外部请求实现未全部获得同一最新提交的完整源码快照，暂不建议直接自动发布。"],"report_md":"## 安全评分\n\n**66/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对 `Ychris12138/dsh-usage-stats` 的安装行为、本地服务、前端代码、账户统计逻辑、凭据处理和依赖配置进行了检查。综合结论是：**没有发现恶意后门、任意命令执行或隐蔽上传行为，但插件需要读取本地 AI 服务凭据，并将凭据发送给相应服务商的账户接口，因此不属于可以无条件信任的纯离线统计工具。建议谨慎使用，并在确认安装来源和目标域名后启用。**\n\n安全评分为 **66/100**，需要注意，属于中等风险区间**。这里的中等风险主要来自功能本身的凭据权限，而不是已发现恶意代码。\n\n## 评估对象\n\n- 仓库：`Ychris12138/dsh-usage-stats`\n- 评估分支：`main`\n- 仓库类型：Node.js Cordis 插件\n- 主要文件：`package.json`、`cordis.patch.yml`、`lib/index.js`、`lib/client.js`、`lib/usage.js`、`lib/accounts.js`、`lib/balance.js`、`lib/subscriptions.js`、`scripts/install.mjs`\n- 仓库规模：当前页面显示约 18 次提交，核心实现集中于 `lib/`，安装和测试工具集中于 `scripts/`；根目录未发现 `src/`。\n- 时间核验限制：已访问指定 GitHub REST API 地址，但本次 Web 抓取未返回可解析的 `pushed_at` JSON 正文，因此没有伪造秒级时间，`updated_at` 保留为空。由于无法把所有文件固定到同一个已确认提交 SHA，本报告结论应先进入人工复核，不能直接自动发布。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 的 npm scripts 和 bin 配置、`scripts/install.mjs`、`lib/index.js`、`cordis.patch.yml`，并检索命令执行、动态执行和远程脚本安装模式。\n\n**发现：** 未发现 `eval`、`new Function`、`child_process.exec`、`execSync`、`spawn`、`curl | sh`，也没有 `preinstall`、`install`、`postinstall` 或 `prepare` 自动生命周期脚本。`scripts/install.mjs:3-7` 只引入 `fs`、`path`、`os` 和 URL 工具；`scripts/install.mjs:78-86` 负责复制插件文件、设置入口文件权限并更新 Cordis 配置，没有启动外部命令。\n\n**风险程度：低。** 安装器具有文件写权限，但没有发现任意代码执行链。\n\n### 2. 数据外发\n\n**检查内容：** `lib/client.js` 的全部 `fetch` 调用、`lib/index.js` 的 API 路由、README 中声明的服务商接口和订阅来源。\n\n**发现：** `lib/client.js:443-494` 使用 `/api/usage`、`/api/accounts`、`/api/balance`、`/api/subscriptions` 等相对地址，没有让浏览器直接向未知第三方传输数据。服务端 `lib/index.js:453-505` 会调用余额及订阅收集函数，并向响应返回经过掩码的账户信息。仓库说明列出的外部目标包括阿里云百炼、DeepSeek、智谱和 OpenCode Go 等官方账户服务；API Key 或 Cookie 会随账户查询请求发送到对应服务商。\n\n**风险程度：中。** 外发是功能所需，但凭据一旦被发送到非预期域名，后果较严重。用户应通过代理日志或防火墙确认实际目标与文档声明一致。\n\n### 3. 敏感读取\n\n**检查内容：** 用户目录访问、凭据发现逻辑、请求参数保存方式，以及是否读取 SSH、浏览器密码库或无关应用数据。\n\n**发现：** 插件明确支持读取 `~/.local/share/opencode/auth.json` 和 OpenCode Go 的 `cookies.json`，并可接收用户手工提交的 API Key。`lib/index.js:78-93` 使用内存 Map 保存运行期密钥；`lib/index.js:207-245` 会从请求中提取 key、secret、cookie 等字段，并将展示值转换为掩码。当前已读代码中未发现访问 `~/.ssh`、系统钥匙串、浏览器密码数据库或云厂商 CLI 凭据目录。\n\n**风险程度：中。** 凭据读取符合插件用途，但意味着插件被篡改后可能直接接触有效账户令牌。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、锁文件存在情况、运行时依赖、开发依赖和 npm 生命周期。\n\n**发现：** 包没有声明运行时 `dependencies`，开发依赖主要用于 React 组件测试；没有自动安装钩子。核心服务使用 Node.js 内置模块实现，降低了传递依赖投毒和恶意安装脚本风险。仓库保留 `package-lock.json`，有利于固定开发环境版本。\n\n**风险程度：低。** 正式发布前仍应对锁定提交运行 `npm audit --omit=dev`，并核对最终 npm 包文件清单。\n\n### 5. 混淆与后门\n\n**检查内容：** 大段编码字符串、Base64 解码执行、动态模块加载、远程代码下载、不可解释的定时器、矿工特征和隐藏网络通道。\n\n**发现：** `lib/client.js`、`lib/index.js`、`lib/usage.js` 和 `scripts/install.mjs` 均为结构清晰的可读源码。没有发现动态执行、加密载荷、远程加载 JavaScript、WebSocket 隐蔽通道或故意混淆。`lib/usage.js:82-230` 主要进行日志聚合、模型统计和成本计算。\n\n**风险程度：低。** 当前证据不支持将仓库判断为恶意。\n\n### 6. 权限越界\n\n**检查内容：** 安装路径、配置修改范围、文件权限、服务监听和账户接口暴露。\n\n**发现：** `scripts/install.mjs:13-15` 将目标限制在 `~/.dsh/plugins/dsh-usage-stats` 和 `~/.dsh/cordis.patch.yml`；`scripts/install.mjs:39-63` 在覆盖配置前创建 `.bak` 备份；`cordis.patch.yml:1-15` 只注册插件。没有发现修改 `~/.ssh`、shell profile、LaunchAgent、systemd、sudoers 或系统网络配置。\n\n**风险程度：低到中。** 文件权限本身合理，但本地管理接口可触发凭据查询，必须确认服务未暴露到不可信网络。\n\n## 风险点汇总\n\n1. 插件会读取真实 API Key 或 Cookie，攻击面高于普通只读 UI 插件。\n2. 余额和订阅功能需要向第三方官方接口发送凭据，应验证域名白名单、HTTPS 和重定向处理。\n3. 密钥虽然以掩码返回前端，但运行期仍以明文存在于 Node.js 内存。\n4. 本次 GitHub API 的 `pushed_at` 和完整递归文件树未能获得可解析响应，无法证明所有文件均来自同一个不可变提交快照。\n5. 没有发现任意代码执行、混淆后门、SSH 读取或自动 npm 安装脚本。\n\n## 结论与使用建议\n\n**最终结论：存在风险，建议谨慎用，不建议直接列为“放心用”。** 现有代码表现为正常的 DSH 用量和账户统计插件，没有恶意软件特征；主要风险来自它主动处理本地账户凭据并访问外部服务。建议 MyDSH 在发布前固定提交 SHA，重新读取 `lib/accounts.js`、`lib/balance.js`、`lib/subscriptions.js` 的完整最新版本，确认仅允许 HTTPS、禁止任意 URL、拒绝重定向到私网地址，并验证监听地址只面向本机。完成这些检查后，若源码与当前已审内容一致，可将建议调整为“放心用”。\n","action":"review","reviewed_at":"2026-08-17T14:36:58.115673+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":66,"score_type":"safety","review_status":"complete"},{"full_name":"HanaAyane/dsh-reasoning-effort","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T22:39:01Z","summary":"未见恶意实锤，但关键源码未完成核验，当前不能放心安装","details":["代码执行：仓库包含 package.json、cordis.patch.yml、src/、lib/、scripts/ 等重点对象，但本轮未取得这些文件的完整正文，无法逐行排除 exec、eval、child_process、curl|sh 及 install/postinstall。SECURITY.md 自述发布包无安装钩子，但自述不能替代源码核验，风险程度为中。","数据外发：SECURITY.md 声明插件不连接互联网、不使用遥测和第三方 API；README 描述的主要行为是读取宿主模型目录、会话状态并切换模型。目前没有发现数据外发证据，但 src/ 和 lib/ 未能逐行验证，因此只能作为低至中风险结论。","敏感读取：已读取文档没有要求 SSH 文件、DSH 凭据、Codex 配置或环境 Token，安全说明也声明不需要 Token；但缺少对 fs、os.homedir、process.env 等调用的源码搜索结果，不能确认完全不存在敏感读取，风险程度为低至中。","依赖风险：package.json 存在，但 dependencies、devDependencies、scripts 及锁文件无法核验；安装流程会安装版本化 dsh.bundle，构建产物和源码之间的一致性也未得到证明。因此供应链部分尚未满足“放心用”条件，风险程度为中。","混淆或后门：仓库同时包含 src/ 与 lib/，需要比较源码和构建产物，并扫描大段 Base64、动态 Function、压缩代码、反向 Shell 和挖矿特征。本轮未发现明确恶意证据，但因文件正文不可核验，不能把“未发现”解释为“确定不存在”，风险程度为中。","权限越界：README 明确说明插件会接入宿主 HostServices、读取模型目录和会话状态、调用 session.selectModel/model.select，并暴露 globalThis.dshReasoningEffort。该权限与插件用途基本一致，但能够改变当前会话模型和界面状态，仍应在隔离环境验证，风险程度为低至中。"],"report_md":"## 安全评分\n\n**65/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# HanaAyane/dsh-reasoning-effort 安全分析报告\n\n## 概述\n\n本报告依据《MyDSH 安全报告标准》从代码执行、数据外发、敏感读取、依赖风险、混淆或后门、权限越界六个维度进行审查。综合结论为：**存在风险，用户应谨慎用，当前不能视为可以放心安装的插件**。安全评分为 **65/100**，需要注意，对应中等审查风险。\n\n需要强调：本次没有发现木马、凭据窃取、挖矿或远程控制的明确证据；当前结论主要由**关键源码和构建产物未能完成逐行核验**所导致。按照 MyDSH 标准，缺少证据不能反向证明安全，因此不能发布“通过/放心用”结论。\n\n## 评估对象\n\n- 仓库：`HanaAyane/dsh-reasoning-effort`\n- 评估分支：`main`\n- 元数据更新时间：`2026-08-16T22:39:01Z`\n- 可见版本：`v0.6.0`\n- 仓库规模：GitHub 页面显示约 11 次提交，根目录包含 `.github/`、`docs/`、`lib/`、`scripts/`、`src/`、`package.json`、`cordis.patch.yml`、`README.md`、`SECURITY.md` 等对象；语言以 TypeScript、CSS 和 JavaScript 为主。\n\n`main` 是仓库页面当前选中的分支。更新时间取自 MyDSH 于 2026-08-17 刷新的 GitHub 仓库元数据缓存（`assets/plugins.json:42150-42157`）。本轮公开仓库 API 和关键文件正文未返回可核验内容，因此未能把该时间与分支最新提交的 `pushed_at` 独立交叉验证；这也是报告进入 `review` 而非 `release` 的原因之一。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 的 scripts、依赖和安装钩子，`scripts/` 中的 Shell/Node 脚本，`src/` 与 `lib/` 中的 `child_process`、`exec`、`spawn`、`eval`、`Function`，以及 `curl | sh`、`wget`、preinstall/postinstall 等模式。\n\n**发现：** 仓库根目录确认存在 `package.json`、`scripts/`、`src/` 和 `lib/`，但本轮无法取得其完整内容，不能逐行排除命令执行。`SECURITY.md` 自述版本化安装包不包含 install hooks，运行时也不执行包管理器安装脚本；这属于维护者声明，不能替代对 `package.json` 和发布包的独立验证。\n\n**证据：** `SECURITY.md`（GitHub 渲染页 L272-L284）；仓库根目录文件列表（GitHub 渲染页 L141-L154）。\n\n**风险程度：中。** 没有命令执行实锤，但核心排查项尚未被代码证据关闭。\n\n### 2. 数据外发\n\n**检查内容：** `fetch`、Axios、HTTP/HTTPS、WebSocket、Beacon、遥测 SDK、Webhook，以及硬编码第三方域名。\n\n**发现：** `SECURITY.md` 声明插件是 network-free、无遥测、无第三方 API；README 描述的主要行为是通过宿主服务读取模型目录、当前会话和当前模型，而不是连接外部服务。 但由于 `src/` 和编译后的 `lib/` 未能完成检索，不能确认不存在隐藏请求、动态域名或运行时拼接 URL。\n\n**证据：** `SECURITY.md`（GitHub 渲染页 L279-L284）；`README.md`（GitHub 渲染页 L123-L126）。\n\n**风险程度：低至中。** 未发现外发证据，但结论仍依赖未经源码验证的项目声明。\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、`~/.codex`、云服务凭据、浏览器数据、`process.env` 中的 Token，以及 `os.homedir()`、`fs.readFile`、目录遍历等能力。\n\n**发现：** 当前文档没有要求用户提供 Token、SSH 文件或 DSH 凭据，安全说明声明插件不需要 Token。 但是没有取得源码级 `fs`、`process.env` 和 home 目录调用清单，故不能确认所有路径均未读取敏感数据。\n\n**证据：** `SECURITY.md`（GitHub 渲染页 L279-L284）；关键源码无可核验行号，此缺口本身计入审查风险。\n\n**风险程度：低至中。** 暂无敏感读取迹象，但证据不完整。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json` 的 dependencies、devDependencies、peerDependencies、Git URL 依赖、预发布依赖、名称近似包、锁文件、安装脚本及发布包来源。\n\n**发现：** `package.json` 可见，但正文和依赖树未成功读取；根目录可见列表中也没有得到可验证的锁文件证据。README 给出的安装流程会通过包管理器安装版本化 `dsh.bundle`，安全说明称该包由源码构建且不含安装钩子。 在没有依赖清单、构建流程、发布包哈希和源码—产物一致性验证的情况下，供应链风险尚未关闭。\n\n**证据：** `README.md`（GitHub 渲染页 L281-L284）；`SECURITY.md`（GitHub 渲染页 L272-L278）。\n\n**风险程度：中。** 主要问题是依赖和发布产物不可复核，而非已经发现恶意依赖。\n\n### 5. 混淆与后门\n\n**检查内容：** 对比 `src/` 与 `lib/`，扫描大段 Base64、十六进制字符串、动态解密、压缩单行代码、反向 Shell、挖矿地址、持久化任务和条件触发后门。\n\n**发现：** 当前仓库保留 `src/` 和 `lib/`，理论上具备进行源码与构建产物对照的条件；仓库页面也显示主要语言是 TypeScript、CSS 和 JavaScript。 但目录正文不可用，无法确认 `lib/` 是否与 `src/` 等价，也无法进行熵值、编码块和隐藏载荷扫描。现有材料中没有恶意后门实锤。\n\n**证据：** 仓库根目录文件列表和语言统计（GitHub 渲染页 L141-L181）；源码正文无可核验行号。\n\n**风险程度：中。** 不能判恶意，也不能给出已排除后门的保证。\n\n### 6. 权限越界\n\n**检查内容：** 文件写入、配置修改、安全机制禁用、宿主服务调用、全局对象污染、会话状态修改及静默持久化。\n\n**发现：** README 明确说明插件会接入 HostServices，读取模型目录、会话和当前模型；还会通过 `session.selectModel(...)` 或 `model.select(...)` 切换模型，并暴露 `globalThis.dshReasoningEffort` 调试入口。 这些行为与“模型及思考强度滑块”的用途基本一致，但意味着插件能够修改宿主当前会话状态，并向页面全局命名空间写入对象。安全说明声称不会写入宿主文件、禁用后可恢复，但仍缺乏源码验证。\n\n**证据：** `README.md`（GitHub 渲染页 L123-L126、L225-L241）；`SECURITY.md`（GitHub 渲染页 L298-L303）。\n\n**风险程度：低至中。** 权限与功能基本匹配，但应验证其作用域和卸载清理行为。\n\n## 风险点汇总\n\n1. **最主要风险是审计证据不完整：** `package.json`、`cordis.patch.yml`、`src/`、`lib/`、`scripts/` 没有完成逐行读取，因此六维度中的关键否定性结论无法成立。\n2. **发布包供应链未闭环：** 安装目标是构建后的 `dsh.bundle`，尚未验证其哈希、构建可复现性以及与 `src/` 的一致性。\n3. **插件具有宿主状态修改能力：** 能够切换当前模型、更新思考强度并暴露全局辅助对象；该能力看起来符合用途，但仍需确认不存在额外副作用。\n4. **没有发现恶意实锤：** 当前公开材料未显示数据窃取、远程命令、挖矿、反向 Shell 或绕过安全机制的明确证据，不能判定为恶意插件。\n\n## 结论与使用建议\n\n**明确建议：当前不能放心用，应谨慎用。** 不建议直接安装到包含重要会话、生产项目、私有源码或高价值 API 凭据的主力 DSH 环境。确有需要时，只应在隔离测试环境中使用，固定到已审查版本或提交，并监控安装期间的进程启动、网络连接、文件访问和宿主配置变化。\n\n在重新发布“通过”报告前，必须补齐以下工作：读取并审查 `package.json`、`cordis.patch.yml`、全部 `src/`、`lib/`、`scripts/` 和安装相关文件；核对依赖来源与安装钩子；比较源码和 `dsh.bundle`；扫描第三方域名、敏感路径、环境变量和动态执行；最后以仓库 API 的 `default_branch`、该分支最新提交时间及提交 SHA 固定评估对象。\n\n因此，本次处置为 **`review`**：保留展示但不授予“放心用/通过”标记，也不按恶意插件封禁。\n","action":"review","reviewed_at":"2026-08-17T14:03:52.540112+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":65,"score_type":"safety","review_status":"complete"},{"full_name":"Jayden-X-L/forkprobe","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14T10:07:32Z","summary":"未发现后门，但会外发任务并调用本机智能体，建议隔离后谨慎使用。","details":["代码执行：`scripts/platform_adapter.py` 会通过 `subprocess.run` 启动 Codex、Claude 等本机智能体。参数使用数组传递，未使用 `shell=True`，降低了命令注入风险；Codex 默认设置为只读沙箱，但可被 `FORKPROBE_CODEX_SANDBOX` 环境变量覆盖。","数据外发：在线推荐会访问 GitHub 和公共 Skill 注册源，并可能把用户输入的任务文本提交给远程发现服务；可通过 `FORKPROBE_DISCOVERY_OFFLINE=1` 关闭。平台智能体运行时还会将任务和 Skill 内容发送给用户配置的模型提供商。","敏感读取：未发现直接读取 `~/.ssh`、`~/.dsh`、浏览器凭据或系统密钥链的代码，但原生智能体子进程默认继承当前进程环境，并可能使用宿主智能体已有的认证配置，因此不应在含生产密钥的终端环境中直接运行不可信任务。","依赖风险：Python 核心脚本主要使用标准库；Node 包包含 `@deepseek-ai/agent-runtime`、TypeScript 和 Node 类型依赖，并提交了 `package-lock.json`。使用 `npx forkprobe-dsh install` 仍会执行远程发布包，应固定版本或提交哈希。","混淆与后门：在可读取源码中未发现 `eval`、动态解码执行、Base64 载荷、`curl | sh`、隐藏下载执行或 `shell=True`。仓库同时保留源码、测试、文档和构建目录，没有发现明显的恶意混淆结构。","权限越界：DSH 子 Agent 被设计为无工具文本评审，远程推荐结果不会自动安装；但 Codex 沙箱可配置放宽，Claude 原生调用未在命令层显式附加只读权限参数，因此最终权限仍取决于宿主智能体和操作系统账户。"],"report_md":"## 安全评分\n\n**64/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\nForkProbe 是一个用于让多个 Skill 在同一任务上并行执行、再由裁判比较结果并选择优胜者的智能体评测工具。仓库同时提供 Python 脚本、Codex/Claude 适配器、Web 报告、DSH 插件和 npm 安装入口。审查未发现窃密后门、隐藏持久化或恶意载荷，但该工具的核心能力本身包含启动本机智能体、向模型提供商发送任务内容以及可选的在线 Skill 发现，因此不能按照普通静态插件对待。\n\n**最终结论：可以在隔离、低权限、无敏感凭据的工作区内谨慎使用；不建议直接在生产代码库、密钥目录或拥有宽泛工具权限的智能体会话中运行。**\n\n## 评估对象\n\n- 仓库：`Jayden-X-L/forkprobe`\n- GitHub API 确认的默认分支：`main`\n- 分支最后更新时间：`2026-08-14T10:07:32Z`\n- 仓库规模：GitHub 页面显示约 82 次提交、5 个 Release，主要代码位于 `scripts/`、`dsh-plugin/src/`、`dsh-plugin/lib/`，另包含 `tests/`、`docs/`、`dist/` 和安装包目录；主要语言为 Python，并包含 JavaScript、HTML 和 TypeScript。\n- 重点检查文件：`package.json`、`package-lock.json`、`dsh-plugin/cordis.patch.yml`、`dsh-plugin/src/`、`dsh-plugin/lib/`、`scripts/compare.py`、`scripts/platform_adapter.py`、`scripts/recommend.py`、安装说明与 `SECURITY.md`。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `scripts/compare.py`、`scripts/platform_adapter.py`、`package.json`、DSH 安装入口及插件桥接代码。\n\n**发现：** ForkProbe 确实会执行本机程序，这不是静态分析工具。`scripts/platform_adapter.py:L337-L399` 通过 `subprocess.run` 启动 Codex 或 Claude，并把任务和候选 Skill 内容放入提示词。调用采用参数数组而非 shell 字符串，未见 `shell=True`、`os.system`、`eval` 或 `exec`，因此没有发现直接的 shell 注入链。Codex 路径默认传入只读沙箱，但 `FORKPROBE_CODEX_SANDBOX` 可以覆盖该值。Claude 路径使用类似 `[executable, '--print', prompt]` 的调用，没有在命令层明确强制只读模式。\n\n`scripts/compare.py:L97-L121` 还会启动本地结果服务器并调用 `webbrowser.open` 展示比较页面；证据片段包括 `subprocess.run(cmd, check=False)` 和本地报告 URL。该行为符合产品功能，未发现远程命令下载后立即执行。\n\n**风险程度：中等。** 风险来自其预期的智能体执行能力，而非已确认的恶意代码。\n\n### 2. 数据外发\n\n**检查内容：** `scripts/recommend.py`、`scripts/candidate_providers.py`、在线发现说明、平台适配器和安全文档。\n\n**发现：** `scripts/recommend.py` 引入 `http.client` 和 `urllib.parse`，在线发现模式会访问 GitHub及公共 Skill 注册源。仓库安全说明明确表示在线发现会向远程提供方发送用户输入的任务文本，并提供 `FORKPROBE_DISCOVERY_OFFLINE=1` 作为关闭开关。也就是说，如果任务中包含内部项目名称、未公开需求、客户数据或代码片段，这些内容可能离开本机。\n\n此外，Codex、Claude 或其他模型后端会按用户自身配置把任务和 Skill 文本发送到相应模型服务。未发现额外的隐蔽遥测、自动上传输出目录或静默发送本地文件的实现；Web 报告使用本地临时目录和本地服务。\n\n**风险程度：中等。** 建议默认启用离线发现，并对提示词做脱敏。\n\n### 3. 敏感信息读取\n\n**检查内容：** 对 `~/.ssh`、`~/.dsh`、环境变量、认证配置、Token、密钥链和用户主目录访问进行检索，并审查子进程环境处理。\n\n**发现：** 在可读取源码中未发现直接打开 `~/.ssh`、`~/.dsh`、浏览器 Cookie、系统密钥链或任意 Token 文件的代码，也没有发现枚举整个用户主目录并上传的逻辑。仓库安全文档同样要求不要向任务或 Skill 内容传入不必要的凭据。\n\n但 `subprocess.run` 未传入经过白名单过滤的 `env`，因此原生智能体进程会继承父进程环境。插件本身不一定读取这些变量，但被启动的 Codex、Claude 或其扩展仍可能访问自己的认证配置。若用户把高权限 Token 放在环境变量中，隔离边界将依赖宿主智能体而不是 ForkProbe。\n\n**风险程度：中低。** 没有发现主动窃取，但存在环境继承造成的间接暴露面。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`package-lock.json`、Python import、DSH 插件依赖声明和安装方式。\n\n**发现：** Python 执行层主要使用标准库，未发现 `requirements.txt` 中的大量未知依赖，供应链面相对有限。Node 包的仓库元数据显示使用 `@deepseek-ai/agent-runtime`，并包含 TypeScript、`@types/node` 和锁文件；DSH 说明将插件描述为较薄的运行时桥接层。\n\n风险主要来自 `npx forkprobe-dsh install`：`npx` 会获取并执行发布者控制的 npm 包。即使当前 GitHub 源码未发现恶意逻辑，也不能自动证明未来 npm 同名版本或构建产物始终与仓库源码一致。未发现 `curl | sh` 安装方式；在本次可读取的仓库材料中也未识别到可疑 `postinstall` 行为。\n\n**风险程度：中低。** 应锁定明确版本或 Git 提交，并核验 npm 包来源和完整性。\n\n### 5. 混淆与后门\n\n**检查内容：** Base64/十六进制载荷、动态代码生成、压缩混淆、隐藏域名、反调试、持久化、计划任务和自删除逻辑。\n\n**发现：** 在 Python 核心执行路径中未发现 `eval`、`exec`、动态反序列化执行、Base64 解码后执行、隐藏二进制下载、反向 Shell、LaunchAgent、cron 或修改启动项。子进程命令和在线发现行为均以可读源码及文档公开说明。仓库包含测试、产品契约、安全说明及源码目录，不呈现典型后门仓库只提交压缩产物的结构。\n\n`dist/` 和 `dsh-plugin/lib/` 属于构建产物，发布前仍应执行源码与构建产物的一致性检查；本次没有证据表明这些目录包含恶意载荷。\n\n**风险程度：低。** 未发现恶意混淆或持久化后门证据。\n\n### 6. 权限越界\n\n**检查内容：** DSH 子 Agent 工具权限、Codex 沙箱、Claude 调用、在线候选 Skill 的安装行为及工作区访问范围。\n\n**发现：** DSH 工作流明确说明子 Agent 无工具，只能基于文本内容进行判断；远程发现只返回候选项，不会自动安装或执行远程 Skill。这两项设计显著降低了推荐阶段的权限越界风险。\n\nCodex 原生执行默认使用 `read-only` 沙箱，但该值可被环境变量覆盖。Claude 调用未显示等价的强制只读参数。所有原生智能体都以当前操作系统用户身份启动，因此如果宿主智能体本身具备写文件、联网、执行命令或读取用户配置的能力，ForkProbe 不会自动建立完整的系统级安全边界。\n\n**风险程度：中等。** 安全性高度依赖所选后端、环境变量和宿主权限配置。\n\n## 风险点汇总\n\n1. 在线发现可能把完整任务文本发送给 GitHub或公共 Skill 注册源。\n2. 核心功能会启动 Codex、Claude 等本机智能体，权限取决于宿主配置。\n3. Codex 只读沙箱可以被环境变量覆盖；Claude 调用未显式强制只读。\n4. 子进程继承父进程环境，可能间接接触 API Token 或智能体认证状态。\n5. `npx` 安装方式存在常规 npm 供应链和源码—构建产物一致性风险。\n6. 未发现后门、隐蔽遥测、敏感目录主动扫描、`curl | sh`、shell 注入或持久化行为。\n\n## 结论与使用建议\n\n**结论：存在可控但真实的安全风险，不属于恶意仓库。用户可以使用，但不能无条件放心使用。**\n\n建议采取以下措施：\n\n- 固定 Git 提交哈希或明确 npm 版本，不使用浮动的 latest 安装。\n- 首次运行设置 `FORKPROBE_DISCOVERY_OFFLINE=1`，确认确有需要后再启用在线发现。\n- 保持 `FORKPROBE_CODEX_SANDBOX=read-only`，不要改成允许写入或无隔离模式。\n- 在临时副本、容器或无敏感文件的专用工作区运行，不要直接指向生产仓库。\n- 启动前清理不必要的 API Token、云凭据和部署密钥环境变量。\n- 对 Claude 等未在命令层强制只读的后端，使用宿主平台的权限拒绝或人工确认机制。\n- 不要把包含客户资料、私有源码、密钥或内部业务信息的原始任务提交给在线推荐服务。\n\n在完成上述隔离和固定版本措施后，可用于本地 Skill 对比与评测；若无法提供隔离环境或准备处理敏感项目，则不建议安装运行。\n","action":"review","reviewed_at":"2026-08-17T13:54:15.375696+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":64,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-open-in-vscode","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T05:24:02Z","summary":"未见恶意证据，但主机命令执行与路径授权仍需复核。","details":["代码执行：插件的核心能力是在 DSH 主机上启动配置的 VS Code CLI，因此具备真实的本机进程执行权限。公开说明称使用独立子进程启动编辑器，build.mjs 还在构建阶段通过 execFileSync 调用 tsc；package.json 未定义 preinstall、install、postinstall 或 prepare。未发现 eval、new Function 或 curl|sh，但运行时 src/lib 未能完成逐行复核，风险程度为中。","数据外发：已读取的 package.json、dsh.plugin.json、cordis.patch.yml、README 和构建配置中没有遥测、分析平台、Webhook、上传接口或固定第三方业务域名；运行依赖仅声明 zod，客户端功能描述为调用同一 DSH 插件的 Typert remote。现有证据未显示工作区路径或文件内容被发送给第三方，风险程度为低，但受 src/lib 审计覆盖不足影响，不能作绝对零外发保证。","敏感读取：插件清单没有注册 tools 或 skills，公开能力边界称插件本身不读写项目文件，remote 参数仅包含工作区目录。已检查的根文件中未发现 ~/.ssh、~/.dsh、密钥文件、Cookie、API token 或批量环境变量读取痕迹。由于实际启动的 VS Code 会按用户权限访问工作区，这属于编辑器正常行为而非插件主动窃取；风险程度为低。","依赖风险：package.json 的直接运行依赖只有 zod；Cordis、Typert、React 等均标记为可选 peer dependency。pnpm-lock.yaml 固定了 zod 4.4.3，并关闭自动安装 peer dependencies。未设置安装生命周期脚本，且 lib 已随仓库提交，降低了安装时执行任意构建脚本的概率。不过官方安装示例使用可变 Git 标签压缩包而不是不可变 commit SHA，也没有给出 SHA-256 校验值，存在供应链可追溯性不足，风险程度为中低。","混淆与后门：build.mjs 使用 esbuild 对 src 下的 TypeScript 入口进行打包，并开启 sourcemap；没有启用压缩或混淆参数。仓库同时公开 src、lib、tests、构建文件和清单，已读取文件中没有 Base64 载荷、加密解包、自修改、动态下载执行或隐藏启动逻辑。由于 GitHub 当前未成功返回嵌套 src/lib 文件正文，本项只能判定为未发现后门证据，不能等同于完成全部字节级排除；风险程度为低、审计置信度为中。","权限越界：dsh.plugin.json 只声明一个 openInVscode/open remote 和一个工作区 UI 插槽，没有额外工具或技能权限，权限面相对集中。但 remote 会把目录交给配置的 command/args，并在主机上启动进程；公开资料只明确拒绝相对路径，未提供可核验的服务端证据证明目录必须属于当前已授权工作区，也未展示 canonical path、符号链接边界、调用频率或用户手势校验。单用户本机环境可控，在共享或公网 DSH 环境中则可能成为启动任意编辑器参数、打开非预期绝对路径或制造进程骚扰的入口，风险程度为中。"],"report_md":"## 安全评分\n\n**64/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：dsh-open-in-vscode\n\n## 概述\n\n本次审查对象为 `omdsh-dev/dsh-open-in-vscode`。该插件的功能目标明确：在 DSH 工作区界面增加“在 VS Code 中打开”入口，并由服务端插件在 DSH 主机上启动配置的编辑器命令。仓库公开结构较小，GitHub 页面可见 `assets/`、`screenshots/`、`lib/`、`src/`、`tests/`，以及 `package.json`、`dsh.plugin.json`、`cordis.patch.yml`、`build.mjs`、`pnpm-lock.yaml` 等文件，共显示 11 次提交。当前包和插件清单版本均为 `0.1.6`。\n\n综合结论为：**未发现恶意代码或主动窃取数据的证据，但插件具备真实的主机进程启动能力，服务端路径授权边界和发布包不可变性仍缺少充分证明，因此暂不建议直接按“完全放心”发布。** 安全评分为 **64/100**，需要注意，落在 MyDSH 标准的中风险区间，建议进入人工复核。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-open-in-vscode`\n- 评估分支：`main`，GitHub 文件树当前明确选中该分支。\n- 当前版本：`0.1.6`。\n- 可见规模：11 次提交，3 个核心代码/测试目录，以及构建、插件清单、锁文件和双语文档。\n- `pushed_at`：本次访问 GitHub 仓库 API 时未取得可审计的 JSON 响应，因此无法诚实填写精确 ISO 时间，`updated_at` 保留为 `null`。不能用页面抓取日期或当前日期冒充 API 的精确 `pushed_at`。\n- 审查范围：已读取仓库根结构、`package.json`、`dsh.plugin.json`、`cordis.patch.yml`、`build.mjs`、`pnpm-lock.yaml`、`README.md`、`README.zh.md` 和 `AGENTS.md`；确认了 `src/`、`lib/`、`tests/` 的存在及构建入口，但 GitHub 当前未成功返回这些嵌套目录的文件正文。因此本报告对根级供应链和权限模型的判断可靠，对运行时代码的逐行覆盖度有限。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 的生命周期脚本、`build.mjs` 的系统命令调用、README/AGENTS 描述的运行时进程模型、插件配置中的 `command` 和 `args`。\n\n**发现：** 插件的核心能力本身就是代码执行：用户点击按钮后，服务端会在 DSH 主机上启动 VS Code CLI。公开说明称采用独立子进程启动编辑器；`build.mjs` 在开发构建阶段还通过 `execFileSync` 调用本地 `tsc`。这不是隐藏后门，而是产品功能，但它使插件天然处于高权限边界。`package.json` 仅有 `build`、`typecheck`、`test`、`lint`、`check`，没有 `preinstall`、`install`、`postinstall` 或 `prepare`，未见安装阶段自动执行。\n\n**证据：**\n- `README.zh.md:1-77`：描述服务端在 DSH 主机上产生独立编辑器子进程。\n- `build.mjs:1-62`：`execFileSync(\"node_modules/.bin/tsc\", [\"--project\", \"tsconfig.json\", \"--emitDeclarationOnly\"])`，属于开发构建命令。\n- `package.json` 的 `scripts` 代码片段：仅包含 build/typecheck/test/lint/check。\n\n**风险程度：中。** 风险来自设计所需的主机进程权限，而不是已发现的恶意执行。\n\n### 2. 数据外发\n\n**检查内容：** 第三方域名、网络 SDK、遥测或分析依赖、remote 调用方向、安装链接。\n\n**发现：** 公开清单没有 axios、undici、遥测 SDK、云存储或日志上报依赖；直接运行依赖只有 `zod`。客户端被描述为调用同一插件的 Typert remote，未发现将路径、文件或凭据发送到第三方服务的声明。README 中出现的 GitHub 和 VS Code 文档地址属于安装或说明链接，不是运行时外发端点。\n\n**证据：**\n- `package.json` 的 `dependencies`：仅有 `zod`。\n- `dsh.plugin.json:1-13`：仅声明插件入口、remote 和 workspace 插槽。\n- `cordis.patch.yml:1-6`：只定义本地编辑器 `command` 与 `args`。\n\n**风险程度：低。** 当前没有主动外传证据；因运行时正文未完全取得，结论不是绝对零外发证明。\n\n### 3. 敏感信息读取\n\n**检查内容：** SSH 密钥、DSH 凭据、环境 token、用户主目录、浏览器数据、工作区文件读取能力。\n\n**发现：** 已读取文件中未出现 `~/.ssh`、`~/.dsh`、API token、Cookie、credential、secret 扫描或主目录遍历逻辑。插件清单的 `contributes.tools` 和 `contributes.skills` 均为空；公开能力边界称插件只接收工作区目录，不自行读取或写入项目文件。\n\n**证据：**\n- `dsh.plugin.json` 代码片段：`tools: []`、`skills: []`。\n- `README.zh.md:37-41`：声明插件只把工作区目录传给编辑器命令。\n\n**风险程度：低。** VS Code 被启动后会按当前系统用户权限访问工作区，但这是编辑器自身的预期行为，不构成插件主动收集敏感信息的证据。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** 直接依赖、peer dependency、锁文件、安装生命周期、发布物组成和安装来源。\n\n**发现：** 唯一直接运行依赖为 `zod ^4.4.3`；Cordis、Typert、React、DSH 等均为可选 peer dependency。锁文件固定 `zod 4.4.3`，并配置 `autoInstallPeers: false`。构建后的 `lib` 被直接纳入发布文件，安装时不需要执行 TypeScript 或 esbuild。\n\n主要供应链问题是安装示例使用 `refs/tags/v0.1.6.tar.gz`，标签理论上可被仓库维护者移动，文档也没有提供 commit SHA 或 SHA-256 校验值。对于会在主机上启动进程的插件，只固定标签不足以达到高保证供应链标准。\n\n**证据：**\n- `package.json`：`files` 包含 `lib`，无安装生命周期脚本。\n- `pnpm-lock.yaml`：锁定 zod 版本并关闭 peer 自动安装。\n- `README.zh.md:15-23`：通过 Git 标签压缩包安装。\n\n**风险程度：中低。** 建议 MyDSH 发布时固定不可变 commit SHA，并记录下载包 SHA-256。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆、Base64/加密载荷、动态下载执行、自修改、源码与构建产物可追溯性。\n\n**发现：** `build.mjs` 使用 esbuild 打包 TypeScript，并明确开启 sourcemap；没有配置 minify、obfuscate 或加壳。仓库同时提交 `src`、`lib`、`tests` 和构建脚本，结构上具备源码与产物对照条件。已读取根文件中没有发现 `eval`、动态函数构造、Base64 解包、加密执行载荷或远程下载后运行的设计。\n\n**证据：**\n- `build.mjs:1-62`：`bundle: true`、`sourcemap: true`，未见压缩或混淆参数。\n- `AGENTS.md:1-23`：列出 src、lib、tests 和构建契约。\n\n**风险程度：低，审计置信度中。** 由于嵌套源码正文未能逐字取得，本项只能表述为“未发现后门证据”，不能宣称已经完全排除。\n\n### 6. 权限越界\n\n**检查内容：** 插件注册能力、remote 参数、路径校验、主机命令配置、用户手势和共享部署场景。\n\n**发现：** 权限面较集中：插件只注册一个 `openInVscode/open` remote 和一个工作区操作插槽，没有额外工具或技能。文档表示相对路径会被拒绝，这是正向防护。\n\n但可访问证据没有证明服务端会执行以下生产级校验：\n\n1. 对输入路径执行 canonicalize/realpath；\n2. 校验路径必须属于当前会话已经授权的 DSH 工作区；\n3. 阻止符号链接逃逸和非目录目标；\n4. 对 remote 调用实施鉴权、限频和防重复启动；\n5. 将可执行文件限制在 `code`、`code-insiders` 等允许列表。\n\n`command` 和 `args` 能由配置改变，本质上可把该插件变成通用的本机程序启动入口。管理员能修改配置并不等于漏洞，但在共享账户、多人 DSH 或公网暴露环境中，前述缺失会放大攻击面。\n\n**证据：**\n- `cordis.patch.yml:1-6`：配置包含 `command` 和 `args`。\n- `README.zh.md:26-41`：说明命令、参数、绝对路径要求及能力边界。\n- `dsh.plugin.json:1-13`：声明 remote 和 UI 插槽。\n\n**风险程度：中。** 这是本报告最主要的安全复核点。\n\n## 风险点汇总\n\n1. **主机进程执行是核心能力。** 功能合理，但必须按高权限插件管理，不能只按普通前端按钮看待。\n2. **工作区授权边界缺乏可核验的服务端证据。** 仅拒绝相对路径不足以防止打开非预期绝对路径、符号链接逃逸或跨工作区调用。\n3. **安装来源没有不可变校验。** Git 标签和压缩包未绑定 commit SHA 与 SHA-256。\n4. **共享环境风险高于个人环境。** 恶意或被盗用的已认证会话可能重复启动主机编辑器或提交非预期路径。\n5. **审计覆盖存在缺口。** GitHub API 精确 `pushed_at` 及 `src/lib/tests` 正文未能完整取得，因此不应直接进入自动发布。\n\n## 结论与使用建议\n\n**明确建议：谨慎用，暂不建议直接进入 MyDSH 自动发布。**\n\n现有证据不支持将该插件判定为恶意：没有发现数据外传、敏感凭据收集、安装脚本执行、代码混淆或隐藏下载器。其功能单一，依赖面也较小。但是，它会在 DSH 主机上启动真实进程，而当前公开可核验材料不足以证明路径与调用权限已经达到生产级隔离要求。\n\n个人单用户、本机部署可以在以下条件下试用：固定 `v0.1.6` 对应的不可变 commit；核验压缩包哈希；保持 `command` 为官方 VS Code CLI；不添加来源不明的 `args`；确保 DSH 只对可信用户开放。对于公网、多人或共享服务器部署，在完成 `src/lib` 全量逐行复核，并补充 realpath、工作区允许列表、非目录拒绝、调用鉴权与限频前，建议不要启用该插件。\n","action":"review","reviewed_at":"2026-08-17T14:12:06.367465+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":64,"score_type":"safety","review_status":"complete"},{"full_name":"csyangwen/dsh-memory-evolve","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14","summary":"未发现明确恶意后门，但插件可读写记忆、日志和技能目录，关键网络模块仍需复核。","details":["代码执行：package.json 未定义 preinstall、postinstall 等安装钩子，也没有 curl|sh、eval 或动态 Function；但 lib/index.js 引入 spawn、spawnSync，用于命令检测和打开本地目录，属于真实的系统进程调用面。当前未发现把用户输入直接拼接进 shell 的证据，风险较低，但仍应限制 COI shell 功能。","数据外发：插件包含更新检查、Git 分支/远端同步以及 AI 自审、总结和技能生成能力。README 明示 AI 调用使用 DSH 已配置模型服务，意味着记忆、会话片段或技能内容可能发送给用户配置的模型提供商。已检查代码中未发现隐藏遥测域名，但 lib/update.js、lib/sync/ 和 lib/api.js 正文未能完整展开，不能排除其网络实现问题。","敏感读取：默认会访问 ~/.dsh/memory、~/.dsh/skills、~/.dsh/logs、~/.dsh/input_history、~/.dsh/config.yaml，以及当前项目的 package.json、tsconfig.json 等文件。没有发现读取 ~/.ssh、云厂商凭据或全量环境变量的直接证据，但其核心功能天然接触大量会话和长期记忆数据。","依赖风险：package.json 的 dependencies 和 devDependencies 均为空，未发现第三方运行时依赖或依赖投毒入口；构建命令仅为 node scripts/build.mjs。供应链攻击面明显小于普通 npm 插件，但 scripts/build.mjs 未完成正文复核，因此发布前仍应检查其是否只执行本地构建。","混淆与后门：已展开的 lib/index.js、lib/store.js、lib/skills-manager.js、lib/review.js 均为可读 JavaScript，具有清晰命名、注释和错误处理；未发现 Base64 大段载荷、压缩壳、自解密代码、远程代码下载执行或隐藏定时回连。","权限越界：插件能够创建、覆盖、归档和删除记忆文件及技能目录内容。skills-manager 对技能 ID、基准目录和符号链接实施了检查，默认 API 地址为 127.0.0.1:19768，COI shell 默认关闭；但如果用户把 memoryDir、skillsDir、allowedPaths 或 API 监听地址配置得过宽，仍可能扩大文件系统和本地接口风险。"],"report_md":"## 安全评分\n\n**62/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对 `csyangwen/dsh-memory-evolve` 的仓库结构、安装配置、依赖声明及主要运行时代码进行了静态分析。综合结论是：**未发现可认定为恶意插件的后门、混淆载荷或安装期远程执行，但该插件因长期记忆、自我进化、技能管理、会话搜索和同步功能，拥有较宽的本地数据读写能力，并可能把部分内容交给用户配置的 AI 服务处理，因此不建议无条件“放心用”。建议固定版本、备份数据、关闭非必要能力并完成关键网络模块复核后使用。**\n\n安全评分为 **62/100**，需要注意，对应参考区间中的中等风险；最终用户建议为 **谨慎用**，不是“不要用”，但当前也不满足直接自动放行条件。\n\n## 评估对象\n\n- 仓库：`csyangwen/dsh-memory-evolve`\n- 评估分支：`main`\n- GitHub 仓库页面显示主分支最新提交：`fc7c147`，日期为 **2026-08-14**。\n- MyDSH 本地 GitHub 元数据缓存更新时间：`2026-08-17T09:46:14Z`。\n- 规模：根目录包含 `docs/`、`src/`、`lib/`、`scripts/`、`skills/`、`package.json`、`package-lock.json` 和 `cordis.patch.yml`；`lib/` 页面列出约 33 项，主入口 `lib/index.js` 约 2021 行，`lib/store.js` 约 1356 行，属于中等规模插件。\n\n**版本确认限制：**本次 GitHub API 直连被访问策略拒绝，因此无法独立取得精确到秒的分支 `pushed_at`；报告中的 `updated_at` 使用 GitHub 主分支提交页面能够确认的日期。`cordis.patch.yml`、`scripts/build.mjs`、`lib/api.js`、`lib/update.js` 与 `lib/sync/` 虽已在目录树中定位，但正文未全部成功展开。基于 MyDSH 发布标准，这一限制也是本报告将 `action` 设置为 `review` 而非 `release` 的原因。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：**`package.json`、`lib/index.js`、`lib/skills-manager.js`、README 安装与更新章节，并检索安装钩子、`exec`、`eval`、`spawn`、`curl|sh` 和动态代码执行模式。\n\n**发现：**`package.json:6-8` 只有 `build` 脚本：`node scripts/build.mjs`；没有 `preinstall`、`install`、`postinstall`、`prepare` 等安装生命周期脚本。`package.json:13-14` 的运行时和开发依赖均为空，因此安装时不会自动拉起第三方包脚本。`lib/index.js:10` 明确导入 `spawn`、`spawnSync`，后续用于检测本地命令以及通过 `explorer.exe`、`open` 或 `xdg-open` 打开目录。未发现 `eval`、`new Function`、远程脚本下载后执行或把输入直接交给 shell 的证据。\n\n**风险程度：较低。**真实存在子进程权限，但已观察用途属于本地功能。建议保持 `coi.enableShell=false`，不要在未审查的情况下开放通用命令执行。\n\n### 2. 数据外发\n\n**检查内容：**README 隐私说明、`lib/index.js` 网络及更新配置、`lib/review.js` AI 服务调用、Git 同步和更新模块入口。\n\n**发现：**`lib/index.js` 默认启用更新检查，配置包括 `updateCheckEnabled=true`、12 小时间隔和可选更新 URL；插件还包含 Git 分支感知和远端同步模块。`lib/review.js` 通过 `service.chatModel`、`ctx.chatModel` 或 `ctx.llm` 调用 DSH 已配置的模型服务。README 的安全章节明确说明自动总结、自我审查、技能生成和顾问能力会使用用户自己的 AI 服务。该行为不是隐藏遥测，但可能把记忆或会话内容发送至用户配置的第三方模型供应商。\n\n在已展开文件中没有发现硬编码统计平台、广告域名、Webhook、陌生上传服务器或私自回传接口。由于 `lib/update.js`、`lib/sync/` 和 `lib/api.js` 未完成逐行复核，仍不能给出“完全无外发风险”的结论。\n\n**风险程度：中等。**使用前应确认模型服务的数据保留政策；敏感会话环境建议关闭 `autoReview`、`autoSummary`、`autoEvolve` 和非必要远端同步。\n\n### 3. 敏感文件读取\n\n**检查内容：**`lib/index.js` 默认目录、`lib/store.js`、`lib/skills-manager.js`、README 数据目录和安全说明。\n\n**发现：**`lib/store.js:9` 将记忆目录默认设置为 `~/.dsh/memory`；`lib/index.js` 还配置了 `~/.dsh/skills`、`~/.dsh/logs`、`~/.dsh/input_history` 和 `~/.dsh/config.yaml`，并可能读取当前工作区的 `package.json`、`tsconfig.json`。这些读取与记忆检索、会话搜索、技能管理和环境诊断功能一致。未发现直接访问 `~/.ssh`、`~/.aws`、浏览器 Cookie、系统钥匙串或遍历全部 `process.env` 的证据。\n\n**风险程度：中等。**它不会只接触普通配置，而会接触真实用户对话、长期记忆和技能内容。不要在同一 DSH 数据目录中保存 SSH 私钥、支付密钥、云凭据或未脱敏生产日志。\n\n### 4. 依赖与供应链\n\n**检查内容：**`package.json`、`package-lock.json`、构建入口和发布文件声明。\n\n**发现：**`package.json:13-14` 的 `dependencies` 与 `devDependencies` 均为空；`package-lock.json` 体积很小，未表现出传递依赖树。包发布范围通过 `files` 限制为 `lib`、`cordis.patch.yml`、`skills`、README 和 guide，减少了无关文件进入 npm 包的概率。未发现 Git URL 依赖、未固定版本依赖、私有 registry、二进制预编译包或拼写相似包。\n\n不足是 `scripts/build.mjs` 正文未完成复核；虽然它不会由 npm 安装钩子自动运行，但维护者构建发布包时仍会执行它。\n\n**风险程度：较低。**发布前应人工确认构建脚本只进行源码复制、转译或打包，不联网下载和执行额外文件。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：**`lib/index.js`、`lib/store.js`、`lib/skills-manager.js`、`lib/review.js` 的代码结构、字符串、导入方式和异常处理。\n\n**发现：**代码采用普通 ES Module，变量和方法具有明确语义，注释与 README 功能描述能够对应。未发现大段 Base64/十六进制数据、字符串数组解密器、压缩壳、动态 import 外部 URL、反调试逻辑、环境指纹回传、隐藏矿工或定时回连。`lib/skills-manager.js` 反而实现了技能 ID 校验、基准路径约束、目录逃逸检查和符号链接拒绝，说明作者至少考虑了路径安全。\n\n**风险程度：较低。**目前没有恶意或刻意隐藏行为的直接证据。\n\n### 6. 权限越界\n\n**检查内容：**记忆存储、技能管理、API 默认配置、COI 权限配置和文件删除逻辑。\n\n**发现：**`lib/store.js` 使用 `writeFile`、`unlink`、`rm` 等接口，可写入、迁移、归档和删除记忆文件；`lib/skills-manager.js` 可创建、更新、重命名、回滚和移入回收站，影响 `~/.dsh/skills` 下的持久化技能。技能目录操作在执行前检查路径必须位于 `skillsDir` 内，并拒绝符号链接目录，降低了路径穿越风险。`lib/index.js` 的本地 API 默认配置为 `127.0.0.1:19768`，而不是默认监听所有网卡；COI shell 默认关闭，`allowedPaths` 和 `allowedDomains` 默认为空数组。\n\n风险主要来自错误配置：如果将 API 主机改成 `0.0.0.0`、把 `memoryDir` 或 `skillsDir` 指向宽泛目录、开启 shell，或设置过宽的允许路径和域名，插件权限会明显扩大。\n\n**风险程度：中等。**建议保持回环地址、限定目录、关闭 shell，并对记忆与技能目录执行定期备份。\n\n## 风险点汇总\n\n1. 插件会持续读取和修改 DSH 会话、记忆、日志、输入历史和技能文件，数据敏感度较高。\n2. AI 自审、总结、技能生成和顾问功能可能把相关内容发送给用户配置的模型提供商。\n3. 存在系统子进程调用、本地 API、Git 同步、更新检查及删除文件能力；目前未发现明显滥用，但配置错误会扩大风险。\n4. `cordis.patch.yml`、构建脚本、API、更新和同步实现未完成逐行复核，不能满足自动发布所要求的完整证据链。\n5. 正面因素包括：零第三方依赖、无安装钩子、代码可读、没有已发现的混淆或远程代码执行，并实现了路径和符号链接保护。\n\n## 结论与使用建议\n\n**明确结论：这个插件不是已识别的恶意软件，也没有发现明确后门；但不建议用户当前无条件放心使用，应当谨慎用。**\n\n推荐仅在以下条件满足后安装：固定到已审查的 commit，而不是长期跟随可变分支；安装前备份 `~/.dsh/memory` 和 `~/.dsh/skills`；保持 API 仅监听 `127.0.0.1`；关闭不需要的自动更新、自动进化、远端同步和 COI shell；限制 `allowedPaths`、`allowedDomains`；确认 AI 提供商不会保留或训练敏感会话；最后人工补审 `cordis.patch.yml`、`scripts/build.mjs`、`lib/api.js`、`lib/update.js` 和 `lib/sync/`。\n\n对于包含生产凭据、客户隐私、源代码秘密或运维密钥的 DSH 环境，完成上述补审前不要直接安装。对于普通个人测试环境，可在隔离目录、关闭自动网络与 shell 能力并做好备份后试用。\n","action":"review","reviewed_at":"2026-08-17T13:27:45.000752+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":62,"score_type":"safety","review_status":"complete"},{"full_name":"Anionex/dsh-turn-rewind","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16","summary":"未见恶意外联或安装后门，但回滚接口权限依赖宿主保护，核验后方可使用。","details":["代码执行：package.json 未定义 preinstall、install、postinstall，也未发现 eval、new Function、curl|sh 等下载执行链。项目需要执行 Git 操作并修改文件，但相关能力属于回滚功能本身，未发现将用户输入直接拼接为 Shell 命令的明确证据。","数据外发：客户端请求均指向同源 /api/turn-rewind/* 接口，静态代码中未发现遥测、Webhook、第三方上传域名或向外部服务发送快照内容的逻辑。","敏感读取：文件访问被设计为围绕项目目录和 .dsh/turn-rewind 存储目录进行，未发现读取 ~/.ssh、浏览器凭据、云厂商凭据或通用环境 token 的代码；但被修改的项目文件可能以快照形式明文保存在 .dsh 目录。","依赖风险：生产依赖面较小，主要为 @dsh/sdk 和 diff，并存在 pnpm-lock.yaml 完整性锁定；未发现安装生命周期脚本。由于未完成 npm 漏洞库动态扫描，仍应在发布前执行 pnpm audit 和软件成分分析。","混淆或后门：源码为可读 TypeScript/TSX，未发现动态解密、隐藏下载器、反调试、矿池地址或高熵载荷。cordis.patch.yml 中的 Base64 转换是可读的请求体编码补丁，不属于隐藏恶意载荷。","权限越界：插件提供恢复、删除、回放、终止任务等高影响接口，但 src/rewind-host.ts 的路由处理器中没有显式用户鉴权、权限角色或 Origin/CSRF 校验。其安全性依赖 DSH/Cordis 宿主及反向代理是否已经实施认证和同源保护，这是本次审查的主要风险。","元数据核验：默认分支可确认是 main；GitHub 页面显示相关核心文件于 2026-08-16 更新，但仓库 API 未返回可验证的精确 pushed_at 时分秒，因此 updated_at 仅保留已确认日期，不虚构具体时间。"],"report_md":"## 安全评分\n\n**62/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本报告对 `Anionex/dsh-turn-rewind` 进行了静态安全审查，检查范围覆盖代码执行、数据外发、敏感信息读取、依赖风险、混淆或后门、权限越界六个维度。重点阅读了 `package.json`、`pnpm-lock.yaml`、`cordis.patch.yml`、`src/engine.ts`、`src/rewind-host.ts`、`src/client/index.tsx`、项目路径和快照相关模块，以及仓库中的 `lib/`、`scripts/` 和安装构建配置。\n\n综合结论是：**没有证据表明该插件是恶意软件，也未发现安装后门、秘密外联或凭据窃取逻辑；但它拥有恢复和删除项目文件的高影响权限，其 HTTP 接口本身未实施显式鉴权和 CSRF 防护，因此不能在任何部署方式下无条件放心使用。**\n\n## 评估对象\n\n- 仓库：`Anionex/dsh-turn-rewind`\n- 评估分支：`main`\n- 最后更新：GitHub 页面可确认到 `2026-08-16`，仓库 API 的精确 `pushed_at` 时分秒未能取得，故不制造虚假时间\n- 仓库规模：约 45 次提交；`src/` 展示约 16 个源码文件；核心 `src/engine.ts` 约 770 行，`src/rewind-host.ts` 584 行，锁文件约 882 行\n- 审查方式：源码静态审查；未在本机安装或执行该插件，未进行模糊测试和运行时网络抓包\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`scripts/`、Git 操作模块、`src/engine.ts`，并搜索 `exec`、`eval`、`spawn`、`curl|sh`、`postinstall` 等危险模式。\n\n**发现：** `package.json:24-28` 只定义测试、构建、打包前构建和发布相关脚本，没有 `preinstall`、`install` 或 `postinstall`。未发现 `eval`、`new Function`、动态下载后执行、`curl | sh` 等典型供应链后门。插件会执行 Git 状态和检查点相关操作，但这是回滚功能所需能力；现有证据未显示用户输入被拼接为任意 Shell 字符串。\n\n**证据：** `package.json:24-28`；`src/engine.ts` 中 `GitAdapter`、`parseGitHead` 的受控调用；README 的 Git checkpoint 说明。\n\n**风险程度：低。** 仍建议发布流程增加针对子进程调用的静态规则，强制使用参数数组并禁止 `shell: true`。\n\n### 2. 数据外发\n\n**检查内容：** 客户端请求、服务端路由、依赖清单及源码中的 HTTP、WebSocket、遥测和第三方域名。\n\n**发现：** `src/client/index.tsx:15-155` 的请求均为同源相对路径，例如 `/api/turn-rewind/sessions`、`/diff`、`/replay`、`/abort` 和 `/restore`。未发现向分析平台、Webhook、云存储、作者服务器或其他第三方域名上传会话、文件内容或凭据的逻辑。生产依赖中也没有明显的遥测 SDK。\n\n**证据：** `src/client/index.tsx:15-155`；`package.json:29-31`。\n\n**风险程度：低。** 当前结论只说明源码中没有主动外发；宿主 DSH/Cordis 自身的网络行为不属于该插件代码结论。\n\n### 3. 敏感读取与本地数据留存\n\n**检查内容：** 用户主目录、SSH 凭据、`.dsh`、环境变量、项目文件扫描及快照存储逻辑。\n\n**发现：** 未发现访问 `~/.ssh`、系统钥匙串、浏览器数据或云服务凭据目录的代码。`src/engine.ts` 读取的环境变量是 `DSH_TURN_REWIND_MAX_SESSIONS`、`DSH_TURN_REWIND_MAX_SNAPSHOT_BYTES` 等插件配置，而非通用 token。路径处理使用 `normalizeRelativePath`、`toAbsoluteInsideProject`、`toSafePath` 和 `safeLstat` 等边界函数，表明作者有防止普通路径穿越的设计。\n\n需要注意，快照保存在项目的 `.dsh/turn-rewind` 下。如果某次任务修改了 `.env`、私钥、部署配置或其他敏感项目文件，其内容可能被本地快照再次保存。README 明确说明这些数据会持续保留到相关 Turn 被删除。\n\n**证据：** `src/engine.ts` 中 `process.env.DSH_TURN_REWIND_*` 配置读取及 `toAbsoluteInsideProject(...)` 调用；`README.md:379-381` 的本地存储说明。\n\n**风险程度：中等。** 这是本地数据留存风险而非外发风险。共享工作站、同步盘或权限宽松的项目目录尤其需要注意。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`pnpm-lock.yaml`、运行时依赖数量、版本锁定和安装脚本。\n\n**发现：** 直接生产依赖较少，主要为 `@dsh/sdk` 和 `diff`。`pnpm-lock.yaml` 锁定了实际版本并包含完整性哈希，降低了非确定性安装风险。React、Vite、TypeScript、Vitest 等属于开发依赖。没有依赖安装阶段自动运行项目脚本的配置。\n\n**证据：** `package.json:29-40`；`pnpm-lock.yaml:1-25` 及各包的 integrity 项。\n\n**风险程度：低到中等。** 本次未获得实时 npm 安全公告扫描结果，因此不能宣称依赖完全不存在已知漏洞。正式发布前应执行 `pnpm audit --prod`、生成 SBOM，并对 `@dsh/sdk` 的版本变化设置人工审查。\n\n### 5. 混淆、隐藏逻辑与后门\n\n**检查内容：** 高熵字符串、动态解密、Base64 载荷、反调试逻辑、隐藏网络地址、矿池和远程加载器。\n\n**发现：** 源码整体为结构清晰的 TypeScript/TSX，核心恢复流程、HTTP 路由和客户端调用均可读。未发现加密载荷、动态代码生成、矿池地址、隐藏远程配置或按时间触发的后门。`cordis.patch.yml:29-44` 中出现的 `btoa(JSON.stringify(...))` 用于给 Cordis 请求体编码，并且编码前的数据结构直接写在补丁中，不属于不可审计载荷。\n\n**证据：** `cordis.patch.yml:4-44`；`src/rewind-host.ts:144-447`。\n\n**风险程度：低。** 该补丁会修改 Cordis 运行时行为，虽然不是恶意混淆，但升级 Cordis 后应重新核对补丁目标和实际差异。\n\n### 6. 权限越界与危险操作面\n\n**检查内容：** HTTP 接口鉴权、路径边界、文件删除、恢复、会话删除、任务终止和运行时目录扩展。\n\n**发现：** `src/rewind-host.ts` 注册了列举会话、读取差异、回放、终止、删除会话、恢复文件和恢复 Turn 等接口。`src/rewind-host.ts:121-127` 可删除会话；`201-253` 可回放或终止；`259-338` 可执行恢复；`373-447` 可回退到指定 Turn。这些操作可能删除或覆盖当前工作区文件。\n\n路由处理器会验证必要参数，并将核心操作交给 Engine；Engine 使用项目内绝对路径转换及 `lstat` 类检查，降低了简单 `../` 路径穿越和符号链接误写风险。但 `src/rewind-host.ts` 中没有显式的登录用户检查、管理员角色判断、Origin 校验或 CSRF token。客户端使用同源 API 并不能替代服务端授权。如果 DSH 服务监听公网、局域网或被宽松反向代理暴露，攻击者一旦能够访问这些接口，就可能读取路径信息、终止任务或触发文件恢复。\n\n`cordis.patch.yml` 还将 `cwd` 和 `externalDirectory` 引入运行时调用链。这是实现功能所需的透明补丁，但也意味着插件实际依赖较高的文件系统能力，不能将其视为普通只读 UI 插件。\n\n**证据：** `src/rewind-host.ts:121-127、158-253、259-338、373-447`；`src/client/index.tsx:15-155`；`cordis.patch.yml:4-44`；`src/engine.ts` 中 `toAbsoluteInsideProject`、`safeLstat` 和恢复路径逻辑。\n\n**风险程度：中等。** 风险主要来自部署边界和授权模型，而不是恶意代码。\n\n## 风险点汇总\n\n1. 高影响恢复、删除和终止接口没有在插件代码中实施显式身份鉴别与 CSRF 防护。\n2. 回滚快照可能在 `.dsh/turn-rewind` 中明文保留曾被任务修改的敏感项目文件。\n3. `cordis.patch.yml` 扩展了运行时可见的工作目录和外部目录信息，需要确认不会被非授权调用者控制。\n4. 依赖已锁定，但本次未完成实时漏洞数据库扫描和恶意包情报核验。\n5. GitHub API 未返回精确 `pushed_at`，只能确认默认分支和页面显示的更新日期；发布记录不应虚构具体时间。\n\n## 结论与使用建议\n\n**结论：该仓库没有明显恶意行为，但不能无条件“放心用”。** 对于仅监听本机、单用户使用、DSH 宿主已经要求登录且反向代理不对外暴露 `/api/turn-rewind/*` 的环境，可以在备份项目后安装试用。对于公网、局域网共享、多用户开发机或权限模型不明确的环境，应先完成接口鉴权、Origin/CSRF 校验、路径与符号链接单元测试以及依赖扫描，再允许发布。\n\n明确建议为：**谨慎用。不要在未经身份认证的公网或共享 DSH 实例上直接启用；启用前先备份仓库，并确认 `.dsh/turn-rewind` 不会进入 Git、云盘或公共备份。**\n","action":"review","reviewed_at":"2026-08-17T13:47:00.416368+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":62,"score_type":"safety","review_status":"complete"},{"full_name":"titanwings/dsh-automation","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T05:16:09Z","summary":"未见恶意或外发证据，但它能无人值守驱动编码智能体，核心源码尚未完整复核。","details":["代码执行：package.json:53-57 只有 build、typecheck、test、check，没有 install/postinstall、curl|sh；但插件会定时创建 fresh root Agent 执行保存的任务，属于预期但高权限的间接代码执行能力。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))","数据外发：直接运行依赖只有 luxon、zod，文档声明没有第三方调度器、外部邮件、短信或推送，且当前仅实现本地执行；但智能体运行时的网络行为仍取决于所选 Agent preset 和 DSH 工具权限。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))","敏感读取：文档声明任务不继承原会话历史、授权或批准，且限定到调用者的规范工作区；不过 read-only 模式仍可能读取工作区内的配置、日志和凭据文件，因此不应把敏感密钥留在自动化可见目录。([github.com](https://github.com/titanwings/dsh-automation/blob/main/README.md))","依赖风险：仓库提交了 pnpm-lock.yaml，锁文件包含完整性哈希，未检出 git+ 或自定义 tarball 依赖；依赖面较小，但 package.json 使用范围版本，安装时仍应固定审计过的 tag 或 commit SHA。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))","混淆与后门：可见清单和文档中未发现 base64 载荷、远程脚本、挖矿组件或异常依赖；但仓库会直接发布 lib 构建产物，而本次访问未能完整读取 src、lib、scripts 的文件正文，不能把未发现等同于已彻底排除。([github.com](https://github.com/titanwings/dsh-automation))","权限越界：文档明确拒绝无人值守 danger-full-access，只允许 read-only 或 workspace-write，并禁止后台终端、嵌套 Agent、未知第三方工具和任意目标路径；主要剩余风险是 workspace-write 任务能够在无人值守时真实修改项目文件。([github.com](https://github.com/titanwings/dsh-automation/blob/main/README.md))"],"report_md":"## 安全评分\n\n**62/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`titanwings/dsh-automation` 是一个 DeepSeek Harness 自动化插件，用于按一次性、间隔、每日或每周计划，在新的 root Agent 与 Session 中执行独立编码任务，并保存运行记录。它不是简单的提醒器，而是能够在无人值守状态下读取工作区、运行编码工具，并在 `workspace-write` 模式下修改文件的执行型插件。公开配置、依赖清单和安全说明中暂未发现木马、隐蔽外发或远程脚本下载证据，但由于本次审计环境未能完整取得 `src/`、`lib/`、`scripts/` 文件正文，不能按“源码已经全部逐行验证”的标准直接放行。综合结论为：**可以在受控环境谨慎使用，不建议直接用于含生产凭据或重要未提交代码的工作区。**\n\n## 评估对象\n\n- **仓库**：`titanwings/dsh-automation`\n- **评估分支**：`main`\n- **分支版本时间**：`2026-08-17T05:16:09Z`\n- **可见版本**：`0.1.6`\n- **仓库规模**：GitHub 页面显示 14 次提交，根目录包含 `docs/`、`lib/`、`scripts/`、`src/`、`tests/`，并提交了 `package.json`、`pnpm-lock.yaml`、`cordis.patch.yml` 和构建产物。([github.com](https://github.com/titanwings/dsh-automation))\n- **清单规模**：`package.json` 为 89 行、约 2.25 KB；锁文件约 530 个有效内容行、19.9 KB；Cordis 安装补丁仅 9 行。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))\n- **时间可信度说明**：GitHub REST 仓库 API 在本次执行环境中未能返回正文，因此上述时间按 `main` 分支页面的最新提交时间记录，未将无法核验的仓库级 `pushed_at` 值伪装为已确认事实。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` 的生命周期脚本、`cordis.patch.yml`、README 的安装与执行机制，以及目录中的 `src/executor.ts`、`src/service.ts`、`src/tools.ts`、`lib/`、`scripts/` 等重点目标。\n\n**发现**：`package.json:53-57` 只声明 `build`、`typecheck`、`test`、`check`，没有 `preinstall`、`install`、`postinstall`、`prepare`，也没有 `curl | sh`、PowerShell 下载执行或 npm 生命周期自动执行入口。README 进一步声明 Git 安装不会运行包构建脚本，也不需要 `allowBuilds`。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))\n\n插件本身的核心功能仍属于**间接代码执行**：每次触发都会创建新的 Agent/Session，向其传入保存的 prompt、workspace、cwd、模型目标和权限预设，再由 DSH 编码工具执行任务。文档明确承认前台 shell 与网络能力仍取决于 Agent preset、工具集合和 DSH guard。([github.com](https://github.com/titanwings/dsh-automation/blob/main/README.md))\n\n**风险程度**：中等。未见安装期恶意执行，但无人值守编码 Agent 是强能力，错误 prompt 或权限配置可能造成真实副作用。\n\n### 2. 数据外发\n\n**检查内容**：运行依赖、README 中的网络/通知描述、调度架构及外部服务声明。\n\n**发现**：直接依赖只有 `luxon` 与 `zod`，没有 axios、node-fetch、遥测 SDK、云存储客户端或第三方调度服务。README 明确说明没有独立机器人或第三方 scheduler，当前不提供外部邮件、短信、推送，且“Only local execution is implemented”。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))\n\n未发现固定第三方回传域名、隐藏 telemetry 或外部数据收集声明。不过，由插件启动的 Agent 是否可以联网取决于实际 preset 和 DSH 工具权限，因此用户 prompt、代码片段或日志仍可能被获得网络能力的工具发送出去。\n\n**风险程度**：低至中等。插件清单未见主动外发组件，但运行中的智能体并非天然网络隔离。\n\n### 3. 敏感读取\n\n**检查内容**：是否声明读取 `~/.ssh`、`~/.dsh`、`~/.codex`、环境变量 token、原会话历史或任意路径。\n\n**发现**：公开文档声明新任务不继承来源会话历史、inbox、grant 或过去批准；Agent 工具绑定到调用者的规范注册工作区，不能自行传入任意目标路径。权限仅允许 `read-only` 与 `workspace-write`。([github.com](https://github.com/titanwings/dsh-automation/blob/main/README.md))\n\n这降低了跨工作区和会话凭据泄露风险，但不能阻止任务读取工作区内部已经存在的 `.env`、部署配置、日志或测试凭据。由于核心源码未完整读取，本次也无法用代码级搜索彻底证明不存在 `process.env`、home 目录拼接或凭据文件读取。\n\n**风险程度**：中等偏低。边界设计合理，但敏感文件若位于工作区内，仍可能进入智能体上下文。\n\n### 4. 依赖风险\n\n**检查内容**：`package.json`、`pnpm-lock.yaml`、非注册表依赖、完整性哈希和安装脚本。\n\n**发现**：运行依赖数量少，`luxon` 用于日期时间处理，`zod` 用于结构校验；锁文件存在并记录 integrity 哈希。全文件搜索未发现 `git+` 或自定义 `tarball:` 来源，未见直接从个人 Git 仓库、HTTP 地址或临时压缩包安装依赖。([github.com](https://github.com/titanwings/dsh-automation/blob/main/package.json))\n\n风险点是清单使用 `^3.7.2`、`^4.1.5` 等范围版本；虽然锁文件可提高本地复现性，但通过 GitHub bundle 安装时仍应固定版本 tag 或经审查的 commit SHA，避免未来分支更新改变实际安装内容。\n\n**风险程度**：低。\n\n### 5. 混淆与后门\n\n**检查内容**：目录命名、发布文件、依赖来源、base64/压缩载荷、远程脚本、挖矿或反向 shell 信号。\n\n**发现**：仓库结构常规，源代码、测试、设计文档和构建产物分层明确；可见清单中没有混淆器、动态加载器、下载器、加密货币或远控依赖。安装说明使用固定 GitHub tag，并明确构建产物随仓库发布。([github.com](https://github.com/titanwings/dsh-automation))\n\n但是 `lib/` 是可直接加载的发布产物，安全结论必须核对它与 `src/` 是否一致。本次无法完整读取这些正文，因此尚不能排除源代码与构建产物不一致、隐藏动态 import 或原生 `fetch` 等情况。\n\n**风险程度**：中等不确定性；没有恶意证据，但证据链不完整。\n\n### 6. 权限越界\n\n**检查内容**：工作区范围、写权限、审批策略、工具白名单、RPC 暴露、重试和并发策略。\n\n**发现**：文档声明无人值守任务不接受 `danger-full-access`；每个 Session 使用 `approval policy = never`，遇到需要交互批准的工具会失败关闭；目标限定到当前规范工作区；未知第三方工具、嵌套 Agent、后台终端、运行时插件挂载和递归自动化管理均被最终 guard 拒绝；管理 RPC 只接受 loopback authority。([github.com](https://github.com/titanwings/dsh-automation/blob/main/README.md))\n\n正面设计还包括不盲目重试可能产生副作用的任务、单自动化禁止重叠执行、超时取消和持久化运行记录。默认配置为全局并发 2、单次最长 60 分钟、误触发宽限 15 分钟、历史保留 200 条。([github.com](https://github.com/titanwings/dsh-automation/blob/main/cordis.patch.yml))\n\n主要剩余风险是 `workspace-write` 本身允许无人值守修改代码；如果任务描述过宽、仓库内有高权限脚本，或 Agent preset 允许前台 shell/网络访问，仍可能造成删除文件、执行项目脚本或外发数据等副作用。\n\n**风险程度**：中等。\n\n## 风险点汇总\n\n1. **无人值守执行风险**：插件会真实启动编码 Agent，而不是仅创建提醒；`workspace-write` 可产生文件和命令副作用。\n2. **敏感工作区风险**：read-only 不等于无数据访问，工作区中的 `.env`、日志和私有配置可能被读取。\n3. **网络能力继承风险**：插件没有发现固定外发端点，但 Agent 的 shell 和网络能力取决于所选 preset 与工具集。\n4. **构建产物核验缺口**：本次未完成 `src/` 与 `lib/` 的逐文件、逐行一致性校验，不能正式证明不存在隐藏逻辑。\n5. **供应链残余风险**：依赖有锁文件与完整性哈希，但安装仍应固定到已审查的 tag 或 commit SHA。\n\n## 结论与使用建议\n\n**最终结论：存在风险；建议谨慎用。** 当前可见证据没有显示该仓库是木马、后门或数据窃取程序，其权限设计和失败关闭策略也明显优于没有边界的通用定时 shell。真正需要警惕的是它的产品能力本身：它可以在没有用户在线确认的情况下启动编码 Agent，并在授权后修改工作区。\n\n建议只按以下方式使用：\n\n- 安装时固定 `v0.1.6` 或审查过的 commit SHA，不跟随浮动 `main`；\n- 首次任务只用 `read-only`，先执行一次 **Run now** 并检查完整 Session 与运行记录；\n- 不要把生产 token、SSH 私钥、云凭据或真实用户数据放在自动化可读工作区；\n- 只有目标、允许改动、验证步骤和停止条件都明确时才启用 `workspace-write`；\n- 在完成 `src/`、`lib/`、`scripts/` 的源码全文复核以及构建产物一致性检查前，不建议将本报告按“通过/放心用”发布。\n\n因此，本次处置为 **review**：可进入人工或下一轮源码完整复核，但不应判为恶意，也不应直接作为无条件安全插件放行。\n","action":"review","reviewed_at":"2026-08-17T14:17:16.894639+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":62,"score_type":"safety","review_status":"complete"},{"full_name":"hust-open-atom-club/oh-dsh","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T10:19:42Z","summary":"未发现恶意后门，但环境凭据暴露面和插件隔离能力不足，不能无条件放心使用。","details":["代码执行：未发现 npm postinstall、curl|sh、eval 或 new Function；但应用会通过 child_process.spawn 启动完整 DSH 运行时并加载插件。spawn 未启用 shell，降低了参数注入风险，但插件本质上拥有代码执行能力。证据：package.json:6-28、src/runtime.ts:324-351。","数据外发：核心文件中未发现可疑统计、广告或隐蔽回传域名；已识别的远程来源主要是 GitHub 更新和上游源码。桌面端允许打开 HTTP/HTTPS 外链、WebView 页面和用户配置的模型服务，因此已安装插件仍可能自行联网。证据：package.json:135-144、src/main.ts:1176-1192、2009-2036。","敏感读取：未发现直接扫描 ~/.ssh 的代码，但 runtimeEnvironment 将完整 process.env 复制给子进程，同时传递 DSH_HOME、DSH_PROFILE 和代理变量；API Key、GitHub Token、云厂商密钥等若存在于启动环境中，会对运行时和同进程插件可见。共享数据目录还包含用户级 ~/.ohdsh。证据：src/main.ts:330-348、src/runtime.ts:324-351、src/data-root.ts:78-83。","依赖风险：运行依赖大多固定版本，存在 pnpm-lock.yaml；上游 DSH 源码固定到提交 8868ba4d5fe21740461b84e3582aa5e68c3b9e1e，降低漂移风险。但项目包含 Electron、原生模块、多个工作区包和 Git 子模块，供应链较宽，且本次静态审查未执行实时 CVE 扫描和发布包签名验证。证据：package.json:31-55、dsh-source.json:1-4、.gitmodules:1-10。","混淆或后门：核心 TypeScript 代码可读，未发现编码载荷、动态下载后立即执行、隐藏生命周期脚本或混淆控制流；根 cordis.patch.yml 仅为 null，不会默认挂载额外插件。风险较低。证据：cordis.patch.yml:1、package.json:6-28。","权限越界：Electron 主窗口启用了 contextIsolation 和 sandbox，并关闭 nodeIntegration；IPC 发送路径也有动作白名单和参数过滤，属于有效防护。但插件预览仍继承完整环境变量，代码明确提示 macOS 沙箱可能不可用，而 Windows/Linux 没有等价 OS 级预览隔离；正式插件运行时也不是权限沙箱。证据：src/main.ts:664-753、1176-1192、1955-1974。"],"report_md":"## 安全评分\n\n**61/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查覆盖 `hust-open-atom-club/oh-dsh` 的桌面入口、运行时启动、插件市场预览、权限控制、数据目录、依赖配置、构建脚本入口及上游源码绑定。结论是：**没有发现恶意后门、隐蔽数据回传或安装阶段自动执行恶意命令，但该项目属于具备完整本地代码执行能力的 AI 开发运行时，而非低权限展示插件。其环境变量传递和跨平台插件隔离仍不足，因此用户不能在保存大量生产凭据的主力环境中无条件放心使用。**\n\n安全评分为 **61/100**，需要注意，建议为 **谨慎用**，进入人工复核而不是直接按普通低权限插件发布。\n\n## 评估对象\n\n- 仓库：`hust-open-atom-club/oh-dsh`\n- 默认及评估分支：`main`\n- 分支最后更新时间：`2026-08-17T10:19:42Z`\n- 当前页面最新提交：`7f62b31`，提交日期为 2026-08-17。GitHub 分支选择器和提交列表均显示当前开发分支为 `main`。\n- 仓库规模：约 294 次提交，主体为 TypeScript/Electron 项目；包含 `src/`、`plugins/`、`scripts/`、大型 `pnpm-lock.yaml`、两个 Git 子模块以及桌面端构建配置。\n- 上游运行时：`dsh-source.json` 将 DSH 源固定到提交 `8868ba4d5fe21740461b84e3582aa5e68c3b9e1e`。\n\n说明：本次已向指定 GitHub API 地址发起读取，但 Web 抓取端返回缓存未命中；分支由 GitHub 当前页面和 `commits/main` 交叉确认，精确时间采用同日工作区内的 GitHub 元数据快照。审查属于源代码静态审查，未执行发布二进制逆向、动态流量监控和完整依赖 CVE 扫描。\n\n## 逐维度分析\n\n### 一、代码执行\n\n**检查内容：** `package.json`、`cordis.patch.yml`、`src/runtime.ts`、`src/main.ts`、`scripts/` 目录和安装相关入口。\n\n**发现：** `package.json` 没有 `install` 或 `postinstall` 生命周期脚本，也未发现 `curl|sh`、`eval`、`new Function` 等高危安装模式；`install:mac` 只是需要用户主动调用的命令。根 `cordis.patch.yml` 内容为 `null`，不会默认注入额外插件。\n\n应用启动时会调用 `spawn(command, args, ...)` 运行 DSH，并加载工作区和市场插件。这里没有启用 `shell: true`，参数通过数组传递，命令注入风险低于字符串拼接执行；但插件获得真实代码执行能力是产品设计的一部分，不能按照普通前端插件理解。证据：`src/runtime.ts:324-351`，核心片段为 `spawn(command, args, { env: { ...process.env, ...runtimeEnv } })`。\n\n**风险程度：中等。** 未发现恶意执行链，但任何被安装插件都应被视为本地程序。\n\n### 二、数据外发\n\n**检查内容：** 固定域名、HTTP 请求入口、更新源、WebView、外部链接及代理环境。\n\n**发现：** 核心配置中的远程来源主要是 GitHub Release 和两个公开上游仓库，未发现隐藏统计服务、广告 SDK 或陌生回传域名。Electron 页面只允许将 `http:`、`https:` 外链交给系统浏览器，并阻止其他未知协议；WebView 新窗口也执行协议检查。\n\n但模型调用、WebView 页面和第三方插件天然能够访问网络，运行时还继承 `HTTP_PROXY`、`HTTPS_PROXY` 等代理配置。若恶意插件被安装，其外发能力不会被核心程序统一阻断。\n\n**风险程度：低到中等。** 核心未发现可疑回传，但第三方插件联网能力较宽。\n\n### 三、敏感信息读取\n\n**检查内容：** `~/.ssh`、DSH 用户目录、环境变量、Token、代理和配置文件访问。\n\n**发现：** 已读核心代码中未发现主动遍历或读取 `~/.ssh`。不过 `runtimeEnvironment()` 先复制完整 `process.env`，再加入 `DSH_HOME`、`DSH_PROFILE`、代理变量和其他运行参数；`src/runtime.ts` 启动子进程时再次合并完整环境。只要用户从含有 `GH_TOKEN`、云密钥、数据库密码或其他凭据的终端启动应用，这些值就对运行时及其插件可见。证据：`src/main.ts:330-348`、`src/runtime.ts:324-351`。\n\n`src/data-root.ts:78-83` 还定义了共享用户目录 `~/.ohdsh`，用于保存配置和运行数据；插件若未被隔离，可能接触同一数据根中的凭据或历史信息。\n\n**风险程度：中高。** 这是本报告最重要的风险点。\n\n### 四、依赖与供应链\n\n**检查内容：** 运行依赖、开发依赖、锁文件、Git 子模块、上游源码固定方式及自动更新配置。\n\n**发现：** `electron-updater`、`semver` 等直接运行依赖使用固定版本，仓库提交了约 374 KB 的 `pnpm-lock.yaml`；捆绑的 DSH 源也固定到具体提交，而不是在构建时永远拉取最新分支。\n\n风险来自供应链宽度：项目包含 Electron、原生终端模块、多个本地工作区包、市场插件及两个 Git 子模块；`.gitmodules` 同时声明了跟踪分支，维护者执行远程子模块更新时仍可能引入新的上游代码。 自动更新由 GitHub Release 提供，仍需在发布流程中验证构建产物、校验值和签名。\n\n**风险程度：中等。** 固定提交是优点，但依赖规模决定了需要持续审计。\n\n### 五、混淆与后门\n\n**检查内容：** Base64/十六进制载荷、动态解密执行、隐藏下载器、异常生命周期脚本、混淆代码和异常配置注入。\n\n**发现：** 已读取的核心代码保持可读 TypeScript 结构，控制流、IPC、运行时启动和插件预览逻辑均为显式实现；未发现解码后执行、下载后直接运行或隐藏 `postinstall`。根配置也没有默认加载未知插件。\n\n**风险程度：低。** 当前证据不支持将该仓库认定为恶意或后门项目。\n\n### 六、权限越界\n\n**检查内容：** Electron 隔离配置、IPC 白名单、文件访问边界、插件预览和正式运行权限。\n\n**发现：** 主窗口启用了 `contextIsolation: true`、`sandbox: true`，关闭了 `nodeIntegration`，并对 IPC 动作进行白名单验证和参数清理；这些属于生产级 Electron 基础防护。证据：`src/main.ts:1176-1192`、`1955-1974`。\n\n不足之处是市场预览仍接收完整运行环境。代码仅在平台提供 `previewSandboxPolicy` 时增加启动器，并明确输出 `mac preview sandbox unavailable`；这意味着 Linux、Windows 以及沙箱不可用的 macOS 环境没有等价 OS 级隔离。正式安装后的插件也在拥有工作区访问权的 DSH 运行时内执行。证据：`src/main.ts:664-753`。\n\n**风险程度：中高。** UI 沙箱较好，但插件代码的系统权限隔离不足。\n\n## 风险点汇总\n\n1. 完整 `process.env` 被传给运行时和插件，可能暴露 API Key、GitHub Token、代理凭据及云服务密钥。\n2. 插件预览的 OS 级沙箱并非跨平台能力；非 macOS 环境尤其需要注意。\n3. 正式插件拥有真实代码执行、工作区访问和网络访问能力，不能把市场安装理解为浏览器扩展式低权限操作。\n4. Electron、原生模块、子模块和市场插件形成较宽供应链，需要持续进行锁文件、CVE 和发布产物审计。\n5. 积极控制包括：没有自动 `postinstall`、运行命令未使用 shell、上游源码固定提交、Electron 隔离开启、IPC 存在动作白名单，且未发现混淆或后门证据。\n\n## 结论与使用建议\n\n**明确结论：该项目不是恶意软件，但目前不能在包含生产凭据和重要代码的主力账户中无条件放心使用，建议谨慎用。**\n\n建议在独立系统账户、虚拟机或容器中运行；启动前清理不必要的 Token 和密钥环境变量；只开放确实需要的工作区；第三方插件必须逐个审查后再安装；不要在插件预览模式下打开含 SSH 私钥、生产配置或客户数据的目录。发布前还应补做 `pnpm audit` 或等价依赖扫描、发布包哈希核验、签名验证和 Windows/Linux 插件沙箱测试。\n\n因此本次处置建议为 **review**：允许进入人工复核和隔离测试流程，不应直接标记为完全可信，也没有证据支持恶意封禁。\n","action":"review","reviewed_at":"2026-08-17T13:12:03.009896+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":61,"score_type":"safety","review_status":"complete"},{"full_name":"tinqiao-oss/engramory","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-13T00:00:00Z","summary":"未见恶意外联，但持久Hook、明文记忆与未实机验证要求谨慎使用","details":["代码执行：检查了 tools/engramory_init.py、tools/engramory_check.py、tools/engramory_doctor.py、hooks/engramory_index_guard.py、hooks/codex/engramory_codex_hook.py 和 Hook 配置。未发现 eval、exec、os.system、subprocess、shell=True 或 curl|sh；但安装器会生成并注册长期运行的 Python/PowerShell Hook，Codex Hook 还会通过 importlib 的 spec.loader.exec_module 动态执行指定的本地 sync 工具。该行为不是后门，但意味着安装目录中的脚本一旦被篡改，会在后续会话事件中获得代码执行机会。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))","数据外发：Python 验证器和 Hook 中未发现 requests、urllib、socket 或 HTTP 调用；DSH 插件文档所述能力仅为 ctx.tools.guard 与 ctx.skills.register，没有遥测或上传接口。项目本身也明确说明存储是本地 Markdown。不过，如果 MEMORY_ROOT 位于 iCloud、Dropbox、OneDrive 或其他同步目录，内容仍会由同步软件离开本机。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))","敏感读取：未发现主动遍历 ~/.ssh、读取私钥、Cookie、通用环境 Token 或凭据文件的代码。程序主要读取用户指定的 MEMORY_ROOT、MEMORY.md、Markdown 笔记和少量 ENGRAMORY_* 限额变量。但记忆文件是未加密明文，项目没有凭据检测或内容级阻断机制；如果智能体误写密钥、个人信息或内部地址，任何本地进程和同步客户端均可读取。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_doctor.py))","依赖风险：当前项目声明 DSH 插件为零依赖 ESM、无构建步骤，Python工具也主要依赖标准库，供应链面积较小。另一方面，DSH 第三方插件安装仍依赖宿主调用 pnpm，并被上游 @deepseek-ai/dsh-type-meta 的 404 问题阻断；插件尚未发布到 npm，也未在真实 DSH profile 内完成端到端验证，因此暂不应视为稳定可安装组件。([github.com](https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh/plugin))","混淆与后门：未发现压缩混淆代码、远程载荷下载、加密字符串解码后执行、动态网络加载或隐藏二进制。tools/engramory_init.py 中存在 Base64 PowerShell EncodedCommand，但其用途是把本地 Python Hook 参数安全地封装进 Windows 命令，路径通过 PowerShell 单引号转义，不是隐藏远程载荷。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))","权限越界：初始化器会修改 AGENTS.md、.gitignore、.codex/hooks.json，复制技能和 Hook，并在显式 --force 下对 .agents/skills/engramory 执行 shutil.rmtree。代码已增加目录重叠、符号链接逃逸和原子替换检查，降低误删及越界写入风险；但这仍是会改变智能体长期行为和项目配置的高影响安装流程。DSH 插件还可同步拒绝文件工具调用，应仅在隔离 profile 中审阅并验证后启用。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))","可信内容风险：Engramory 会让智能体长期读取 MEMORY.md 及其指向的笔记，而这些文件没有签名、来源、置信度、过期时间或真实性校验。仓库也明确承认记忆内容可受攻击者影响、假设单写者且没有语义存储锁；被协作者、同步冲突或其他程序篡改的记忆可能形成持久提示注入。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_doctor.py))","审计完整性说明：当前 GitHub 页面确认默认分支为 master、根目录约 50 次提交，并存在顶层 package.json，以及 adapters/dsh/plugin 下的 package.json、cordis.patch.yml、index.js 和 test.js；但仓库 API及这些文件的源码页在本次抓取中出现 cache miss。updated_at 因此采用当前可验证内容中 2026-08-13 的保守时间下限，不应冒充 GitHub API 的精确 pushed_at；发布前必须重新读取 API 和上述四个文件。([github.com](https://github.com/tinqiao-oss/engramory))"],"report_md":"## 安全评分\n\n**61/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》对 `tinqiao-oss/engramory` 进行六维安全检查。该仓库不是传统的联网服务，而是一套本地文件型智能体记忆协议，包含 Python 初始化器、验证器、Claude/Codex 生命周期 Hook，以及位于 `adapters/dsh/plugin/` 的 DSH 插件。当前页面显示项目处于 `0.8.0` 实验阶段，默认分支为 `master`，约有 50 次提交。项目的核心设计是把 `MEMORY.md` 和 Markdown 笔记作为长期记忆，并通过 Hook 或 DSH 工具守卫限制索引体积。([github.com](https://github.com/tinqiao-oss/engramory))\n\n综合结论：**没有发现恶意下载、主动数据外发、凭据窃取或明显后门，但不建议用户直接无审查地安装到主力 DSH profile。** 风险主要来自持久 Hook 执行面、明文记忆、持久提示注入、初始化器对项目配置的修改，以及 DSH 插件尚未完成真实 profile 的端到端验证。\n\n## 评估对象\n\n- 仓库：`tinqiao-oss/engramory`\n- 评估分支：`master`\n- 当前可见状态：`0.8.0 — experimental`\n- 仓库规模：约 50 次提交；根目录包含 `.github/`、`adapters/`、`hooks/`、`templates/`、`tests/`、`tools/` 和顶层 `package.json`；DSH 插件目录包含 `package.json`、`cordis.patch.yml`、`index.js`、`test.js`、README 与 LICENSE。([github.com](https://github.com/tinqiao-oss/engramory))\n- 更新时间说明：GitHub 仓库 API 本次访问发生缓存未命中，无法诚实取得精确 `pushed_at`。报告字段中的 `2026-08-13T00:00:00Z` 是由当前可见 DSH 适配内容得到的保守时间下限，而不是伪造的 API 精确时间；正式发布前必须重新调用仓库 API 校准。\n- 指定路径核查：顶层没有 `src/`、`lib/` 或 `scripts/`；主要可执行代码位于 `tools/`、`hooks/` 和 `adapters/dsh/plugin/`。顶层没有 `cordis.patch.yml`，实际文件位于 `adapters/dsh/plugin/cordis.patch.yml`。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `tools/engramory_init.py`、`tools/engramory_check.py`、`tools/engramory_doctor.py`、`hooks/engramory_index_guard.py`、`hooks/codex/engramory_codex_hook.py`、`hooks/settings.snippet.json` 和 DSH 插件说明。\n\n**发现：** 未发现 `eval()`、`exec()`、`os.system()`、`subprocess`、`shell=True`、`curl | sh` 或 npm 自动安装脚本的直接证据。Claude Hook 使用命令数组调用 Python，避免把用户路径拼接进 shell。初始化器在 Windows 上会生成 PowerShell `EncodedCommand`，但被编码的内容是本地 Python Hook 命令，并使用单引号转义动态路径，属于命令注入防护，不是隐藏载荷。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))\n\n需要关注的是 `hooks/codex/engramory_codex_hook.py`：它把配置提供的 sync 文件路径传入 `importlib.util.spec_from_file_location()`，随后调用 `spec.loader.exec_module(module)`。代码片段为：`spec = importlib.util.spec_from_file_location(name, str(path))`、`spec.loader.exec_module(module)`。这意味着被安装的 sync 脚本就是受信任的可执行代码；如果项目目录或 Hook 文件后来被篡改，恶意代码可在会话生命周期事件中执行。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/hooks/codex/engramory_codex_hook.py))\n\n**风险程度：中。** 这是明确、可见的本地 Hook 机制，不属于隐蔽后门，但其持久执行属性要求用户锁定版本并保护安装目录。\n\n### 2. 数据外发\n\n**检查内容：** Python 文件中的网络库、URL、HTTP 客户端、遥测代码和插件能力说明。\n\n**发现：** 验证器与 Hook 未发现 `requests`、`urllib`、`socket` 或运行时 HTTP 请求。DSH 插件公开能力限定为 `ctx.tools.guard()` 和 `ctx.skills.register()`：前者判断文件写入是否超过索引上限，后者注册本地协议文本，没有上传接口。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))\n\n不过，记忆存储位置由用户配置。仓库明确指出 `.gitignore` 不是加密；如果目录处于云同步、备份或桌面索引范围，笔记仍会被第三方软件复制。([github.com](https://github.com/tinqiao-oss/engramory))\n\n**风险程度：低到中。** 代码本身未见主动外发，但存储位置可能造成被动外发。\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、私钥、Cookie、Token、通用环境变量、DSH 凭据和任意主目录遍历。\n\n**发现：** 未发现读取 `~/.ssh`、私钥、浏览器 Cookie、API Token 或遍历用户主目录的行为。读取范围集中在显式配置的 `MEMORY_ROOT`、`MEMORY.md`、Markdown 笔记和 `ENGRAMORY_HARD`、`ENGRAMORY_INDEX_PATH` 等限额变量。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_doctor.py))\n\n但 Engramory 没有秘密扫描器。协议要求智能体不要把凭据值写入记忆，却没有代码层强制；因此错误写入的密钥会以明文保存。医生工具虽然对单文件读取设置 4 MB 上限，并阻止符号链接逃逸，但不会识别内容是否为密码。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_doctor.py))\n\n**风险程度：中。** 不主动偷取凭据，但用户必须把记忆目录视为敏感数据目录。\n\n### 4. 依赖风险\n\n**检查内容：** 顶层和 DSH 插件 `package.json`、构建方式、运行时依赖及安装链。\n\n**发现：** 当前 Changelog 将 DSH 插件描述为零依赖 ESM、无构建步骤，并由 Node 原生测试覆盖决策表；Python工具主要使用标准库，第三方依赖面积较小。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/CHANGELOG.md))\n\n但插件尚未发布到 npm，真实安装会经过 DSH 的 `pnpm` 链路。项目公开说明，当前 DSH 预览版安装第三方插件时可能因未发布的 `@deepseek-ai/dsh-type-meta` 返回 404，且插件尚未在真实 profile 中端到端运行。([github.com](https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh/plugin))\n\n**风险程度：中。** 不是依赖投毒迹象，而是安装链不完整、宿主 API 尚不稳定。\n\n### 5. 混淆与后门\n\n**检查内容：** Base64、压缩代码、动态下载、加密字符串、反射加载和不可读二进制。\n\n**发现：** 没有发现压缩混淆 JavaScript、远程下载并执行、隐藏二进制或解密载荷。唯一显眼的 Base64 是 Windows PowerShell `EncodedCommand`，源码同时展示了编码前的命令构造和安全转义目的。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))\n\n动态导入 sync 模块是显式 Hook 架构的一部分，但没有哈希校验或签名，因此属于完整性风险，而非已证实后门。\n\n**风险程度：低到中。** 未见恶意混淆；应补充安装文件完整性校验。\n\n### 6. 权限越界\n\n**检查内容：** 文件写入范围、删除行为、规则文件修改、Hook 注册和 DSH 工具拦截权限。\n\n**发现：** 初始化器会修改或创建 `AGENTS.md`、`.gitignore`、`.codex/hooks.json`、技能目录和记忆目录。在 `--force` 下存在 `shutil.rmtree(skill_root)`，但执行前会拒绝 memory root 与技能目录重叠，并通过 `_refuse_symlink_escape()` 阻止写入目标解析到项目根目录之外。文件更新采用临时文件与 `os.replace()`，降低中途截断风险。([github.com](https://github.com/tinqiao-oss/engramory/blob/master/tools/engramory_init.py))\n\nDSH 插件通过 `ctx.tools.guard()` 获得拒绝文件工具调用的能力。文档显示它只针对名为 `MEMORY.md` 的索引进行尺寸判断，其他文件和读操作放行；但插件尚未在真实 DSH profile 中完成端到端验证，不能仅凭单元测试宣布权限边界完全可靠。([github.com](https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh/plugin))\n\n更重要的是，记忆内容没有来源认证。项目明确承认记忆是 attacker-influenceable input，没有 `source`、`confidence`、`last_verified`、过期时间或签名，并假设单写者。被篡改的记忆可能在后续会话中成为持久提示注入。([github.com](https://github.com/tinqiao-oss/engramory))\n\n**风险程度：中。** 越界写入已有较完善防护，但持久规则、Hook 和不可信记忆仍扩大了智能体权限面。\n\n## 风险点汇总\n\n1. Codex 生命周期 Hook 会动态执行本地 sync Python 文件，缺少哈希或签名校验。\n2. 记忆内容是明文，且没有凭据扫描、来源认证和内容完整性保护。\n3. MEMORY.md 和笔记会进入智能体上下文，存在持久提示注入风险。\n4. 初始化器会修改用户规则、Hook 和技能目录；`--force` 具有删除目标技能目录的能力。\n5. DSH 插件拥有拒绝文件工具调用的权限，但仍处于实验阶段，尚未完成真实 profile 端到端验证。\n6. DSH 插件安装链目前受宿主 pnpm 和缺失依赖影响，不能视为成熟稳定发行物。\n7. 本次 GitHub API、package.json、cordis.patch.yml 和 index.js 的直接源码抓取出现缓存未命中，正式发布前必须进行一次补充复核。\n\n## 结论与使用建议\n\n**结论：存在风险，但没有证据表明该仓库是恶意项目。** 用户可以在隔离的测试项目或一次性 DSH profile 中试用，前提是记忆目录不包含凭据、不位于公共仓库或不可信同步目录，并在安装前固定具体 commit。不要直接把最新分支 Hook 注册到主力工作环境，也不要把它当作安全边界或秘密保险箱。\n\n发布前建议补做以下检查：完整读取顶层及插件 `package.json`，确认不存在 `preinstall`、`install`、`postinstall`；审阅 `adapters/dsh/plugin/index.js` 与 `cordis.patch.yml`；运行插件全部 Node 测试；在隔离 DSH profile 中验证实际安装文件、注册的技能、工具守卫范围和卸载结果；计算并记录安装 Hook 的 SHA-256；最后重新调用 GitHub 仓库 API，取得真实 `default_branch` 与精确 `pushed_at`。完成这些验证后，若代码与文档一致，可重新评估为通过；当前建议为：**谨慎用，进入人工复核，不直接发布。**\n","action":"review","reviewed_at":"2026-08-17T14:37:39.839548+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":61,"score_type":"safety","review_status":"complete"},{"full_name":"toolclub/dsh-agent-team-gui","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T00:00:00Z","summary":"未发现后门或主动外传，但源码安装和子代理文件权限需要收紧","details":["代码执行：`package.json` 定义了 `prepare: tsdown` 和 `prepack: pnpm run build`，从 GitHub 源码安装时会在沙箱外执行构建；未发现 `postinstall`、`curl|sh`、`child_process`、`eval` 或动态下载执行。属于可解释的构建行为，但不应直接安装未固定的 main。","数据外发：后端、工具注册和 RPC 代码未发现硬编码第三方域名、HTTP 客户端或自建遥测；浏览器 RPC 明确要求 loopback authority。任务提示和上下文仍会按照用户已有的 DSH 模型配置发送给模型服务，这是产品正常数据边界。","敏感读取：可审计代码未发现读取 `~/.ssh`、`~/.dsh`、环境 token、系统钥匙串或主目录凭据，也未发现 `process.env` 使用；但 Cordis 权限声明包含 `scope:fs`，且成员未配置 `toolScope` 时可能继承宿主提供的文件工具，应视为实质性权限风险。","依赖风险：运行依赖主要为 React、Zod，另有多项 `@deepseek-ai/*` RC 范围的 peerDependencies；仓库有 `pnpm-lock.yaml`，但发布文件清单不包含锁文件。源码安装还会执行构建依赖，必须固定提交并审计最终 tarball。","混淆与后门：源码以可读 TypeScript/TSX 为主，未发现压缩脚本、Base64 载荷、`new Function`、自解密代码、二进制文件或隐藏安装目录；`spawn` 指的是 DSH 子代理创建接口，不是操作系统进程启动。","权限越界：插件能够创建、发送、等待和关闭子代理，属于设计内的高能力操作。其来源检查会拒绝子代理或团队会话递归调用，RPC 也限制为本机连接，但 `scope:fs` 与可选 `toolScope` 的组合仍要求管理员配置显式允许列表。"],"report_md":"## 安全评分\n\n**61/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维度标准，对 `toolclub/dsh-agent-team-gui` 的安装链、宿主服务、RPC、子代理调度、依赖与权限声明进行了静态安全分析。结论是：**没有发现恶意后门、主动窃取凭据、隐蔽网络外传或任意系统命令执行代码，但该插件不适合未经配置直接安装到保存生产源码和密钥的主环境。** 主要风险来自源码安装期间的沙箱外构建，以及插件申请的文件系统工具权限和子代理可能继承的宽泛工具范围。\n\n安全评分为 **61/100**，需要注意。这不是恶意软件判定；明确建议是：**谨慎用，在固定提交、验证构建产物、限制 `toolScope` 后可以使用，不要盲装持续变化的 main。**\n\n## 评估对象\n\n- 仓库：`toolclub/dsh-agent-team-gui`\n- 评估分支：`main`\n- 最新可见提交：`274fcbc59152e77cba8a2907c46e5ad493bd1b08`\n- 最后更新日期：2026-08-17\n- 仓库规模：GitHub 当前页面显示约 14 个提交、19 个根目录项目，主要语言为 TypeScript；核心后端入口约 631 行，RPC 约 246 行，调度工具约 114 行。\n- 重点检查：`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml`、`src/index.ts`、`src/rpc.ts`、`src/tools/dispatch-to-squad.ts`、`src/client/`、测试与构建配置。\n- 根目录未发现独立 `scripts/`、`install/` 或已提交的 `lib/` 目录；`lib/` 是构建后生成并由包入口引用的产物。\n\n说明：GitHub Repository API 地址已请求，但本次抓取端未返回可解析的秒级 `pushed_at` JSON；分支和提交页面确认 default branch 为 `main`、最后提交日期为 2026-08-17。因此 JSON 中的 `2026-08-17T00:00:00Z` 是日期级 UTC 归一值，不应被解释为 GitHub API 返回的精确提交时刻。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json:62-69`、`cordis.patch.yml:1-10`、`src/index.ts`、`src/tools/dispatch-to-squad.ts`，并检索 `exec`、`child_process`、`eval`、`new Function`、`curl|sh`、`postinstall` 等模式。\n\n**发现：** `package.json` 包含 `prepare: tsdown` 和 `prepack: pnpm run build`。这意味着根据 README 从 GitHub 安装时，包管理器需要在沙箱外运行构建脚本。脚本本身是常规 TypeScript 打包命令，没有下载或执行远程脚本；未发现 `postinstall`、Shell 管道、`curl|sh`、Node `child_process`、动态求值或系统命令拼接。代码中的 `spawn` 调用为 DSH 的子代理 API，并非操作系统进程启动。\n\n**风险程度：中低。** 当前可见脚本没有恶意行为，但源码安装会给予仓库构建阶段本机代码执行机会，因此必须固定提交并核对构建产物。\n\n### 2. 数据外发\n\n**检查内容：** 后端 imports、RPC 注册、浏览器连接方式、导入导出功能、第三方域名及 HTTP/WebSocket 调用。\n\n**发现：** 可审计的宿主代码没有引入 `http`、`https` 或其他独立网络客户端，也没有硬编码统计、Webhook、广告或遥测域名。`src/rpc.ts:235-244` 在注册 RPC 时检查 `ctx.connection.authority !== 'loopback'` 并拒绝非本机连接，这是有效的远程控制防护。\n\n插件会把用户任务、成员系统提示和上下文交给 DSH 已配置的代理及模型提供商，这是其核心功能，不属于插件私自外传。但定义导出功能包含 `systemPrompt`、provider、model 等字段；如果系统提示内写入了业务秘密，导出的 JSON 文件也会包含这些内容。\n\n**风险程度：低。** 未发现插件自建的隐蔽外传通道；用户仍应遵守其模型服务商的数据政策，并妥善保管导出的定义文件。\n\n### 3. 敏感读取\n\n**检查内容：** `process.env`、`homedir`、`~/.ssh`、`~/.dsh`、token、API Key、Keychain、文件读取 API 和本地路径扫描。\n\n**发现：** 当前可见代码没有读取环境变量、SSH 配置、DSH 凭据目录、浏览器数据或系统钥匙串，也没有发现直接使用文件系统模块读取用户目录。代理定义和运行状态存储在 Cordis 数据表中。\n\n但是，`cordis.patch.yml:6-10` 为工具声明了 `scope:agent` 与 `scope:fs`。插件代码本身不直接读取敏感文件，不等于它创建的代理无法通过宿主文件工具读取文件。成员的 `toolScope` 是可选配置；如果没有显式 allow 列表，实际可用工具取决于 DSH 宿主的默认授权策略。\n\n**风险程度：中。** 直接窃取凭据的证据为零，但默认文件能力边界需要管理员主动收紧。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json` 运行依赖、peerDependencies、开发依赖、锁文件和发布文件清单。\n\n**发现：** 直接运行依赖主要为 React、React DOM 和 Zod；插件依赖多项 `@deepseek-ai/*` peer 包，并允许 `>=0.1.0-rc.5 <0.2.0` 范围内的预发布版本。仓库存在 `pnpm-lock.yaml`，但 `package.json:18-25` 的发布文件列表没有包含锁文件，因此通过源码或包分发安装时，依赖解析结果不一定与审计时完全一致。\n\n此外，当前可读取的 manifest 版本为 `0.1.0`，README 安装示例却使用 `v0.4.1`，存在版本元数据、文档和实际安装对象不完全一致的问题。该问题本身不是后门，但会削弱审计对象的可复现性，容易出现“审计 main、实际安装 tag 或 tarball”的偏差。\n\n**风险程度：中。** 发布前应对指定 commit 生成 tarball，列出文件、计算 SHA-256，并运行锁定依赖的测试和依赖漏洞扫描。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩代码、Base64/十六进制载荷、动态模块下载、隐藏文件、二进制可执行文件、自修改代码和异常持久化逻辑。\n\n**发现：** 仓库主体为可读 TypeScript/TSX，后端服务、RPC 和工具调用均能直接追踪。未发现 `eval`、`new Function`、Base64 解码执行、远程模块加载、加密载荷、自启动项修改或二进制程序。`randomUUID` 用于普通任务和会话标识，不是混淆行为。根目录也没有独立安装脚本目录或可疑二进制。\n\n**风险程度：低。** 没有观察到后门或恶意隐藏代码特征。\n\n### 6. 权限越界\n\n**检查内容：** Cordis 权限、子代理创建与消息转发、RPC 操作范围、来源校验和递归调用保护。\n\n**发现：** 插件能够创建子代理、向成员发送任务、等待结果并关闭会话，这些是团队编排的正常能力。`dispatch_to_squad` 在执行前检查调用来源，拒绝由 subagent 或 team 会话再次发起团队调度，降低了递归扩散和代理失控风险；RPC 只接受 loopback 连接，也避免普通远程访问者直接控制代理。\n\n主要问题是权限声明包含 `scope:fs`，而成员的工具范围允许不填写。若宿主默认向代理开放 Shell、文件读取、网络请求或代码执行工具，用户输入或模型误判可能让子代理触达超出预期的文件和操作。该风险来自授权模型，而不是发现了恶意调用。\n\n**风险程度：中。** 应为每个团队成员配置最小权限 `toolScope.allow`，并显式拒绝无关的文件、Shell、网络和凭据工具。\n\n## 风险点汇总\n\n1. GitHub 源码安装会运行 `prepare` 构建，未固定 main 时存在供应链替换窗口。\n2. Cordis 声明了 `scope:fs`，子代理工具范围又可能为空，默认权限可能过宽。\n3. manifest、README 版本和安装 tag 存在不一致，当前审计对象与最终 tarball 不够可复现。\n4. 定义导出包含系统提示、provider 和 model 信息，分享导出文件前需要脱敏。\n5. 正面证据包括：无 `curl|sh`、无 `child_process`、无环境凭据读取、无硬编码外传域名、RPC 限制为 loopback、调度工具具有来源限制。\n\n## 结论与使用建议\n\n**结论：存在风险，但没有证据表明它是恶意插件。用户应谨慎使用，而不是完全拒绝。**\n\n不建议直接把不断变化的 `main` 安装到含生产密钥、SSH 私钥和重要源码的主机。建议由 MyDSH 发布审核流程完成以下步骤后再放行：\n\n1. 固定到已审计 commit，并记录 tarball 的 SHA-256；不要使用浮动 main。\n2. 在隔离环境执行 `pnpm install --frozen-lockfile`、测试和构建，比较 tarball 与源码。\n3. 审核最终 `lib/` 构建产物，确认不存在源码中没有的网络请求和动态执行。\n4. 为每个成员设置明确的 `toolScope.allow`，默认不开放 Shell、全盘文件读取、网络请求和凭据工具。\n5. 将 WebUI 保持在本机或受认证的可信网络内；不要绕过 loopback 保护。\n6. 不要在 system prompt 中保存 API Key、SSH 密钥或长期凭据；导出团队定义后应检查并脱敏。\n\n完成上述限制后，可以在开发或受控生产环境使用；在未固定版本、未检查 tarball、未限制文件工具权限之前，**不要将其视为可以无条件放心安装的插件**。\n","action":"review","reviewed_at":"2026-08-17T15:00:06.353886+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":61,"score_type":"safety","review_status":"complete"},{"full_name":"Nagi-ovo/dsh-ads","verdict":"存在风险","summary":"未见木马或数据外传，但会调用gh并读取GitHub令牌，需人工复核。","details":["命令执行：node:child_process.execFile 仅用于固定的 gh api 查询，无注入路径。","敏感数据：读取 GITHUB_TOKEN/GH_TOKEN，仅作为 Bearer 发送至 api.github.com。","依赖与脚本：零运行时依赖，无 postinstall 危险操作。"],"action":"review","reviewed_at":"2026-08-17T19:22:05Z","safety_score":60,"score_type":"safety","standard":"MyDSH-Security-Standard-v1.1","initial_safety_score":68,"user_advice":"谨慎用","review_status":"complete","report_md":"## 安全评分\n\n**60/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见木马或数据外传，但会调用gh并读取GitHub令牌，需人工复核。\n\n## 评估对象\n\n- 仓库：`Nagi-ovo/dsh-ads`\n- 分支：`main`\n- 版本更新时间：2026-08-18T01:28:44Z\n\n## 检查结果\n\n- 命令执行：node:child_process.execFile 仅用于固定的 gh api 查询，无注入路径。\n- 敏感数据：读取 GITHUB_TOKEN/GH_TOKEN，仅作为 Bearer 发送至 api.github.com。\n- 依赖与脚本：零运行时依赖，无 postinstall 危险操作。\n\n## 结论与使用建议\n\n**谨慎用**。未见木马或数据外传，但会调用gh并读取GitHub令牌，需人工复核。\n","branch":"main","updated_at":"2026-08-18T01:28:44Z"},{"full_name":"GanyuanRan/Aegis","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T10:35:37Z","summary":"未见恶意外发，但含任意命令执行和用户技能目录改写能力","details":["维度1·代码执行：package.json 无 install、postinstall 等生命周期脚本，也未见 curl|sh 下载执行；但 cordis.patch.yml 的 run_script 可通过 subprocess.run 执行任意命令，并允许 shell 模式、继承当前环境变量，属于真实高权限执行能力。","维度2·数据外发：静态代码未发现遥测、隐藏回传或向未知第三方域名上传数据；明确网络行为主要是 aegis-update.py 对现有 Git remote 执行 fetch，未发现固定的数据收集服务器。","维度3·敏感读取：未发现主动读取 ~/.ssh、~/.dsh 凭据或专门收集 token 的逻辑；但 read_file/find_skills 支持调用方指定任意路径，diff_overview 默认扫描 ~/.codex、~/.claude、~/.config/opencode，子进程还会继承环境变量，恶意或误导性调用可触及敏感信息。","维度4·依赖风险：package.json 没有第三方运行时依赖，也没有 npm 生命周期脚本；仓库不存在常规 src/、lib/ 目录，核心实现为 Python 标准库、Shell 脚本和 ESM 适配文件，依赖供应链风险较低。","维度5·混淆与后门：未发现大段混淆代码、隐藏 Base64 载荷、反向 Shell、挖矿、动态下载加载器或持久化后门，现有命令执行逻辑名称和用途均公开可见。","维度6·权限越界：更新与同步脚本会写入 ~/.config/aegis，并可复制、覆盖技能目录；copy-skills 模式会用 shutil.rmtree 删除目标目录中不再匹配的技能文件夹，Hooks 也会介入工具调用和 Git 操作。不能视为低权限插件，建议先备份配置并在隔离项目中验证后使用。"],"action":"review","reviewed_at":"2026-08-17T12:05:57.028860+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":58,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**58/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见恶意外发，但含任意命令执行和用户技能目录改写能力\n\n## 评估对象\n\n- 仓库：`GanyuanRan/Aegis`\n- 分支：`main`\n- 版本更新时间：2026-08-17T10:35:37Z\n\n## 检查结果\n\n- 维度1·代码执行：package.json 无 install、postinstall 等生命周期脚本，也未见 curl|sh 下载执行；但 cordis.patch.yml 的 run_script 可通过 subprocess.run 执行任意命令，并允许 shell 模式、继承当前环境变量，属于真实高权限执行能力。\n- 维度2·数据外发：静态代码未发现遥测、隐藏回传或向未知第三方域名上传数据；明确网络行为主要是 aegis-update.py 对现有 Git remote 执行 fetch，未发现固定的数据收集服务器。\n- 维度3·敏感读取：未发现主动读取 ~/.ssh、~/.dsh 凭据或专门收集 token 的逻辑；但 read_file/find_skills 支持调用方指定任意路径，diff_overview 默认扫描 ~/.codex、~/.claude、~/.config/opencode，子进程还会继承环境变量，恶意或误导性调用可触及敏感信息。\n- 维度4·依赖风险：package.json 没有第三方运行时依赖，也没有 npm 生命周期脚本；仓库不存在常规 src/、lib/ 目录，核心实现为 Python 标准库、Shell 脚本和 ESM 适配文件，依赖供应链风险较低。\n- 维度5·混淆与后门：未发现大段混淆代码、隐藏 Base64 载荷、反向 Shell、挖矿、动态下载加载器或持久化后门，现有命令执行逻辑名称和用途均公开可见。\n- 维度6·权限越界：更新与同步脚本会写入 ~/.config/aegis，并可复制、覆盖技能目录；copy-skills 模式会用 shutil.rmtree 删除目标目录中不再匹配的技能文件夹，Hooks 也会介入工具调用和 Git 操作。不能视为低权限插件，建议先备份配置并在隔离项目中验证后使用。\n\n## 结论与使用建议\n\n**谨慎用**。未见恶意外发，但含任意命令执行和用户技能目录改写能力\n"},{"full_name":"huiliyi37/dsh-tianshu-tui","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T12:57:18Z","summary":"未见明确恶意外传，但自动更新、完整 Host 权限和供应链风险需要复核。","details":["维度1—代码执行：package.json:6-10 未设置 install、postinstall、preinstall 或 prepare 安装钩子；start 脚本会通过 node -e 加载 lib/index.js，随后执行 dsh replay。README.md:242-256 明确存在启动检查更新、升级、重启及旧进程清理；README.md:279-285 声明 4 处子进程已改用 execFileSync、避免 shell 字符串拼接，但该结论主要来自维护者说明，仍需逐行复核当前源码。风险程度：中等。","维度2—数据外发：已检查 package.json、cordis.patch.yml、README 及根目录清单，未发现 Sentry、统计埋点、Webhook、远程日志或自定义上传域名，也未发现 axios 等明显业务 HTTP 客户端依赖。明确网络行为是启动自更新及正常 npm 依赖下载；未发现把会话、环境变量或本地文件发送到非预期第三方的直接证据。风险程度：较低，但完整 lib/index.js 尚需离线复核。","维度3—敏感读取：已审文件中没有 ~/.ssh、私钥、AWS/GitHub token、process.env 全量枚举或 ~/.dsh 凭据扫描的显式配置。插件具备剪贴板、附件、外部编辑器、LSP 和本地偏好功能，因而存在合理的本地读取能力，但公开材料没有证明其越过用户选择的文件或项目范围。风险程度：较低；建议在无生产凭据环境完成动态验证。","维度4—依赖风险：package.json:11-20 使用多个带 ^ 的非精确版本；当前根目录清单未见 package-lock.json、pnpm-lock.yaml 或 yarn.lock，GitHub 安装流程又会执行 npm install，因此不同时间安装可能解析出不同依赖版本。API 还显示 main 分支未保护、当前提交未签名，而插件支持启动自更新，供应链变更可较快进入用户环境。风险程度：中等。","维度5—混淆或后门：根目录同时保留 src 源码目录和 lib/index.js 构建产物，没有发现加密载荷、WASM、原生可执行文件、超长 Base64 配置或隐蔽安装脚本。lib/index.js 约 554KB，单文件打包会降低人工审计可读性；在无法完整逐行比对 src 与 bundle 的情况下，不能把“未发现”扩大为“已证明不存在”。风险程度：较低至中等。","维度6—权限越界：cordis.patch.yml:9-16 将原先只提供 engine 的上下文改为注入完整 host，并增加连接、断开和模式变化事件；这使插件能够接触比纯渲染引擎更广的宿主对象。结合自动更新、进程终止和重启能力，该插件事实上不只是被动展示层。未发现 sudo、chmod、chown、LaunchDaemon 或系统服务安装，但宿主权限面明显偏宽。风险程度：中等。"],"report_md":"## 安全评分\n\n**57/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：huiliyi37/dsh-tianshu-tui\n\n## 概述\n\n本次按照 MyDSH 六维安全标准，对代码执行、数据外发、敏感信息读取、依赖供应链、混淆或后门以及权限越界进行审查。现有证据中**没有发现明确的凭据窃取、会话外传、恶意下载执行、持久化后门或系统提权行为**，因此不应将仓库判定为恶意。但插件具有启动自更新、宿主进程重启、多个外部子进程调用以及完整 Host 对象注入能力，权限和供应链暴露面明显高于普通的纯展示插件，当前不适合给出“放心用”的结论。仓库公开页面同时展示了 `src/`、`lib/`、`scripts/`、`package.json` 和 `cordis.patch.yml` 等关键审计入口，并明确说明启动自更新和进程调用功能。\n\n## 评估对象\n\n- 仓库：`huiliyi37/dsh-tianshu-tui`\n- GitHub API 确认的默认分支：`main`\n- 分支最后推送时间：`2026-08-17T12:57:18Z`\n- 当前提交：`8d081a5e469917ed8aa6507adb909259cb394827`\n- GitHub API 仓库规模：2696 KB，主要语言为 TypeScript\n- 重点文件：`package.json`、`cordis.patch.yml`、`src/`、`lib/index.js`、`scripts/`、README 中的安装与自更新说明\n\n根目录可见源码目录和约 554KB 的构建产物 `lib/index.js`，但本次远程抓取未能对该大型 bundle 以及当前提交下全部 `src/` 文件完成逐行展开。因此本报告对清单、补丁和公开行为说明给出确定结论，对 bundle 内部不存在隐藏分支只给出有限保证；这也是最终要求人工复核而非直接发布的原因。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、启动脚本、自更新说明，以及外部编辑器、剪贴板、LSP、开发脚本涉及的进程调用。\n\n**发现：** `package.json:6-10` 只定义 `start`、`build`、`dev`，未发现 `install`、`preinstall`、`postinstall` 或 `prepare`，所以普通安装阶段没有仓库自定义的自动执行钩子。`start` 会用 `node -e` 动态导入 `lib/index.js`，完成后执行 `dsh replay`；这是用户主动启动时发生的宿主命令执行，不是静默安装行为。\n\nREADME.md:242-256 明确说明插件会在启动时检查更新、安装最新版本、重启并清理旧进程；README.md:279-285 又称 4 处子进程已改用 `execFileSync`，不再使用 shell 字符串拼接。参数化进程 API 能降低命令注入概率，但自动更新与进程重启仍属于高影响能力，而且安全加固说明需要和当前源码逐行比对后才能完全采信。**风险程度：中等。**\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** 依赖清单、仓库配置、补丁文件、自更新和远程服务说明。\n\n**发现：** 已审材料中未出现 Sentry、Google Analytics、远程日志、Webhook、反向连接地址或自定义数据收集域名；依赖中也没有明显面向业务上报的 HTTP SDK。明确的外部网络行为是 GitHub/npm 相关安装与版本更新。没有发现将 DSH 会话、剪贴板、本地附件、环境变量或凭据发送到非预期第三方的直接证据。由于未完成整个 bundle 的字符串和网络调用扫描，结论应表述为“当前证据未发现”，不能表述为“已证明绝无外发”。**风险程度：较低。**\n\n### 3. 敏感文件与凭据读取\n\n**检查内容：** `~/.ssh`、SSH 私钥、`~/.dsh`、环境 token、云厂商凭据、GitHub token、全量环境变量枚举和任意目录扫描迹象。\n\n**发现：** `package.json` 和 `cordis.patch.yml` 没有上述敏感路径或变量；公开功能主要涉及用户选择的附件、剪贴板、外部编辑器、项目 LSP 诊断和本地偏好持久化。它们需要一定的本地文件或进程访问，但现有证据没有显示插件主动扫描用户主目录或读取 SSH、云平台凭据。建议动态测试时使用不含生产密钥的临时 HOME，并监控文件访问和出站连接。**风险程度：较低。**\n\n### 4. 依赖与供应链\n\n**检查内容：** 依赖版本、锁文件、安装来源、分支保护、提交签名及自动更新策略。\n\n**发现：** `package.json:11-20` 的依赖普遍采用 `^` 范围，根目录清单未见 npm、pnpm 或 Yarn 锁文件；而推荐安装方式会克隆 GitHub 仓库并运行 `npm install`。因此相同提交在不同时间可能得到不同的传递依赖。GitHub API 显示 `main` 未启用分支保护，当前提交验证状态为未签名；再叠加启动自更新，维护者账号、上游依赖或默认分支一旦遭到污染，用户环境可能较快接收变更。**风险程度：中等，是本报告的主要风险来源。**\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** 大型编码字符串、动态解密执行、WASM、原生二进制、下载后执行、混淆变量、隐藏安装脚本及源码与构建产物可追溯性。\n\n**发现：** 根目录同时提供 `src/` 与 `lib/index.js`，没有在已审清单中发现原生二进制、加密载荷或隐蔽生命周期脚本。`lib/index.js` 是约 554KB 的单文件构建产物，属于合理的发布形态，但会显著降低人工审计效率。正式进入 MyDSH 发布列表前，应从固定提交重新构建并对比生成文件，确认仓库内 bundle 可由公开源码确定性产生。**风险程度：较低至中等。**\n\n### 6. 权限越界\n\n**检查内容：** root 权限、系统服务、权限修改、宿主对象范围、文件写入和进程控制。\n\n**发现：** `cordis.patch.yml:9-16` 将上下文从只注入 `engine: host.engine` 改为注入 `host: host`，同时增加连接、断开及模式变化事件。完整 Host 通常比单一 engine 暴露更多服务和生命周期能力，这是一项真实的权限面扩大。结合插件能够写入更新、终止旧进程并重启 DSH，其实际能力与仓库所称“纯展示层”并不完全一致。未发现 `sudo`、`chmod`、`chown`、LaunchDaemon、systemd 或 root 持久化配置，相关操作预计继承当前用户权限。**风险程度：中等。**\n\n## 风险点汇总\n\n1. 启动自更新会获取并执行后续版本，同时可重启宿主进程，缺少固定提交或用户确认会放大供应链风险。\n2. `cordis.patch.yml` 把完整 Host 注入插件上下文，权限明显宽于纯 UI 渲染所需的最小接口。\n3. 依赖采用范围版本且根目录未见锁文件，安装结果可能随时间漂移。\n4. 默认分支未保护、最新提交未签名，无法依靠 GitHub 分支策略和签名建立强发布链证明。\n5. 大型单文件 bundle 尚未完成与源码的确定性构建比对，仍需人工复核网络调用、文件读取和子进程参数。\n\n## 结论与使用建议\n\n**最终结论：存在风险，建议谨慎用，不建议当前直接标记为“放心用”。**现有证据不支持“恶意”判断，个人测试环境可以在隔离条件下试用；但含有生产 API Key、SSH 凭据、私有代码或高价值 DSH 会话的环境，不应直接跟随 `main` 或允许无条件启动自更新。\n\n进入 MyDSH 正式发布前，建议固定到已审提交 `8d081a5e469917ed8aa6507adb909259cb394827`，增加并提交锁文件，默认关闭自动更新或改成先提示再更新，缩减 Host 注入接口，对 `src/` 和 `lib/index.js` 做完整静态扫描与可重复构建比对，并在空凭据容器中记录文件访问、子进程参数及全部出站连接。完成这些项目后，才适合重新评估为可放心使用。\n","action":"review","reviewed_at":"2026-08-17T13:11:46.671978+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":57,"score_type":"safety","review_status":"complete"},{"full_name":"labring/sealos-skills","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-07-28T00:00:00Z","summary":"未见恶意代码，但会执行部署命令、读取令牌并操作云资源","details":["代码执行：仓库明确通过多个 Node.js 脚本完成 Docker 构建、镜像推送、GitHub Actions、部署及在线冒烟测试，属于功能必需的高影响命令执行；未发现 eval、curl|sh 或安装后静默执行远程脚本。","数据外发：会向 GitHub API、Sealos API、Sealos Dashboard及容器镜像仓库发送认证信息、部署配置、镜像或项目构建产物；这些外发与产品功能一致，但使用私有代码时必须确认部署模式和目标账户。","敏感读取：sealos-auth.mjs、gh-auth.mjs、gh-refresh-scopes.mjs 和 ensure-image-pull-secret.mjs 会处理 GitHub、Sealos及镜像仓库凭据；未发现读取 ~/.ssh、~/.dsh 凭据库或批量收集无关环境变量的证据。","依赖风险：根目录存在 package.json、package-lock.json，未见 postinstall/preinstall 钩子、Git URL依赖或未知二进制下载器；验证脚本主要使用 Python 标准库，但依赖升级后仍应重新审查锁文件。","混淆后门：已检查内容以可读的 Markdown、YAML、Python和 MJS脚本为主，未发现大段 Base64、动态 Function、反向 Shell、挖矿、反调试或隐藏持久化逻辑。","权限边界：插件能创建和更新应用、数据库、对象存储、GitHub工作流、镜像及拉取密钥，权限影响真实云资源；不应在管理员主账户或包含无关生产资源的账户中无审查运行。"],"report_md":"## 安全评分\n\n**57/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本报告依据《MyDSH 安全报告标准》对 `labring/sealos-skills` 进行六维度代码安全审查。该仓库不是单纯的提示词集合，而是一组能够调用本地开发工具、GitHub和 Sealos云端接口的基础设施智能体技能。其目标包括构建并推送容器镜像、创建部署模板、触发 GitHub Actions、开通数据库和对象存储、写入镜像拉取密钥以及执行线上冒烟测试。因此，它天然具有比普通只读技能更大的执行权限和数据接触范围。\n\n审查中未发现木马、凭据窃取、未知遥测、挖矿或后门证据；但由于其会处理真实令牌并修改云资源，不能按普通低权限插件理解。**明确建议：谨慎用。可以在专用或最小权限账户中使用，但不建议未经审查直接连接包含关键生产资源的管理员账户。**\n\n## 评估对象\n\n- 仓库：`labring/sealos-skills`\n- 评估分支：`main`\n- 默认分支：GitHub分支页面将 `main` 标记为 Default；未发现 `master` 是活动默认分支。\n- 最后更新日期：GitHub组织仓库列表显示该仓库于 **2026-07-28** 更新。\n- `updated_at` 字段：`2026-07-28T00:00:00Z`，这是根据公开页面日期进行的日级 ISO 标准化值。审查环境访问指定 GitHub REST API 时未取得可解析响应，因此该时间不代表已经确认到秒的 API `pushed_at`；正式自动发布前应再次读取 `https://api.github.com/repos/labring/sealos-skills` 替换为精确值。\n- 仓库规模：公开页面显示约 146 次提交；当前 README列出 `sealos-app-builder`、`sealos-cloud-native-readiness`、`sealos-database`、`sealos-deploy`、`sealos-dockerfile`、`sealos-docker-to-sealos`、`sealos-object-storage-s3`、`sealos-os-template` 等 8 组技能。根目录包含 `package.json`、`package-lock.json`、`cordis.patch.yml`、`index.json`、`scripts/` 和 `skills/`。未发现根级 `src/`、`lib/` 或独立 install目录；主要可执行实现位于各技能的 `scripts/` 下。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 根目录 `package.json`、`cordis.patch.yml`、`scripts/build.sh`、`scripts/validate-codex-plugin.py`，以及 `skills/sealos-deploy/scripts/` 中的 MJS脚本；重点搜索 `exec`、`spawn`、`eval`、`curl|sh`、安装生命周期脚本和远程代码下载。\n\n**发现：** 该插件存在大量有意的命令执行能力。`sealos-deploy` 的工作流要求运行 `sealos-auth.mjs`、`docker-setup.mjs`、`preflight.mjs`、`build-push.mjs`、`gh-actions-setup.mjs`、`deploy-template.mjs`、`poll-deploy.mjs`、`local-smoke.mjs` 和 `sealos-live-smoke.mjs`。这些脚本分别负责登录、检查 Docker、构建镜像、推送镜像、创建 GitHub Actions配置、部署应用和执行网络测试。插件索引也明确列出了上述脚本。\n\n这类执行与“自动部署项目”的功能一致，不属于隐藏行为。已取得的源码和文档中未发现 JavaScript `eval`、动态 `Function`、反向 Shell、`curl ... | sh` 或通过 `postinstall` 静默下载并执行未知代码的证据。根目录安装方式为显式执行 `npx skills add labring/sealos-skills`，而不是安装完成后自动部署。\n\n**证据：**\n\n- `skills/sealos-deploy/SKILL.md:93-103`：显式执行 `node \"$SCRIPTS/sealos-auth.mjs\" status|login|logout`。\n- `skills/sealos-deploy/SKILL.md:115-120`：执行部署前置检查。\n- `skills/sealos-deploy/scripts/build-push.mjs`：构建和推送容器镜像。\n- `skills/sealos-deploy/scripts/gh-actions-setup.mjs`：配置 GitHub Actions。\n- `skills/sealos-deploy/scripts/deploy-template.mjs`：提交真实部署。\n- `scripts/validate-codex-plugin.py:63-149`：解析 JSON、验证路径和文件大小，没有执行插件内容。\n\n**风险程度：中。** 命令执行是核心功能，但会直接影响本地 Docker环境、GitHub仓库及云端应用。\n\n### 2. 数据外发\n\n**检查内容：** HTTP请求目标、GitHub和 Sealos API地址、镜像推送、项目源码上传、遥测和隐藏回传端点。\n\n**发现：** 插件会与 GitHub API、Sealos API、Sealos Dashboard及容器镜像仓库通信。文档公开了 `SEALOS_API_BASE`、`SEALOS_AUTH_URL`、`SEALOS_DASHBOARD_URL` 等配置，并提供 `bja.sealos.run` Dashboard链接。部署流程可能把容器镜像、部署模板、环境变量名称和应用配置发送给 Sealos；GitHub Actions模式还可能创建仓库、工作流和 Secrets。\n\n未发现将数据发送给广告、分析、个人收集服务器或与 Sealos部署无关的未知域名，也未发现隐藏 telemetry。但是，“官方业务端点”不代表没有数据边界风险：如果用户采用托管构建、GitHub Actions或远程镜像构建，项目代码或构建上下文可能离开本机。\n\n**证据：**\n\n- `skills/sealos-deploy/SKILL.md:172-183`：认证与部署模式选择。\n- `skills/sealos-deploy/SKILL.md:213-224`：生成 Sealos Dashboard及部署结果链接。\n- `skills/sealos-deploy/scripts/sealos-request.mjs`：向 Sealos API发起认证请求。\n- `skills/sealos-deploy/scripts/gh-api-request.mjs`：调用 GitHub API。\n- `skills/sealos-deploy/scripts/build-push.mjs`：向镜像仓库推送构建产物。\n\n**风险程度：中。** 外发目标符合功能，但私有源码、配置和镜像可能进入第三方云平台。\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、`~/.codex`、GitHub Token、Sealos Token、环境变量、Docker凭据、镜像拉取密钥和本地配置文件。\n\n**发现：** `sealos-auth.mjs` 和 `gh-auth.mjs` 必然处理 Sealos及 GitHub认证状态；`gh-refresh-scopes.mjs` 会检查或更新 GitHub令牌权限；`ensure-image-pull-secret.mjs` 会处理容器镜像拉取凭据。技能还支持通过环境变量覆盖 API、认证和 Dashboard地址。这些读取均与部署功能直接相关。\n\n没有发现扫描 `~/.ssh`、读取 SSH私钥、读取 `~/.dsh` 全局凭据、遍历浏览器 Cookie、批量枚举环境变量或把所有 Token上传到第三方的代码证据。验证器对插件文件路径实施了限制：`scripts/validate-codex-plugin.py:86-112` 拒绝绝对路径、`..`、反斜杠和非法字符，降低了插件清单借路径穿越读取仓库外文件的风险。\n\n**证据：**\n\n- `skills/sealos-deploy/scripts/sealos-auth.mjs`\n- `skills/sealos-deploy/scripts/gh-auth.mjs`\n- `skills/sealos-deploy/scripts/gh-refresh-scopes.mjs`\n- `skills/sealos-deploy/scripts/ensure-image-pull-secret.mjs`\n- `scripts/validate-codex-plugin.py:86-112`\n\n**风险程度：中。** 会读取和使用高价值凭据，但未发现无关敏感文件收集行为。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`package-lock.json`、安装脚本、非 npm来源依赖、生命周期钩子和未锁定下载。\n\n**发现：** 仓库同时提交 `package.json` 与 `package-lock.json`，说明 JavaScript依赖具备锁定机制。已检查的 Python验证器仅使用 `argparse`、`json`、`pathlib`、`re` 和 `sys` 等标准库。当前可见安装入口没有 `postinstall`、`preinstall` 或 `prepare` 阶段静默执行部署脚本的证据，也未发现 `git+ssh`、临时网盘、IP地址包源或下载后直接执行的二进制依赖。\n\n外部风险主要来自工具链本身：Docker、GitHub CLI/API、Node.js、GitHub Actions和容器基础镜像均属于供应链组成部分。即使本仓库无恶意代码，未固定的镜像标签、Action版本或后续锁文件更新仍可能改变风险面。\n\n**证据：**\n\n- `package.json`、`package-lock.json`\n- `scripts/validate-codex-plugin.py:1-13`\n- `skills/sealos-deploy/scripts/docker-setup.mjs`\n- `skills/sealos-deploy/scripts/build-push.mjs`\n- `skills/sealos-deploy/scripts/gh-actions-setup.mjs`\n\n**风险程度：低至中。** 未见异常包源，但部署工具链较长，应在版本升级后重新扫描。\n\n### 5. 混淆与后门\n\n**检查内容：** Base64大载荷、十六进制字符串表、动态解密、压缩不可读代码、反向连接、挖矿、持久化、隐藏子进程和源代码与构建产物不一致。\n\n**发现：** 当前仓库以可读的 Markdown、YAML、Python和 `.mjs` 文件为主；脚本名称与用途直接对应，例如 `artifact-validator.mjs`、`deploy-template.mjs`、`poll-deploy.mjs`、`sealos-live-smoke.mjs`。未发现根级 `lib/` 压缩发布包、原生二进制、WASM载荷、大段 Base64、混淆变量表、加密命令或矿池地址。\n\n`validate-codex-plugin.py:119-149` 对插件目录存在性、文件大小和结构进行检查，属于防御性验证逻辑。其对异常路径直接报错退出，没有加载或执行被验证文件。\n\n**证据：**\n\n- `scripts/validate-codex-plugin.py:63-149`\n- `skills/sealos-deploy/scripts/` 文件列表\n- 根目录结构中未出现编译后的不透明 `lib/` 或二进制发布目录\n\n**风险程度：低。** 未发现后门或恶意混淆特征。\n\n### 6. 权限越界\n\n**检查内容：** 系统提权、用户目录写入、GitHub仓库修改、云资源创建、Secrets写入、数据库和对象存储管理、资源删除及未经确认的生产操作。\n\n**发现：** 仓库的权限范围很大，但基本与声明功能一致：可以构建和推送镜像、创建或更新 Sealos应用、配置域名和端口、创建 GitHub工作流、写入仓库 Secrets、创建数据库和对象存储，并生成镜像拉取密钥。当前版本还支持 managed deployment模式，进一步扩大了远程托管操作范围。技能说明将“运行部署脚本”作为显式步骤，并未表现为插件安装后自动修改生产环境。\n\n未发现调用 `sudo`、修改系统安全策略、写入 SSH启动项、关闭防火墙或绕过平台权限检查的证据。不过，如果向技能提供组织级 GitHub Token、Sealos管理员令牌或共享生产集群权限，它理论上能够影响这些凭据可访问的全部资源；这是最主要的现实风险。\n\n**证据：**\n\n- `skills/sealos-deploy/scripts/gh-actions-setup.mjs`\n- `skills/sealos-deploy/scripts/ensure-image-pull-secret.mjs`\n- `skills/sealos-deploy/scripts/deploy-template.mjs`\n- `skills/sealos-database/SKILL.md`\n- `skills/sealos-object-storage-s3/SKILL.md`\n- `skills/sealos-deploy/SKILL.md:198-225`\n\n**风险程度：中。** 没有隐藏提权，但业务权限足以修改真实生产资源。\n\n## 风险点汇总\n\n1. 插件会执行 Docker、GitHub和部署相关命令，不属于低权限只读技能。\n2. GitHub Token、Sealos Token和镜像仓库凭据会被脚本读取并用于网络请求。\n3. 托管构建或 GitHub Actions模式可能使私有源码、构建上下文或镜像离开本机。\n4. 部署、数据库和对象存储操作可能产生费用，错误配置也可能覆盖或暴露真实服务。\n5. 组织级或管理员级令牌会使影响范围显著扩大；应使用专用账户、细粒度 Token和独立项目空间。\n6. 当前未取得 GitHub REST API的秒级 `pushed_at`，因此报告版本时间仍需在正式发布前做一次元数据复核。\n\n## 结论与使用建议\n\n**结论：存在风险，但没有恶意证据。** 风险来自其真实的基础设施自动化能力，而不是隐藏后门。它会执行命令、使用凭据、访问外部 API并修改云资源，因此不适合在不了解权限范围时“一键授权”。\n\n**明确用户建议：谨慎用。** 建议在以下条件下使用：\n\n1. 使用专用 Sealos项目或测试账户，不直接连接核心生产集群。\n2. GitHub使用 fine-grained Token，仅授权目标仓库；不要提供组织管理员 Token。\n3. 部署前检查目标域名、镜像仓库、公开端口、环境变量名称和计费资源规格。\n4. 私有项目优先选择本地 Docker构建；启用 managed或 GitHub Actions构建前确认源码外发边界。\n5. 固定到已审查的 commit SHA，不长期无条件跟随可变的 `main`。\n6. 升级时重新审查 `package.json`、`package-lock.json`、认证脚本、构建推送脚本和部署脚本。\n\n在完成秒级 `pushed_at` 复核前，建议 MyDSH处置为 `review`，不判定为恶意，也不建议直接无提示发布为“放心用”。\n","action":"review","reviewed_at":"2026-08-17T13:42:41.837931+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":57,"score_type":"safety","review_status":"complete"},{"full_name":"Anionex/dsh-vision-toolkit","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14T18:49:31Z","summary":"未见后门，但默认上传图片到作者服务，且会在线安装Python依赖。","details":["评估对象: GitHub仓库API确认默认分支为main；updated_at采用API返回的pushed_at。([]())","维度1-代码执行: 插件会创建隔离Python环境，并调用uv或pip在线安装运行时依赖；之后以宿主用户权限启动Python和Chrome子进程。执行采用argv而非shell，并限制输出、超时和子进程环境，未发现curl|sh或隐藏安装脚本。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/runtime-install.ts))","维度2-数据外发: 默认配置会将glance、ground、detect及OCR使用的图片和提示发送至作者控制的https://vision.anionex.me/v1；自定义baseUrl还允许HTTP，配置不当可能明文传输敏感截图。未发现与功能无关的隐蔽遥测域名。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/defaults.ts))","维度3-敏感读取: 远程操作只通过DSH凭据服务解析指定credential，并仅把该密钥传给视觉子进程；子进程HOME指向独立缓存目录，PYTHONHOME、PYTHONPATH和用户site被禁用。未发现扫描~/.ssh、批量读取环境token或导出其他DSH凭据的代码。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/runtime.ts))","维度4-依赖风险: Python依赖使用精确版本并在安装后核对版本，Pillow 12.3.0已修复此前披露的多项漏洞；但安装命令没有启用--require-hashes，仍依赖PyPI或所配置索引的供应链完整性。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/runtime-install.ts))","维度5-混淆或后门: 未发现eval、远程脚本下载、加密载荷或刻意混淆。内联runpy代码是可读的提示注入防护和Chrome网络隔离包装；内置上游快照按清单逐文件校验SHA-256并拒绝符号链接。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/upstream.ts))","维度6-权限越界: 插件具备子进程、凭据、设置、会话和智能体集成能力，但未发现sudo、系统提权或SSH目录访问。输入默认受工作区及allowedDirs约束，HTML截图强制本地文件并阻断浏览器网络；设置和更新操作要求同源请求。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/index.ts))","用户建议: 普通非敏感图片可以在隔离环境中使用；账号、合同、客户聊天、身份证件或内部系统截图不要交给默认免费端点，应先改为自有HTTPS视觉服务，并镜像或哈希锁定Python依赖后再投入使用。"],"action":"review","reviewed_at":"2026-08-17T12:21:14.765905+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":56,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**56/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见后门，但默认上传图片到作者服务，且会在线安装Python依赖。\n\n## 评估对象\n\n- 仓库：`Anionex/dsh-vision-toolkit`\n- 分支：`main`\n- 版本更新时间：2026-08-14T18:49:31Z\n\n## 检查结果\n\n- 评估对象: GitHub仓库API确认默认分支为main；updated_at采用API返回的pushed_at。([]())\n- 维度1-代码执行: 插件会创建隔离Python环境，并调用uv或pip在线安装运行时依赖；之后以宿主用户权限启动Python和Chrome子进程。执行采用argv而非shell，并限制输出、超时和子进程环境，未发现curl|sh或隐藏安装脚本。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/runtime-install.ts))\n- 维度2-数据外发: 默认配置会将glance、ground、detect及OCR使用的图片和提示发送至作者控制的https://vision.anionex.me/v1；自定义baseUrl还允许HTTP，配置不当可能明文传输敏感截图。未发现与功能无关的隐蔽遥测域名。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/defaults.ts))\n- 维度3-敏感读取: 远程操作只通过DSH凭据服务解析指定credential，并仅把该密钥传给视觉子进程；子进程HOME指向独立缓存目录，PYTHONHOME、PYTHONPATH和用户site被禁用。未发现扫描~/.ssh、批量读取环境token或导出其他DSH凭据的代码。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/runtime.ts))\n- 维度4-依赖风险: Python依赖使用精确版本并在安装后核对版本，Pillow 12.3.0已修复此前披露的多项漏洞；但安装命令没有启用--require-hashes，仍依赖PyPI或所配置索引的供应链完整性。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/runtime-install.ts))\n- 维度5-混淆或后门: 未发现eval、远程脚本下载、加密载荷或刻意混淆。内联runpy代码是可读的提示注入防护和Chrome网络隔离包装；内置上游快照按清单逐文件校验SHA-256并拒绝符号链接。([github.com](https://github.com/Anionex/dsh-vision-toolkit/blob/main/src/upstream.ts))\n- 维度6-权限越界: 插件具备子进程、凭据、设置、会话和智能体集成能力，但未发现sudo、系统提权或SSH目录访问。输入默认受工作区及allowedDirs约束，HTML截图强制本地文件并阻断浏览器网络；设置和更新操作要求同源请求。([raw.githubusercontent.com](https://raw.githubusercontent.com/Anionex/dsh-vision-toolkit/main/src/index.ts))\n- 用户建议: 普通非敏感图片可以在隔离环境中使用；账号、合同、客户聊天、身份证件或内部系统截图不要交给默认免费端点，应先改为自有HTTPS视觉服务，并镜像或哈希锁定Python依赖后再投入使用。\n\n## 结论与使用建议\n\n**谨慎用**。未见后门，但默认上传图片到作者服务，且会在线安装Python依赖。\n"},{"full_name":"dsh-market/dsh-market","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T12:09:23Z","summary":"未见恶意后门，但高权限安装、凭据备份和远程访问边界仍需加固","details":["代码执行：检查 package.json、cordis.patch.yml、scripts/、src/dsh-cli.ts、src/install.ts。未发现 eval、new Function、curl|sh 或 postinstall；但存在 prepare 自动构建脚本，并通过 child_process 启动 dsh、pnpm、corepack 和 npm。命令主要使用 shell:false、参数白名单和 Windows 转义，插件构建脚本默认受 pnpm allowBuilds 限制，风险程度为中。([github.com](https://github.com/dsh-market/dsh-market/blob/main/package.json))","数据外发：代码会访问 awesome-dsh-plugin.com 获取目录，并根据用户操作访问 GitHub、npm、GitHub Gist 或用户填写的 WebDAV。未发现隐藏统计或广告遥测，但完整云备份会把 config.toml、.env 等原样上传；WebDAV 已实施 HTTPS、公网地址和 SSRF 校验。风险程度为中。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/registry.ts))","敏感读取：备份模块递归读取 DSH profile 配置，明确识别 config.toml、.env、secrets.json 等凭据文件；启动安装命令时还继承 process.env。未发现主动读取 ~/.ssh，但被用户批准执行构建脚本的第三方插件仍可利用 Node 权限读取环境变量和用户文件。风险程度为中。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/backup.ts))","依赖风险：生产依赖仅 js-yaml，当前锁文件解析到 4.1.1，避开了影响低于 4.1.1 版本的原型污染问题；但 package.json 仍声明 ^4.1.0，建议把最低版本提升到 ^4.1.1 并持续执行依赖审计。开发依赖较多，主要在 prepare/prepack 构建阶段生效。风险程度为低。([github.com](https://github.com/dsh-market/dsh-market/blob/main/package.json))","混淆与后门：当前源码为可读 TypeScript/JavaScript，重点文件中未发现大段 Base64、自解密载荷、动态 eval、隐藏二进制或远程下载后直接执行。需要注意 main 指向构建生成的 lib/index.js，而 main 分支未直接展示 lib 产物，因此仍应对实际 npm tarball做源码一致性和 provenance 校验。风险程度为低。([github.com](https://github.com/dsh-market/dsh-market/tree/main))","权限越界：插件可安装、更新、卸载插件，改写 profile 配置与 cordis.patch.yml，并可准备全局 pnpm、恢复备份和重启 DSH，属于高权限管理插件。重启和本地备份下载有严格 loopback/转发头限制；但恢复、WebDAV、Gist、更新等接口主要只检查 Origin 与 Host，缺少独立认证。若 DSH Web 暴露到局域网或公网，直接 HTTP 客户端可伪造这些头部，部分 GET 诊断和日志接口也未限制为 loopback。风险程度为中偏高。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/http.ts))"],"report_md":"## 安全评分\n\n**56/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查针对 `dsh-market/dsh-market` 的 `main` 分支，按代码执行、数据外发、敏感读取、依赖风险、混淆或后门、权限越界六个维度检查。结论是：**没有发现恶意后门或隐蔽控制逻辑，但这是一个能够管理插件、修改 DSH profile、执行包管理器并备份凭据的高权限组件，当前 HTTP 权限边界尚不足以支持无保护的远程暴露。** 安全评分为 **56/100**，需要注意，建议用户谨慎使用，不应直接把相关 Web 服务暴露到局域网或公网。\n\n## 评估对象\n\n- 仓库：`dsh-market/dsh-market`\n- 评估分支：`main`\n- 分支最近更新时间：`2026-08-17T12:09:23Z`\n- 当前版本：`1.11.1`\n- 仓库规模：GitHub 页面显示约 178 次提交；服务端源码包含 24 个主要 TypeScript 模块，另有客户端、测试、数据快照和 5 个构建/校验脚本。`package-lock.json` 约 4701 行，核心文件 `dsh-cli.ts`、`routes.ts`、`backup.ts` 均为数百行规模。([github.com](https://github.com/dsh-market/dsh-market/tree/main))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`cordis.patch.yml`、`scripts/`、`src/dsh-cli.ts`、`src/install.ts`、`src/restart.ts`。\n\n**发现：** 未发现 `eval`、`new Function`、`curl | sh`、`postinstall` 或下载未知脚本后直接执行的逻辑。`cordis.patch.yml:1-4` 只负责把 `dshmarket` 插入 DSH bundle。需要关注的是 `package.json:23-34` 中存在 `prepare: npm run build`，从 Git 仓库安装或在源码目录执行安装时会运行 TypeScript、tsdown 和构建配置。运行期还会通过 `child_process.spawn` 启动 `dsh plugin`、`pnpm`、`corepack`、`npm install -g pnpm` 及重启辅助进程。\n\n**证据：** `src/dsh-cli.ts:53-75` 默认采用 `shell:false`；Windows `.cmd` 路径通过显式 `cmd.exe` 调用并逐参数转义；`src/dsh-cli.ts:306-324` 对插件目标实施字符白名单；`src/install.ts:41-171` 对安装失败、集合仓库、缺失入口和重复 loader ID 执行回滚。pnpm 构建脚本默认受 `allowBuilds` 约束，只有用户明确批准后才放行。([github.com](https://github.com/dsh-market/dsh-market/blob/main/package.json))\n\n**风险程度：中。** 执行能力是市场插件的正常功能，当前参数处理较谨慎；但一旦用户批准第三方构建脚本，代码会获得当前 DSH 用户的完整 Node 权限。\n\n### 2. 数据外发\n\n**检查内容：** `src/registry.ts`、`src/sources.ts`、`src/backup.ts`、`src/gist.ts`、`src/routes.ts`。\n\n**发现：** 固定访问的主要第三方包括 `awesome-dsh-plugin.com`、GitHub、GitHub Gist 和 npm registry；另支持用户配置任意公网 HTTPS WebDAV。未发现隐藏遥测、设备指纹、广告统计或自动上传日志。目录接口每小时获取一次远程 JSON，并在失败时回退到随包快照。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/registry.ts))\n\n备份属于显式用户功能，但完整备份会原样包含 profile 内的 `config.toml`、`.env`、token 配置和其他文本文件，并可上传到 Gist 或 WebDAV。`src/backup.ts:199-250` 对 WebDAV 实施 HTTPS 限制、DNS 解析、公网 IP 检查、禁止 URL 内嵌账号密码和禁止重定向，可有效降低 SSRF 风险。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/backup.ts))\n\n**风险程度：中。** 未发现秘密外传，但用户误用完整云备份可能把长期凭据交给第三方存储。\n\n### 3. 敏感读取\n\n**检查内容：** profile 文件遍历、环境变量继承、Gist/WebDAV 凭据处理，以及是否读取 `~/.ssh`、系统密钥或其他无关目录。\n\n**发现：** `src/backup.ts:20-115` 会递归读取 profile 中除 `node_modules`、`.git`、锁文件和市场缓存外的配置，并明确把 `config.toml`、`.env`、`secrets.json` 等标记为敏感文件。备份不会对内容脱敏，以保证可恢复性；界面通过敏感文件计数提示用户。未在重点源码中发现读取 `~/.ssh`、浏览器凭据库或系统钥匙串的代码。\n\n`src/dsh-cli.ts` 构造子进程环境时复制 `process.env`。因此，市场自身不会主动上报环境 token，但用户允许执行的第三方插件构建脚本以及已安装插件可以继承这些变量。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/backup.ts))\n\n**风险程度：中。** 敏感读取与备份、插件安装功能相关，但必须把第三方插件视为与 DSH 进程同权限的代码。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`package-lock.json`、运行依赖、开发依赖及生命周期脚本。\n\n**发现：** 运行时依赖只有 `js-yaml`，peer dependency 为 `@deepseek-ai/cordis`。当前锁文件解析到 `js-yaml 4.1.1`，已避开 GitHub 安全公告中影响 `<4.1.1` 的原型污染问题；但声明范围仍为 `^4.1.0`，最低允许版本不够严谨，建议直接提升到 `^4.1.1` 或更高版本。([github.com](https://github.com/dsh-market/dsh-market/blob/main/package.json))\n\n开发依赖包含 TypeScript、tsdown、Vitest、Playwright、React 和若干 DSH 包，主要在 `prepare`、`prepack` 与测试阶段执行。通过 Git 安装时，构建依赖显著扩大供应链面。\n\n**风险程度：低。** 当前未确认存在可直接利用的锁定依赖漏洞，但应固定安全下界并启用持续依赖审计。\n\n### 5. 混淆与后门\n\n**检查内容：** `src/`、`scripts/`、客户端结构、补丁文件，以及 Base64、自解密代码、动态执行、异常二进制和隐藏下载逻辑。\n\n**发现：** 源码结构清晰，函数和安全边界有较完整注释；未发现大段不可读载荷、加密字符串、`eval`、原生二进制或隐蔽持久化。脚本目录主要用于构建归一化、发布前检查、重启 smoke test 和目录校验。([github.com](https://github.com/dsh-market/dsh-market/tree/main/src))\n\n需要保留一个发布供应链限制：`package.json` 的运行入口是构建生成的 `lib/index.js`，而当前 main 分支目录没有直接展示 `lib/`。因此，本次 GitHub 源码审查不能单独证明 npm 上的实际 tarball 与 main 源码完全一致，应增加可复现构建、npm provenance 和发布产物哈希校验。\n\n**风险程度：低。** 没有后门特征，但发布产物仍需独立验证。\n\n### 6. 权限越界\n\n**检查内容：** 安装、更新、卸载、恢复、Gist、WebDAV、日志、诊断、开关插件和重启接口的访问控制。\n\n**发现：** 本插件可以改写 profile 的 `package.json`、配置文件和 `cordis.patch.yml`，安装或删除第三方包，并可准备全局 pnpm 和重启 DSH。重启接口与本地备份下载使用 `socket.remoteAddress` 检查真实 loopback 地址，并拒绝 `Forwarded`、`X-Forwarded-For`、`X-Real-IP`，这一实现能够防止代理伪装。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/restart.ts))\n\n主要问题是其他高影响 POST 接口，例如恢复、WebDAV、Gist、更新和插件状态修改，多数只使用 `sameOrigin`。`src/http.ts:14-23` 只比较 `Origin` 的 host 与请求 `Host`，没有会话认证、随机 CSRF token，也没有统一限制为 loopback；而直接 HTTP 客户端可以自行设置这两个头。若 DSH Web 监听非本地地址且没有外层认证，攻击者可能触发配置恢复、云备份、更新或插件操作。部分 GET 接口如日志、已安装列表、诊断和更新状态也未采用 loopback 防护，可能泄露运行环境、插件清单和已脱敏日志。([github.com](https://github.com/dsh-market/dsh-market/blob/main/src/http.ts))\n\n**风险程度：中偏高。** 在仅监听本机的默认使用方式下风险可控；一旦经局域网、反向代理或公网开放，当前插件自身的认证边界不够充分。\n\n## 风险点汇总\n\n1. `prepare` 和包管理器调用形成真实代码执行面，但未发现恶意命令，且有参数校验与构建脚本审批。\n2. 完整备份会包含 `.env`、`config.toml` 等凭据，并可上传到 Gist 或 WebDAV。\n3. 多数高权限接口只有同源校验，没有独立身份认证或统一 loopback 限制。\n4. 日志、诊断、插件清单等 GET 接口在远程暴露场景下存在信息泄露面。\n5. `js-yaml` 当前锁定版本已修复已知问题，但 manifest 的最低版本仍应从 4.1.0 提升。\n6. GitHub 源码与最终 npm 构建产物尚缺少可验证的发布一致性证明。\n\n## 结论与使用建议\n\n**用户可以在本机、仅 loopback 监听且不对外暴露 DSH Web 的环境中使用，但不能把它当成适合直接公网部署的安全边界。明确建议为“谨慎用”，而不是“放心用”。**\n\n使用前应做到：保持插件构建脚本默认关闭；只安装认识并审查过的目录条目；不要把完整配置备份上传到不可信 Gist 或 WebDAV；清理 DSH 进程环境中的长期 token；若必须远程访问，必须在前置代理增加强认证和访问控制。项目发布前建议把所有写操作、Gist/WebDAV 和诊断日志接口统一限制为 loopback 或可信认证会话，引入随机 CSRF token，按协议与主机完整比较 Origin，将 `js-yaml` 最低版本提升至 4.1.1，并为 npm 发布启用 provenance、签名和 tarball 差异校验。\n","action":"review","reviewed_at":"2026-08-17T13:17:11.262775+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":56,"score_type":"safety","review_status":"complete"},{"full_name":"Tabbit-Browser/dsh-plugin","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-21T03:34:37Z","summary":"具备全权限任意代码执行能力，未见后门，但不能无条件放心使用","details":["代码执行：`index.js:70-101` 将模型提交的 JavaScript 拼入 `tabbit-cli nodejs` 命令，并通过 `ctx.app.shell` 执行；虽然参数经过引号转义，但本质上仍是有意开放的任意代码执行能力。`installer.js` 还使用 `spawnSync` 调用注册表、进程查询和 CLI 探测命令，但参数基本为固定值，未发现 `eval`、`curl|sh` 或 npm `postinstall`。","数据外发：安装器仅硬编码访问 `tabbit.com`、`tabbit.ai` 及其子域，并验证下载重定向后的主机名；未发现遥测、广告或秘密上传接口。但插件能够控制持久化浏览器、复用登录状态并操作任意网页，因此网页数据是否外发最终取决于智能体生成的操作代码。","敏感读取：仓库代码未直接读取 `~/.ssh`、`~/.dsh`、私钥或环境 token。安装检测会读取 HOME、AppData、Program Files、PATH、Windows 注册表和进程列表。更重要的是，文档要求部分 Windows 场景切换到 Full Permission；在该权限下，模型生成的 Node.js 代码可能接触宿主机文件和环境变量。","依赖风险：`package.json:12-15` 没有普通 dependencies，但声明了无上限的 `@dsh-ai/plugin-sdk >=1.9.0` 和 `@sinclair/typebox >=0.34.0` peerDependencies；仓库也未提供锁文件。Tabbit 应用和 `tabbit-cli` 属外部运行时，安装包下载仅检查域名、扩展名和大小，没有 SHA-256、签名清单或发布者证书校验。","混淆与后门：核心实现是可读的 JavaScript 和 Markdown，未发现压缩混淆、Base64 载荷、动态解密、`new Function`、隐藏二进制或异常的自删除逻辑。下载任务也使用临时文件、独占创建和失败清理，暂未发现后门证据。","权限越界：`cordis.patch.yml:3-5` 明确声明 shell 与 tools 能力；`index.js` 同时注册代码执行、安装检测和安装包下载工具。插件不是低权限浏览器适配器，而是能够把 AI 生成代码送入宿主 shell 和持久浏览器运行时的高能力插件，因此不适合在主浏览器资料、支付后台或保存生产凭据的全权限会话中直接运行。"],"report_md":"## 安全评分\n\n**56/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：Tabbit-Browser/dsh-plugin\n\n## 概述\n\n本次按 MyDSH 六维安全标准，对 `Tabbit-Browser/dsh-plugin` 的安装、工具注册、浏览器运行方式和权限边界进行了静态审查。安全评分为 **56/100**，需要注意，位于 21–50 分区间。明确结论是：**未发现恶意后门，但该插件不能作为普通低权限插件放心使用，只能在隔离环境、低敏账号和明确授权下谨慎使用。**\n\n主要原因不是发现了偷取凭据的恶意代码，而是插件主动提供了一条“AI 生成 JavaScript → `tabbit-cli nodejs` → 宿主 shell/持久浏览器”的执行链，并在部分平台要求 Full Permission。该能力符合浏览器智能体定位，但一旦模型判断错误、网页发生提示词注入，或用户让它操作高敏感登录状态，影响范围可能超出普通浏览器自动化。\n\n## 评估对象\n\n- **仓库**：`Tabbit-Browser/dsh-plugin`\n- **评估分支**：`main`。仓库界面的分支选择器显示 `main`，根目录当前展示 10 项，包含 `index.js`、`installer.js`、`package.json`、`cordis.patch.yml`、`skills/` 和 `__tests__/`；未发现 `src/`、`lib/`、`scripts/` 目录。仓库页面显示 13 次提交。\n- **master 检查**：已尝试访问 `master` 下的原始 `package.json`，未取得文件内容；本次以可访问的 `main` 为评估对象。\n- **更新时间确认状态**：已按要求访问 GitHub REST 仓库 API，但当前 Web 获取层对该端点返回 cache miss，无法诚实取得 `pushed_at`。因此 JSON 中 `updated_at` 使用 `null`，而不是编造时间。该元数据缺口应在报告正式发布前补齐，并同时锁定 commit SHA。\n- **仓库规模**：核心执行代码为 `index.js` 与 `installer.js`，另有 3 个测试文件和一组浏览器技能说明、平台调用及运行恢复文档；属于代码量较小但权限能力较高的插件。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` 的安装脚本，`index.js` 的工具注册和 shell 调用，`installer.js` 的系统命令，技能文档中的 CLI 调用方式，以及是否存在 `exec`、`eval`、`curl|sh`、`postinstall`。\n\n**发现**：`package.json:1-17` 未定义 `scripts`、`preinstall`、`install` 或 `postinstall`，因此安装 npm 包时没有自动执行脚本。仓库也未发现 `eval`、`new Function` 或 `curl | sh`。\n\n但是，`index.js:70-73` 的 `callTabbitCli()` 会调用 `ctx.app.shell(command)`；`index.js:75-101` 的 `taskRunner()` 接收 `args.code`，构造 `tabbit-cli nodejs <代码>`，然后交给 shell 执行。这不是隐藏后门，而是插件的核心设计：允许智能体生成并执行任意 Tabbit Node.js/Playwright 代码。代码只做了 shell 引号转义，没有语义级指令白名单，也没有阻止 `fs`、`process.env`、`child_process` 或额外网络访问的仓库级策略。\n\n`installer.js` 使用 `spawnSync` 调用 `reg.exe`、`tasklist`、`pgrep`、`cmd.exe` 和 `tabbit-cli tasks` 等命令。现有调用的可执行文件和主要参数由代码固定，未发现把下载响应或用户输入直接拼入这些系统命令的情况，因此传统命令注入风险低于 `taskRunner` 的主动代码执行风险。\n\n**风险程度**：较明显。用户必须把它理解为代码执行型智能体插件，而不是普通浏览器扩展。\n\n### 2. 数据外发\n\n**检查内容**：全部网络端点、重定向处理、遥测接口、下载接口，以及浏览器会话中的网页数据流向。\n\n**发现**：安装器的固定网络目标为 `page.tabbit.com`、`asia.tabbit.ai` 及其允许的子域。`getCurrentRegionInfo()` 请求地区接口，`downloadInstaller()` 根据返回地址下载安装包。下载前后都会调用主机名校验，拒绝跳转到允许域之外；同时设置 1 GiB 上限、检查 Content-Length、使用 `.part` 临时文件并在失败时清理。未发现向广告、分析、云盘或匿名收集平台发送数据的代码。\n\n需要注意的是，技能文档要求使用已安装的 Tabbit、复用运行上下文，并通过 Playwright 操作用户网页。该模式能够读取页面文本、表单和已登录状态，并可向用户指定的网站提交数据。因此仓库没有固定秘密外传接口，并不等于运行时不存在数据外发风险；模型生成代码、目标网页和网页提示词都属于安全边界的一部分。\n\n**风险程度**：条件性风险。固定后端范围较克制，但浏览器智能体天然具有处理和提交网页数据的能力。\n\n### 3. 敏感信息读取\n\n**检查内容**：`~/.ssh`、`~/.dsh`、密钥文件、环境 token、浏览器凭据、系统配置和进程信息。\n\n**发现**：静态代码没有直接读取 SSH 私钥、DSH 凭据、云服务 token、Cookie 数据库或密码文件。安装检测会读取 HOME、LOCALAPPDATA、APPDATA、ProgramFiles、PATH，查询 Windows 注册表和系统进程，用于寻找 Tabbit 安装位置、CLI 和运行状态。这些读取与安装检测功能一致。\n\n真正需要关注的是权限环境。README 明确说明 Windows 命名管道访问可能要求 DSH Full Permission；在 Full Permission 下执行模型生成的 Node.js 代码，如果 Tabbit 运行时未做额外沙箱隔离，理论上可能读取当前用户可访问的文件和环境变量。仓库内没有展示能够证明 Node.js 运行域已禁止这些能力的强制策略。\n\n**风险程度**：仓库静态行为较低，运行权限暴露中等偏高。\n\n### 4. 依赖和供应链风险\n\n**检查内容**：直接依赖、peerDependencies、锁文件、外部 CLI、安装包下载及完整性验证。\n\n**发现**：`package.json:12-15` 仅声明 `@dsh-ai/plugin-sdk >=1.9.0` 和 `@sinclair/typebox >=0.34.0`，没有普通 dependencies，依赖面较小。但版本范围只有下限、没有上限，也没有 lockfile，无法确保未来宿主环境加载的版本与本次审查版本完全一致。\n\nTabbit 应用和 `tabbit-cli` 是仓库之外的重要执行组件。安装器会从允许域下载 DMG、EXE 或 DEB 文件，但 `verifyInstaller()` 主要检查文件可访问性和扩展名；未发现 SHA-256 清单、数字签名、证书发布者或透明日志校验。域名白名单能够防止普通开放重定向，却无法解决下载服务器、DNS、发布后台或账号被攻破后的供应链替换问题。安装器目前不会自动执行下载文件，这降低了直接危害，但用户后续手动安装仍会承担风险。\n\n**风险程度**：中等，建议补充不可绕过的安装包完整性验证。\n\n### 5. 混淆、隐藏逻辑和后门\n\n**检查内容**：压缩混淆代码、Base64 大载荷、动态解密、隐藏二进制、异常下载执行、自删除、反分析和秘密远控。\n\n**发现**：核心代码为结构清晰、可读性正常的 JavaScript；技能文件为 Markdown。未发现大段编码载荷、动态解密器、混淆变量墙、反调试逻辑、隐藏二进制或下载后自动执行行为。错误路径还包含临时下载文件清理和下载任务状态管理，不符合常见投放器或后门的实现特征。\n\n**风险程度**：低。当前没有足够证据将仓库认定为恶意。\n\n### 6. 权限越界\n\n**检查内容**：插件声明能力、shell 权限、工具输入范围、浏览器配置复用以及权限升级引导。\n\n**发现**：`cordis.patch.yml:3-5` 声明 `shell` 和 `tools` 能力。`index.js:190-197` 注册代码执行、安装检测和安装包下载工具。技能设计还强调使用持久 Node.js 运行域和现有浏览器上下文，而非每次创建隔离浏览器。\n\n这种设计可以实现真正的浏览器智能体，但权限明显超过单一网页自动化：它可能继承登录状态、扩展、代理、下载目录和页面权限，并通过宿主 shell 启动 CLI。README 对 Full Permission 的建议进一步扩大了失败影响面。当前仓库缺少按网站、账号、文件系统和操作类型划分的强制授权边界，也没有对提交表单、上传文件、发送消息、下载可执行文件等高影响动作设置统一的二次确认策略。\n\n**风险程度**：中等偏高，是本次不予“放心用”结论的主要原因。\n\n## 风险点汇总\n\n1. AI 提供的 JavaScript 会经宿主 shell 发送给 `tabbit-cli nodejs` 执行，属于主动开放的任意代码执行面。\n2. 部分 Windows 场景要求 Full Permission，运行时若缺少沙箱，文件和环境变量可能进入影响范围。\n3. 会复用持久浏览器及登录状态，不适合直接连接主浏览器资料和高敏感账号。\n4. 安装包没有哈希、签名清单或发布者校验，只验证域名、大小和扩展名。\n5. peerDependencies 没有上限且缺少锁定的审计版本。\n6. GitHub API 的 `pushed_at` 本次未能取得，正式发布前必须补齐时间及 commit SHA，避免把浮动的 `main` 当成不可变评估对象。\n\n未发现的恶意迹象包括：凭据文件定向读取、秘密遥测接口、混淆载荷、下载后静默执行、`curl|sh`、npm 生命周期脚本和隐藏后门。\n\n## 结论与使用建议\n\n**最终结论：存在风险，用户不能无条件放心使用。建议为“谨慎用”，而不是“放心用”或直接认定“恶意”。**\n\n可以使用的前提是：采用独立 Tabbit 浏览器资料和低敏感测试账号；不要同时登录支付、云控制台、企业管理后台或重要社交账号；不要在保存 SSH 私钥、生产 token 和客户资料的 Full Permission 会话中运行；执行前检查智能体将要运行的代码和目标网站；安装 Tabbit 时优先从人工确认的官方渠道下载并验证系统签名。\n\n在进入 MyDSH 正式发布名单前，建议维护者完成以下整改：以结构化进程 API 替代字符串 shell；为 `taskRunner` 建立受限 Node.js 沙箱并禁止默认访问文件系统、环境变量和子进程；对登录态复用、文件上传、消息发送及提交表单设置用户确认；发布带 SHA-256 和数字签名的安装清单；锁定已测试的 SDK 版本范围；最终报告绑定具体 commit SHA，并从 GitHub API 补录该分支的准确 `pushed_at`。\n","action":"review","reviewed_at":"2026-08-17T13:40:17.903632+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":56,"score_type":"safety","review_status":"complete"},{"full_name":"Nwflower/dsh-chat-import","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16","summary":"未见恶意外联或安装脚本，但插件可广泛读取、写入本地 AI 数据，建议谨慎用","details":["代码执行：`package.json` 未配置 `install`、`preinstall`、`postinstall`，已读取的入口代码中也未发现 `eval`、`new Function`、`curl | sh` 或远程脚本下载执行；构建脚本主要用于测试、打包和发布。仓库的扫描能力会读取 Git 仓库状态，但 `lib/discovery-host.mjs` 本轮未能完整取回，无法排除其内部使用本地子进程，风险较低但仍需补充人工复核。","数据外发：已检查入口、导入注册表和上下文桥接代码，未发现硬编码第三方上传域名或主动遥测。需要注意，启用上下文桥接后，本地 Claude 记忆、项目说明和技能内容会进入模型系统提示词；随后由宿主 DSH 调用模型时，这些内容可能被发送给用户配置的模型服务商，这是间接但真实的数据外发路径。","敏感读取：插件会扫描 `~/.claude`、`~/.codex`、`~/.cursor`、`~/.gemini`、`~/.local/share/opencode`、`~/.dsh` 等目录，并可读取会话、记忆、技能和配置引用。未发现读取 `~/.ssh` 的明确证据，但其读取范围覆盖大量可能含提示词、源码片段、账号信息或 Token 的 AI 工具历史数据。","依赖风险：当前 `package.json` 没有普通运行时 `dependencies`，主要使用 DSH、Cordis、Locale 和 React 的 peer dependencies，供应链面相对较小；同时版本范围包含预发布组件和宽范围 React 版本。仓库存在约 220 KB 的 `package-lock.json`，但本轮未能完整读取锁文件并执行 CVE 核验，因此不能宣称依赖无漏洞。","混淆与后门：已读取代码均为可读的 ESM 模块，目录和职责划分清晰；未发现 Base64 载荷、自解密代码、动态下载器、隐藏定时任务、反调试逻辑或故意混淆。`cordis.patch.yml` 仅向应用插件列表加入 `dsh-chat-import`，未发现额外启动项。","权限越界：这是主要风险。`lib/imports.mjs` 明确绕过宿主文件系统沙箱，直接使用 Node.js `fs` 读写 `~/.dsh`；插件还可按用户路径递归读取外部目录、导出会话、写入 `~/.agents`，并在启用双向同步后修改外部 AI 客户端历史。虽然上下文桥接和同步默认关闭、智能体安装默认 dry-run，但一旦启用，权限范围明显超过普通聊天导入插件。","评估对象：仓库页面显示默认分支为 `main`，根目录约有 6 个目录、19 个文件、205 次提交，`lib/` 下有 2 个子目录和约 27 个模块。最新可见提交日期为 2026-08-16，但 GitHub REST API 端点在本轮访问环境中未成功返回，因此 `updated_at` 仅确认到日期，不能作为秒级 `pushed_at` 使用。"],"report_md":"## 安全评分\n\n**56/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 社区安全分析报告：Nwflower/dsh-chat-import\n\n## 概述\n\n本报告按照 MyDSH 六维安全标准，对 `Nwflower/dsh-chat-import` 的安装行为、代码执行、网络外发、敏感数据读取、依赖供应链、混淆后门和权限边界进行了静态审查。\n\n综合结论为：**未发现将该仓库判定为恶意软件的证据，但不建议用户在不了解权限范围的情况下直接放心使用。** 插件的核心业务确实是迁移多个 AI 客户端的聊天记录，因此读取本地会话属于功能所需；然而，它同时具备绕过宿主文件系统沙箱、访问多个用户目录、写入 `~/.dsh` 和 `~/.agents`、可选读取 Claude 记忆与技能、可选修改外部客户端历史等能力。对于包含商业源码、客户数据、账号配置或 Token 的开发环境，这些权限具有实质安全影响。\n\n安全评分为 **56/100**，需要注意。该分数表示代码当前更像功能权限过宽、需要约束和复核的工具，而不是已发现后门或恶意窃取行为。用户建议为：**谨慎用，不要直接授予整个主目录的访问权限。**\n\n## 评估对象\n\n- 仓库：`Nwflower/dsh-chat-import`\n- 评估分支：`main`\n- 审计日期：2026-08-17\n- 最新可见提交日期：2026-08-16\n- 最新可见提交：`5cf586fb99784994f6a0b7d3f6814530da86b940`\n- 当前仓库页面显示版本：`0.5.1`\n- 仓库规模：约 205 次提交；根目录 6 个目录、19 个文件；`lib/` 下约 27 个模块及 2 个子目录\n- 重点检查：`package.json`、`cordis.patch.yml`、`index.mjs`、`lib/imports.mjs`、`lib/context-bridge.mjs`、`lib/` 清单、README 中的路径及权限说明\n- `src/`：当前根目录未发现该目录\n- 顶层 `scripts/`：当前根目录未发现；`package.json` 的构建命令引用 `.github/scripts/`\n\n仓库页面能够确认默认分支为 `main`。GitHub REST API `https://api.github.com/repos/Nwflower/dsh-chat-import` 在本轮访问环境中未成功返回，因此无法取得秒级 `pushed_at`；本报告只记录 GitHub 提交历史中可见的 2026-08-16，不伪造具体时间。该限制意味着报告可用于风险决策，但在进入社区正式白名单前应重新调用 API 校验目标提交。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`index.mjs` 模块加载、Cordis 插件补丁，以及是否存在 `exec`、`eval`、`new Function`、远程下载执行、`curl | sh`、安装期执行等模式。\n\n**发现：** `package.json` 仅定义测试、覆盖率、Lint、构建、`prepack` 和 `prepublishOnly`，未发现 `install`、`preinstall` 或 `postinstall`。普通用户从 npm 安装时不会因为该文件直接触发远程脚本。已读取的入口模块通过静态 `import` 加载本地模块，没有发现动态代码求值或远程 JavaScript 加载。`cordis.patch.yml` 只把插件名称插入应用配置。\n\n仓库包含 Git 仓库扫描和工作区状态识别能力，README 与提交记录表明会解析分支、工作区 dirty 状态等信息，因此实现中可能调用 Git 子进程；但相关 `lib/discovery-host.mjs` 本轮未能完整取回，无法确认是否采用安全的 `execFile` 参数数组，或是否存在字符串拼接命令。该项属于必须补查的代码执行面，而不是已确认漏洞。\n\n**证据：** `package.json:22-35`、`index.mjs:6-65`、`cordis.patch.yml:27-29`。\n\n**风险程度：较低，但 Git 子进程实现需要补充复核。**\n\n### 2. 数据外发\n\n**检查内容：** 固定第三方域名、HTTP 客户端、遥测、Webhook、远程日志、上传接口和模型调用前的上下文注入。\n\n**发现：** 在已读取的入口、导入注册表和上下文桥接代码中，没有发现硬编码第三方数据收集地址、分析 SDK 或主动遥测。`package.json` 出现的 GitHub 地址属于项目元数据，不是运行期上传目标。\n\n需要重点区分直接外发与间接外发：`lib/context-bridge.mjs` 能读取 `~/.claude/memory`、项目 `CLAUDE.md` 和 Claude Skills，并将内容加入模型系统提示词。代码本身未直接指定第三方域名，但宿主 DSH 随后的模型请求通常会把系统提示词发送至用户配置的模型提供商。因此，启用 `DSH_IMPORT_CONTEXT_BRIDGE` 后，本地记忆和技能内容存在被发送到外部模型服务的实际可能。这是根据上下文注入流程得出的安全推论。\n\n**证据：** `lib/context-bridge.mjs:110-183`、`lib/context-bridge.mjs:184-247`、`index.mjs:49-65`。\n\n**风险程度：默认配置下较低；启用上下文桥接后为中等。**\n\n### 3. 敏感信息读取\n\n**检查内容：** 是否读取 `~/.ssh`、`~/.dsh`、环境变量、Token、AI 客户端配置、会话数据库、记忆文件和项目级说明。\n\n**发现：** 插件的扫描范围覆盖 Claude、Codex、Cursor、Gemini、OpenCode、Z Code、Grok、OpenClaw、Pi Agent、Hermes、Kimi、Qoder 和 DSH 等多个目录，包括 `~/.claude`、`~/.codex`、`~/.cursor`、`~/.gemini`、`~/.local/share/opencode` 与 `~/.dsh`。这些目录中的聊天记录可能包含用户粘贴过的 API Key、客户资料、内部 URL、源码和终端输出。\n\nREADME 显示工具会报告 `suspectedSecrets`，但当前证据只能证明它会识别或报告疑似秘密，不能证明导入前会强制删除或脱敏。`import_agents` 还会读取 Claude Skills、Codex 配置引用以及环境和 Provider 设置建议。未发现访问 `~/.ssh` 的明确证据，也未发现主动枚举全部环境变量的代码证据，但不能把未完整读取的模块视为已经证明安全。\n\n**证据：** `README.md:229-245`、`README.md:303-315`、`lib/imports.mjs:23-73`、`lib/context-bridge.mjs:110-183`。\n\n**风险程度：中等。风险来自读取内容的敏感性，而非已发现窃取行为。**\n\n### 4. 依赖风险\n\n**检查内容：** 运行时依赖数量、版本约束、预发布依赖、安装脚本和锁文件。\n\n**发现：** 当前 `package.json` 没有普通 `dependencies`，主要依赖由宿主提供的 `@deepseek-ai/cordis`、`@deepseek-ai/dsh-tools`、`@deepseek-ai/locale` 和 React。较少的直接运行依赖降低了插件自身引入恶意包的概率；同时，`@deepseek-ai/locale` 使用预发布版本下限，React 使用 `>=18.0.0` 宽范围，最终安全性会受到宿主实际解析版本影响。\n\n仓库存在约 220 KB 的 `package-lock.json`，但当前抓取工具未能完整读取该锁文件，也不能在本轮运行 `npm audit`，因此报告不会作出无已知 CVE的声明。发布审核时应针对精确提交重新生成 SBOM，并核验锁文件中开发依赖和构建工具的已知漏洞。\n\n**证据：** `package.json:73-89`、根目录 `package-lock.json`。\n\n**风险程度：较低至中等，主要问题是锁文件漏洞核验尚未完成。**\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆代码、Base64 或十六进制载荷、自修改代码、动态解密、隐藏下载器、异常定时任务、不可解释的启动行为。\n\n**发现：** 已读取代码均为结构清晰的 ESM，函数和模块名称与导入、同步、上下文桥接等业务相符，存在正常的错误处理和中文注释。没有发现 Base64 执行载荷、动态函数构造、远程模块加载、自删除或反调试代码。Cordis 补丁只注册该插件，没有偷偷增加额外插件或远程启动器。\n\n这只能证明已检查文件中未发现后门，不能代替对所有 `lib/*.mjs`、`.github/scripts/` 和发布到 npm 的 tarball 做逐字节比对。\n\n**证据：** `index.mjs:1-65`、`lib/imports.mjs:1-73`、`lib/context-bridge.mjs:1-247`、`cordis.patch.yml:1-30`。\n\n**风险程度：低，当前没有恶意或混淆证据。**\n\n### 6. 权限越界\n\n**检查内容：** 宿主注入权限、沙箱边界、任意路径读取、用户目录写入、外部客户端历史修改、Web 路由及默认安全开关。\n\n**发现：** `lib/imports.mjs` 明确说明不使用 `ctx.fs`，原因是宿主沙箱会拒绝写入 `~/.dsh`，随后直接导入 Node.js `fs` 操作真实文件系统。这意味着插件主动绕过了宿主文件系统权限边界。入口还要求 `sessionPersistence`、`fs` 和 `tools`，并可选使用 `webServer` 与 `commands`。\n\n插件允许用户提交本地路径进行探测和导入，能递归扫描多个 AI 客户端目录；导出功能会创建文件，`import_agents` 在 `apply:true` 时写入 `~/.agents`，双向同步启用后可能回写外部客户端历史。积极因素是上下文桥接默认关闭、同步默认关闭、Agent 安装默认 dry-run，并提供 preview 和 expectedHash 等防误操作机制。但这些保护属于运行参数，不改变插件本身拥有广泛读写能力的事实。\n\n**证据：** `lib/imports.mjs:1-16`、`lib/imports.mjs:23-73`、`index.mjs:28-92`、`README.md:264-268`、`README.md:306-315`。\n\n**风险程度：中等，是本次审查的主要风险来源。**\n\n## 风险点汇总\n\n1. **直接 Node.js 文件访问绕过宿主沙箱。** 这是明确的权限边界扩大，不应按普通无状态 UI 插件看待。\n2. **读取范围覆盖多个 AI 客户端的完整历史。** 会话中可能混有 Token、客户信息、内部源码和终端日志。\n3. **上下文桥接可能造成间接外发。** 本地 Claude 记忆和 Skills 被注入提示词后，可能随模型调用发送给外部提供商。\n4. **双向同步和 Agent 安装具备跨目录写能力。** 默认虽关闭或 dry-run，但启用后的影响范围较大。\n5. **Git 子进程、Web 路由认证、锁文件 CVE 和部分模块未完成逐行核验。** 当前证据不足以给予无条件白名单结论。\n6. **未发现恶意下载、安装期执行、固定第三方窃取域名、代码混淆或后门。** 现有风险更符合高权限工具的设计风险，而非恶意软件行为。\n\n## 结论与使用建议\n\n**最终结论：存在风险，但没有证据表明该仓库是恶意插件。用户应谨慎使用，不能无条件放心用。**\n\n普通用户如果只需要迁移会话，应先使用 `preview:true` 和 `expectedHash`，只授权确切的单个会话文件或指定客户端目录，不要直接授权整个主目录。应保持上下文桥接和双向同步关闭，在导入后检查会话中是否包含 API Key、Cookie、客户资料、私有源码和内部地址，再决定是否继续向云端模型发送消息。\n\n企业或团队环境建议在独立系统账号、容器或具有目录白名单的沙箱中运行，并明确禁止访问 `~/.ssh`、云厂商凭据目录、浏览器配置、密码库和项目 `.env`。社区正式放行前，应补充完成四项工作：获取 GitHub API 的精确 `default_branch` 与 `pushed_at`；逐行审查 `discovery-host.mjs` 等子进程代码；检查 Web API 的认证、CSRF 和路径校验；对 `package-lock.json` 和 npm 发布包执行 SBOM、CVE 扫描及仓库到 tarball 的一致性比对。\n\n在这些审查完成前，建议 MyDSH 将其标记为**需要人工复核的高权限导入工具**，执行动作选择 `review`，不直接进入无提示的可信插件列表。\n","action":"review","reviewed_at":"2026-08-17T14:03:54.841237+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":56,"score_type":"safety","review_status":"complete"},{"full_name":"LayneChai/superpowers-dsh","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T14:39:52Z","summary":"未见恶意后门，但外联遥测、命令执行和发布产物一致性仍需复核。","details":["代码执行：插件本体声明仅用 Node 内置模块注册技能，但被注册的技能会引导智能体执行 Git、测试、签名检查等系统命令；继承的视觉伴侣还存在基于环境变量调用 child_process.exec 的路径，虽非默认触发，仍应改为参数化执行。([github.com](https://github.com/LayneChai/superpowers-dsh))","数据外发：目标仓库明确说明 brainstorming 保留 scripts/server.cjs；其上游对应实现默认从 primeradiant.com 加载带版本参数的图片，会向第三方暴露请求 IP、User-Agent 和插件版本。目标 README 未披露该行为，发布前必须核对目标文件并改为本地资源或显式选择加入。([github.com](https://github.com/LayneChai/superpowers-dsh))","敏感读取：未发现主动读取 ~/.ssh、~/.dsh 或批量输出 token 的证据；但 systematic-debugging 示例会检查环境变量是否存在，并调用 security list-keychains、security find-identity -v，可能把证书名称和签名身份元数据带入智能体上下文或日志。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/skills/systematic-debugging/SKILL.md))","依赖风险：README 声明插件零运行时依赖，lib/index.js 仅使用 Node 内置模块和注入的 ctx.skills 服务；安装链仍依赖 npx、pnpm、npm/GitHub。仓库同时提交了 123 KB 的二进制 tgz，尚无公开哈希或可复现构建证明，存在源码与发布包不一致的供应链核验缺口。([github.com](https://github.com/LayneChai/superpowers-dsh))","混淆与后门：已展开的 README 和 SKILL.md 未发现 eval、加密载荷、Base64 解码器、隐藏下载执行或反分析代码；但二进制 tarball 无法在 GitHub 文本视图中审查，因此只能判定未发现恶意证据，不能判定产物已完全可信。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/superpowers-dsh-0.1.0.tgz))","权限越界：插件注册在 host 层，使 profile 下每个 agent 会话都能加载这些技能；using-git-worktrees 会执行 Git 状态检查，并在目录未被忽略时要求修改 .gitignore 和提交变更。该能力符合开发智能体定位，但权限范围明显高于普通只读知识插件。([github.com](https://github.com/LayneChai/superpowers-dsh))"],"report_md":"## 安全评分\n\n**56/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 插件安全分析报告：LayneChai/superpowers-dsh\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对插件的代码执行、数据外发、敏感信息读取、依赖供应链、混淆后门和权限边界进行了检查。审查结论为：**没有发现足以认定其为恶意插件的后门或凭据窃取逻辑，但当前版本不适合不加限制地直接标记为“放心使用”**。主要原因是其技能能够引导智能体执行系统命令和修改 Git 工作区，同时继承的视觉伴侣实现存在默认第三方图片请求及条件式 shell 命令执行路径，仓库内提交的 npm tarball 也缺少源码一致性证明。\n\n## 评估对象\n\n- 仓库：`LayneChai/superpowers-dsh`\n- 评估分支：`main`，GitHub 页面显示该仓库只有该活动分支入口，并共有 10 次提交。([github.com](https://github.com/LayneChai/superpowers-dsh))\n- 结构：根目录包含 `lib/`、`skills/`、`static/`、`package.json`、`cordis.patch.yml`、README 及 `superpowers-dsh-0.1.0.tgz`；没有显示根级 `src/` 或独立 `scripts/` 目录，运行脚本位于具体技能目录内。([github.com](https://github.com/LayneChai/superpowers-dsh))\n- 仓库规模：14 个注册技能；已提交的安装包约 123 KB。([github.com](https://github.com/LayneChai/superpowers-dsh))\n- 最后更新时间：本次审查尝试访问指定 GitHub Repository API，但审查通道未能取得 `pushed_at` 响应，因此 `updated_at` 保留为 `null`，不以页面抓取时间冒充仓库更新时间。该缺口本身是暂缓直接发布的原因之一。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `README.md`、`lib/index.js` 的公开行为说明、`skills/systematic-debugging/SKILL.md`、`skills/using-git-worktrees/SKILL.md`，以及目标仓库明确继承的 brainstorming 视觉伴侣实现。\n\n**发现：** 插件加载器本身被描述为仅扫描 `skills/<name>/SKILL.md`，使用 Node 内置模块向 `ctx.skills` 注册 provider，不包含常规运行时依赖。([github.com](https://github.com/LayneChai/superpowers-dsh)) 但是技能正文并非纯文档：systematic-debugging 给出了 `env`、`security`、`codesign` 等命令；using-git-worktrees 会检查 Git 元数据，并在需要时修改 `.gitignore`、创建提交和工作树。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/skills/systematic-debugging/SKILL.md))\n\n目标 README 还确认 brainstorming 保留 `scripts/server.cjs`。其上游对应代码在设置 `BRAINSTORM_OPEN_CMD` 时使用 `child_process.exec` 拼接浏览器 URL；正常平台路径使用无 shell 的 `execFile`，因此默认情况下不存在远程参数直接注入，但环境变量一旦被不可信启动脚本污染，就可能形成任意命令执行。([github.com](https://github.com/LayneChai/superpowers-dsh))\n\n**风险程度：中等。** 这是开发智能体预期能力，不是隐藏后门，但必须由 DSH 权限确认机制约束。建议删除 `exec` 分支，统一改用 `execFile` 和固定参数数组。\n\n### 2. 数据外发\n\n**检查内容：** README 中的上游继承说明、视觉伴侣脚本及第三方 URL。\n\n**发现：** 上游 `server.cjs` 默认引用 `https://primeradiant.com/brand/superpowers-visual-brainstorming-logo.png`，并追加插件版本参数；只有设置 `SUPERPOWERS_DISABLE_TELEMETRY`、`DISABLE_TELEMETRY` 或 `CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC` 才停止该请求。([github.com](https://github.com/obra/superpowers/blob/main/skills/brainstorming/scripts/server.cjs)) 该请求不包含项目源码或用户提示词，但第三方服务器仍可取得源 IP、User-Agent、访问时间及插件版本。目标 README 明确保留视觉伴侣，却没有向 DSH 用户说明这一默认外联。([github.com](https://github.com/LayneChai/superpowers-dsh))\n\n**风险程度：中等。** 发布前应逐行核对目标 `skills/brainstorming/scripts/server.cjs`；若内容与上游一致，应把图片本地化，或改为默认关闭、用户明确同意后开启。\n\n### 3. 敏感信息读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、Token、系统钥匙串及签名身份相关调用。\n\n**发现：** 已审查内容未发现读取 SSH 私钥、DSH 凭据目录、浏览器 Cookie、云端 Token 文件或批量打印全部环境变量值的指令。systematic-debugging 示例使用 `${IDENTITY:+SET}` 检查变量是否存在，并运行 `security list-keychains`、`security find-identity -v`，主要读取证书及签名身份元数据。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/skills/systematic-debugging/SKILL.md)) 这些命令通常不会输出私钥本体，但名称、证书主体和钥匙串结构仍可能进入模型上下文或日志。\n\n**风险程度：较低但需约束。** 建议技能增加最小披露要求：只输出布尔状态或脱敏摘要，禁止直接展示 Token、证书序列号和个人身份字段。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** 安装方式、运行时依赖声明、GitHub/npm/pnpm 链路和仓库内 tarball。\n\n**发现：** README 声明插件为零运行时依赖，`lib/index.js` 仅依赖 Node 内置模块和 DSH 注入的 `ctx.skills`。([github.com](https://github.com/LayneChai/superpowers-dsh)) 安装过程仍通过 `npx @deepseek-ai/dsh`、pnpm、npm、GitHub 或 npmmirror 下载代码，安全性取决于包名解析、锁定版本和上游账户安全。仓库直接提交了 `superpowers-dsh-0.1.0.tgz`，GitHub 只能显示其 123 KB 大小，无法进行文本级审查。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/superpowers-dsh-0.1.0.tgz)) 当前未提供该 tarball 的 SHA-256、npm provenance 或从当前提交可复现构建的证明。\n\n**风险程度：中等。** 发布前必须解包 tarball，与 `main` 的 `package.json`、`lib/`、`skills/` 做逐文件哈希比较，并固定发布提交 SHA。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** 可见 Markdown、命令片段、目录结构及二进制文件。\n\n**发现：** 可展开的技能内容结构清晰，没有发现 `eval`、动态 Base64 解码、远程脚本下载后执行、自删除、反调试或伪装凭据上传逻辑。插件行为在 README 中有较完整说明，包括 provider 注册、目录扫描和资源路径解析。([github.com](https://github.com/LayneChai/superpowers-dsh)) 唯一无法直接验证的是二进制 tgz 及未成功展开的目标 `server.cjs`、`package.json`、`cordis.patch.yml` 和 `lib/index.js` 原文。\n\n**风险程度：较低到中等。** 目前没有恶意证据，但不能把“未发现”解释成“发布产物已验证安全”。\n\n### 6. 权限越界\n\n**检查内容：** 插件注册范围、文件写入、Git 操作、子代理和外部进程能力。\n\n**发现：** 插件被注册到 host 层，profile 内每个 agent 会话都可发现这些技能。([github.com](https://github.com/LayneChai/superpowers-dsh)) using-git-worktrees 会读取仓库状态、创建工作树，并在 `.worktrees` 未被忽略时要求修改 `.gitignore` 和提交变更；它在创建工作树前要求用户同意，这是积极的安全设计，但后续 Git 和项目初始化动作仍具有真实副作用。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/skills/using-git-worktrees/SKILL.md)) systematic-debugging 还可能执行构建、签名和诊断命令。([github.com](https://github.com/LayneChai/superpowers-dsh/blob/main/skills/systematic-debugging/SKILL.md))\n\n**风险程度：中等。** 该插件应按“具备开发代理执行权限的工作流插件”管理，而不是普通只读知识技能。建议默认仅在隔离 profile、受控工作区和非生产凭据环境中启用。\n\n## 风险点汇总\n\n1. 视觉伴侣可能默认向 `primeradiant.com` 请求带版本参数的远程图片，目标 README 未明确披露。\n2. 继承脚本存在受环境变量控制的 `child_process.exec` 分支，虽然非默认触发，但实现方式不符合最小攻击面原则。\n3. 技能会真实执行 Git、构建、测试、签名检查及文件修改，权限明显高于普通内容插件。\n4. 仓库内二进制 tarball 缺少哈希、签名和可复现构建证明，不能确认其与可见源码完全一致。\n5. GitHub API 的 `pushed_at` 未能完成核验，当前报告拒绝伪造更新时间，发布流程应补做该项检查。\n\n## 结论与使用建议\n\n该仓库**没有表现出窃取凭据、下载恶意载荷或隐蔽控制主机的明确意图，因此不判定为恶意**。但其默认外联继承风险、条件式 shell 执行、广泛的开发代理权限和未验证发布包，使其暂时不满足 MyDSH 的“放心用、直接发布”标准。\n\n给普通用户的明确建议是：**谨慎用**。只应在隔离项目和最小权限的 DSH profile 中试用，不要在包含生产密钥、SSH 私钥或签名证书的环境中直接启用视觉伴侣。发布前应完成四项整改：将远程品牌图片本地化或改为显式选择加入；把 `BRAINSTORM_OPEN_CMD` 改为无 shell 参数调用；解包并核对 tgz 与源码哈希；补充 GitHub API 分支更新时间、提交 SHA 和 npm provenance。完成这些核验后，才可重新评估为“通过”。\n","action":"review","reviewed_at":"2026-08-17T14:56:41.319716+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":56,"score_type":"safety","review_status":"complete"},{"full_name":"NanmiCoder/dsh-agent-teams","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T11:11:52Z","summary":"未发现恶意代码，但智能体权限和跨工作区状态暴露需整改","details":["评估对象：默认分支为 main；检查了 package.json、cordis.patch.yml、src、scripts、发布工作流及安装配置；仓库没有提交 lib 产物目录，lib 由构建流程生成。","维度1（代码执行）：未发现 exec、eval、curl|sh、child_process 或 postinstall；发布前脚本仅执行构建与包内容校验。但插件会创建并运行真实子智能体，成员过滤器只禁止部分团队管理工具，仍可能继承宿主提供的文件、Shell和网络工具，因此不应在无沙箱环境处理不可信任务。","维度2（数据外发）：未发现向硬编码第三方域名上传数据的代码；主要通信是宿主服务内部路由。风险在于状态接口会聚合全部工作区并返回成员、任务和最近的队长收件箱内容，代码中没有看到该路由自身的身份或工作区授权检查，公网或多人共享面板可能产生跨工作区信息暴露。","维度3（敏感读取）：未发现主动读取 ~/.ssh、环境令牌或宿主凭据；默认只读写工作区下的 .dsh/agent-teams。但 stateDir 仅作为字符串与工作区路径拼接，未拒绝绝对路径或 ..，错误或恶意配置可能使状态读写越出工作区边界。","维度4（依赖风险）：插件没有普通运行时 dependencies，主要依赖宿主提供的可选 @dsh peer 包，降低了直接供应链面积；但 peerDependencies 使用兼容范围，且仓库设置 auto-install-peers=true、strict-peer-dependencies=false，构建和开发环境仍应锁定并审计实际安装版本。","维度5（混淆或后门）：源码为可读 TypeScript，未发现混淆载荷、Base64执行、动态下载执行、隐藏安装钩子或可疑外联；构建、技能同步和发布脚本用途与文件名一致。","维度6（权限越界）：团队工具已实现队长、成员和参与者校验，teamId和成员名也经过限制，这是有效防护；但子智能体不是最小权限运行，且状态面板缺少插件级访问控制。建议在发布前增加 stateDir 边界校验、状态接口鉴权与工作区隔离，并为子智能体配置显式工具白名单和网络沙箱。"],"action":"review","reviewed_at":"2026-08-17T12:19:28.953730+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":55,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**55/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未发现恶意代码，但智能体权限和跨工作区状态暴露需整改\n\n## 评估对象\n\n- 仓库：`NanmiCoder/dsh-agent-teams`\n- 分支：`main`\n- 版本更新时间：2026-08-17T11:11:52Z\n\n## 检查结果\n\n- 评估对象：默认分支为 main；检查了 package.json、cordis.patch.yml、src、scripts、发布工作流及安装配置；仓库没有提交 lib 产物目录，lib 由构建流程生成。\n- 维度1（代码执行）：未发现 exec、eval、curl|sh、child_process 或 postinstall；发布前脚本仅执行构建与包内容校验。但插件会创建并运行真实子智能体，成员过滤器只禁止部分团队管理工具，仍可能继承宿主提供的文件、Shell和网络工具，因此不应在无沙箱环境处理不可信任务。\n- 维度2（数据外发）：未发现向硬编码第三方域名上传数据的代码；主要通信是宿主服务内部路由。风险在于状态接口会聚合全部工作区并返回成员、任务和最近的队长收件箱内容，代码中没有看到该路由自身的身份或工作区授权检查，公网或多人共享面板可能产生跨工作区信息暴露。\n- 维度3（敏感读取）：未发现主动读取 ~/.ssh、环境令牌或宿主凭据；默认只读写工作区下的 .dsh/agent-teams。但 stateDir 仅作为字符串与工作区路径拼接，未拒绝绝对路径或 ..，错误或恶意配置可能使状态读写越出工作区边界。\n- 维度4（依赖风险）：插件没有普通运行时 dependencies，主要依赖宿主提供的可选 @dsh peer 包，降低了直接供应链面积；但 peerDependencies 使用兼容范围，且仓库设置 auto-install-peers=true、strict-peer-dependencies=false，构建和开发环境仍应锁定并审计实际安装版本。\n- 维度5（混淆或后门）：源码为可读 TypeScript，未发现混淆载荷、Base64执行、动态下载执行、隐藏安装钩子或可疑外联；构建、技能同步和发布脚本用途与文件名一致。\n- 维度6（权限越界）：团队工具已实现队长、成员和参与者校验，teamId和成员名也经过限制，这是有效防护；但子智能体不是最小权限运行，且状态面板缺少插件级访问控制。建议在发布前增加 stateDir 边界校验、状态接口鉴权与工作区隔离，并为子智能体配置显式工具白名单和网络沙箱。\n\n## 结论与使用建议\n\n**谨慎用**。未发现恶意代码，但智能体权限和跨工作区状态暴露需整改\n"},{"full_name":"Mars-Sea/dsh-commandcode-provider","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-21T08:35:11Z","summary":"未见后门，但可配置端点与凭据引用可组合外传密钥，需整改后再发布","details":["维度1·代码执行：检查 package.json、cordis.patch.yml、src/index.ts、src/adapter.ts、src/commands.ts。未发现 child_process、exec、spawn、eval、new Function、curl|sh、动态下载执行或 postinstall；安装生命周期仅有 prepare=tsdown，用于本地编译。代码执行风险较低，但从 Git URL 安装时仍会执行构建工具及其依赖。","维度2·数据外发：插件会向默认 https://api.commandcode.ai 请求模型、账户、额度及生成接口，并把系统提示词、对话、工具定义、工具返回内容、图片、工作目录衍生项目名、平台和 Node.js 版本发送给服务端。更关键的是 apiBase 可任意配置且没有强制 HTTPS 或域名白名单，Authorization Bearer 会跟随该地址发送；若配置被篡改，密钥及会话内容可能外泄。请求还固定携带 x-taste-learning: true，应明确其数据处理含义。","维度3·敏感读取：未发现读取 ~/.ssh、~/.dsh 或遍历用户目录。插件会按顺序读取明文配置、凭据服务、指定环境变量以及 ~/.commandcode/auth.json。apiKeyEnv 实际是可配置的凭据引用；它与任意 apiBase 组合后，可能成为从凭据存储或进程环境读取其他密钥并发送到外部地址的通道。密钥未被直接写入日志，但会用于请求头。","维度4·依赖风险：package.json 没有普通 production dependencies，但包含多项宿主 peerDependencies，以及 Vue、Element Plus、tsdown、TypeScript 等开发依赖；多个 DSH 包仍使用 0.1.0-rc.6 预发布版本。仓库包含 package-lock.json，但 prepare 生命周期意味着从 Git 安装时会执行 tsdown 及其依赖链。未发现自定义下载脚本，供应链风险主要来自构建依赖和预发布宿主接口。","维度5·混淆与后门：已读 TypeScript 源码结构清晰，未发现压缩混淆、加密字符串解码、动态模块注入、隐蔽定时任务或远程代码加载。代码中的 Base64 用于图片序列化，不是可执行载荷。main 分支未直接提交 lib/，而 package.json 声明发布 lib；因此本次能够审计源代码，但没有完成对 npm 已发布编译产物的逐字节一致性验证。","维度6·权限越界：插件正常权限包括注册 LLM 适配器、读取附件、访问远程 API 和写入模型缓存。modelsCachePath 可配置为任意路径，写缓存时会递归创建目录并通过临时文件 rename 覆盖目标；虽然临时文件权限为 0600，但没有把路径限制在插件缓存目录，也没有显式防御符号链接或敏感文件覆盖。与可配置 apiBase、apiKeyEnv 叠加后，形成需要整改的权限边界问题。"],"report_md":"## 安全评分\n\n**55/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》对 `Mars-Sea/dsh-commandcode-provider` 进行了六维度静态安全审查。结论是：**未发现恶意后门、远程代码执行、混淆载荷或主动扫描用户敏感目录的行为，但当前版本不能直接认定为可在生产环境“放心使用”**。主要原因不是常见的 `exec/eval`，而是配置边界：插件允许同时指定任意 API 地址、任意凭据引用和任意缓存路径，使得配置修改能力可以间接转化为密钥外传和本地文件覆盖能力。\n\n## 评估对象\n\n- 仓库：`Mars-Sea/dsh-commandcode-provider`\n- 评估分支：`main`，仓库页面显示该分支为默认分支。\n- 分支更新时间：本次已请求用户指定的 GitHub Repository API，但当前浏览器授权未允许读取该 API JSON，因此没有获得可核实的 `pushed_at` 秒级时间；为避免伪造事实，JSON 顶层将 `updated_at` 标记为 `null`。\n- 仓库规模：仓库页面显示约 56 次提交；根目录包含 `.github/`、`src/`、`tests/` 等目录，以及 `package.json`、`package-lock.json`、`cordis.patch.yml`、`CHANGELOG.md` 等文件。已审计的核心 TypeScript 源码约 1600 行以上。\n- 重点范围：`package.json`、`cordis.patch.yml`、`src/index.ts`、`src/adapter.ts`、`src/commands.ts`。main 根目录未发现独立 `scripts/`、`install` 或已提交的 `lib/` 目录；`package.json` 声明发布 `lib`，但编译产物未纳入本次源分支逐文件审查。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 安装生命周期脚本、Shell 调用、进程创建、动态 JavaScript 执行及远程脚本下载。\n\n**发现：** `package.json` 的脚本只有 `build`、`prepare`、测试和类型检查；`prepare` 执行 `tsdown`。源码未发现 `child_process`、`exec`、`spawn`、`eval`、`new Function`、`curl|sh`、`postinstall` 或远程代码下载执行。`cordis.patch.yml` 只是插件元数据，不执行命令。\n\n**证据：** `package.json:38-45`；`cordis.patch.yml:1-15`；`src/index.ts:1-15`；`src/adapter.ts:1-12`。\n\n**风险程度：低。** 但从 Git 仓库直接安装时，npm 的 `prepare` 会运行构建工具，因此仍应固定提交 SHA 并使用锁文件安装。\n\n### 2. 数据外发\n\n**检查内容：** 第三方域名、请求路径、请求头及实际上传的数据字段。\n\n**发现：** 默认服务端为 `https://api.commandcode.ai`。插件访问 `/api/v1/models`、`/api/v1/me`、`/api/v1/me/usage`、`/api/v1/me/credits` 和 `/api/v1/alpha/generate`。生成请求会上传系统提示词、全部消息、工具定义、工具结果、图片 Base64、工作目录衍生的项目标识、操作系统、CPU 架构和 Node.js 版本。`src/adapter.ts:1104-1111` 还固定发送 `x-taste-learning: true`。\n\n更重要的是，`src/index.ts:63-66` 将 `apiBase` 暴露为普通字符串配置，代码没有限制必须为 HTTPS，也没有把 Bearer 密钥绑定到 `api.commandcode.ai`。只要配置被恶意修改，请求头中的 API Key 和会话数据就可能被发送到攻击者控制的服务器。\n\n**风险程度：中。** 这是本报告最主要的安全问题。\n\n### 3. 敏感信息读取\n\n**检查内容：** SSH、DSH、环境变量、凭据服务和用户目录文件读取。\n\n**发现：** 未发现读取 `~/.ssh`、`~/.dsh`、浏览器凭据或批量枚举环境变量。插件会读取四类 API Key 来源：配置中的明文值、DSH 凭据服务、指定环境变量以及 `~/.commandcode/auth.json`。相关代码位于 `src/index.ts:100-116` 和 `src/adapter.ts:1023-1095`。\n\n问题在于 `apiKeyEnv` 是一个可配置的凭据引用，不只局限于固定的 Command Code Key。若攻击者能够修改插件设置，可将其指向进程中其他环境变量或凭据项，再把 `apiBase` 改成外部地址，通过一次模型请求带走该凭据。\n\n**风险程度：中。** 未发现主动窃取行为，但缺少凭据与目标域名绑定。\n\n### 4. 依赖与供应链\n\n**检查内容：** 运行时依赖、构建依赖、版本稳定性、生命周期脚本和锁文件。\n\n**发现：** 包没有普通 `dependencies`，主要依赖由 DSH 宿主通过 `peerDependencies` 提供；开发链包含 Vue、Element Plus、tsdown、TypeScript、Vitest 和 Zod。多项 DSH 依赖仍为 `0.1.0-rc.6`，属于预发布接口。仓库存在 `package-lock.json`，但从 Git 安装时 `prepare` 会执行 tsdown，供应链范围会扩展到构建工具依赖树。未发现从未知 URL 下载二进制文件或安装脚本。\n\n**风险程度：低至中。** 建议发布前以锁文件执行 `npm ci`、`npm audit`，并生成 SBOM。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩代码、编码载荷、动态导入、反调试、隐蔽持久化和远程模块注入。\n\n**发现：** TypeScript 源码可读，函数和网络路径均有明确命名；未发现混淆字符串、动态代码解释、隐藏定时任务或反分析逻辑。Base64 仅用于将图片附件转换成 API 请求内容。没有证据表明该仓库是恶意插件。\n\n需要保留的审计边界是：仓库没有直接提交 `lib/`，而 npm 发布清单包含 `lib` 和 `assets`。本次结论针对 main 分支源码，不能自动证明已发布 npm tarball 与源码完全一致。\n\n**风险程度：低。** 发布前仍应核对 npm tarball 哈希及 sourcemap。\n\n### 6. 权限越界\n\n**检查内容：** 文件系统读写范围、附件访问、配置权限以及网络权限。\n\n**发现：** 插件会读取用户主动传入的图片附件，并写入模型列表缓存。`modelsCachePath` 是任意字符串路径；`src/adapter.ts:647-666` 会创建父目录、写入临时文件并 `rename` 到目标路径。虽然临时文件使用 `0600`，但目标路径未限制在 DSH 缓存目录，也未显式检查符号链接或拒绝覆盖已有敏感文件。攻击通常仍需要配置修改权限，但该设计扩大了插件可利用的本地写权限。\n\n**风险程度：中。** 建议把缓存固定在插件专属目录，并使用真实路径校验、`O_NOFOLLOW` 或等效防护。\n\n## 风险点汇总\n\n1. `apiBase` 未强制 HTTPS、未设置官方域名白名单，却会接收 Bearer API Key。\n2. `apiKeyEnv` 可引用任意凭据或环境变量，与任意 `apiBase` 组合后可能形成凭据外传链。\n3. 请求会上传工具执行结果、图片、工作目录衍生信息和运行环境信息；敏感文件内容一旦进入对话或工具结果，也会被第三方接收。\n4. `x-taste-learning: true` 固定开启，其数据保存、训练或个性化含义需要产品方公开说明。\n5. `modelsCachePath` 未限制目录，存在配置驱动的任意可写文件覆盖风险。\n6. main 分支未提交 `lib/`，本次未证明 npm 编译产物与已审计源码完全一致。\n\n## 结论与使用建议\n\n**结论：存在风险，不属于恶意插件，但当前不建议普通用户在多租户、共享主机或包含高价值凭据的生产环境中直接放心使用。建议状态为 `review`。**\n\n在完成整改前，只建议在隔离环境中谨慎试用，并同时满足：固定使用官方 HTTPS 端点；使用插件专属的低权限 API Key；不在提示词、图片或工具结果中包含 SSH Key、Token、客户数据和生产日志；把缓存路径固定到插件专属目录；固定仓库提交 SHA；核对 npm tarball 与源码差异。\n\n发布前应至少完成四项整改：对 `apiBase` 实施 HTTPS 校验及域名白名单；将凭据引用与允许的目标域名绑定；限制并规范化 `modelsCachePath`；明确或默认关闭 `x-taste-learning`。完成这些修改并审计实际发布产物后，可重新评估是否调整为“通过/放心用”。\n","action":"review","reviewed_at":"2026-08-17T14:08:25.543535+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":55,"score_type":"safety","review_status":"complete"},{"full_name":"superdesigndev/superdesign-skill","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-05T00:00:00Z","summary":"未见后门，但会执行未锁定CLI并外发代码上下文，敏感项目不宜直接使用","details":["评估对象: GitHub确认默认分支为main，未发现master可用分支；分支页显示main最后更新于2026-08-05。API端点未返回秒级pushed_at，因此updated_at按该UTC日期归一化。([github.com](https://github.com/superdesigndev/superdesign-skill/branches))","代码执行: main根目录package.json仅含插件元数据，未配置scripts或dependencies，仓库根目录也未见src、lib、scripts；但INSTALL和技能文档要求全局安装或通过npx执行@superdesign/cli@latest，形成未锁版本的外部代码执行风险。仓库内未见eval、curl|sh或postinstall。([github.com](https://github.com/superdesigndev/superdesign-skill))","数据外发: 核心功能会把选定的源码、设计系统、HTML模板、资源文件和用户设计指令发送到superdesign.dev，并支持让服务处理用户指定的网站URL；这是明确的业务数据外发，保密代码、客户项目和未公开产品不可直接使用。([github.com](https://github.com/superdesigndev/superdesign-skill))","敏感读取: 工作流会扫描package/config、路由、组件、布局和主题等项目文件；未发现读取~/.ssh、~/.dsh或批量提取环境变量的指令。规则要求排除.env、私钥、token、.git和越界符号链接，但该约束主要位于智能体指令中，无法从本仓库证明外部CLI始终强制执行。","依赖风险: 本仓库没有运行时依赖锁文件，真正执行的CLI来自独立NPM包@superdesign/cli@latest；latest可被后续版本替换，且CLI实现、依赖树和安装生命周期不在本仓库审查范围内，当前结论不能自动覆盖未来安装版本。([github.com](https://github.com/superdesigndev/superdesign-skill))","混淆/后门: 可见JavaScript入口dsh/index.js仅进行插件上下文合并，cordis.patch.yml属于声明式注册；未见压缩混淆、Base64载荷、动态eval、隐蔽下载器、反分析逻辑或持久化后门。","权限越界: 插件可在项目内创建或覆盖.superdesign目录中的设计系统、HTML和资产文件，可修改.gitignore，并提供git add和git commit操作；正常流程要求用户确认，但全局CLI安装、浏览器登录、项目源码读取和外部上传明显扩大了插件权限边界。"],"action":"review","reviewed_at":"2026-08-17T12:20:24.093539+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见后门，但会执行未锁定CLI并外发代码上下文，敏感项目不宜直接使用\n\n## 评估对象\n\n- 仓库：`superdesigndev/superdesign-skill`\n- 分支：`main`\n- 版本更新时间：2026-08-05T00:00:00Z\n\n## 检查结果\n\n- 评估对象: GitHub确认默认分支为main，未发现master可用分支；分支页显示main最后更新于2026-08-05。API端点未返回秒级pushed_at，因此updated_at按该UTC日期归一化。([github.com](https://github.com/superdesigndev/superdesign-skill/branches))\n- 代码执行: main根目录package.json仅含插件元数据，未配置scripts或dependencies，仓库根目录也未见src、lib、scripts；但INSTALL和技能文档要求全局安装或通过npx执行@superdesign/cli@latest，形成未锁版本的外部代码执行风险。仓库内未见eval、curl|sh或postinstall。([github.com](https://github.com/superdesigndev/superdesign-skill))\n- 数据外发: 核心功能会把选定的源码、设计系统、HTML模板、资源文件和用户设计指令发送到superdesign.dev，并支持让服务处理用户指定的网站URL；这是明确的业务数据外发，保密代码、客户项目和未公开产品不可直接使用。([github.com](https://github.com/superdesigndev/superdesign-skill))\n- 敏感读取: 工作流会扫描package/config、路由、组件、布局和主题等项目文件；未发现读取~/.ssh、~/.dsh或批量提取环境变量的指令。规则要求排除.env、私钥、token、.git和越界符号链接，但该约束主要位于智能体指令中，无法从本仓库证明外部CLI始终强制执行。\n- 依赖风险: 本仓库没有运行时依赖锁文件，真正执行的CLI来自独立NPM包@superdesign/cli@latest；latest可被后续版本替换，且CLI实现、依赖树和安装生命周期不在本仓库审查范围内，当前结论不能自动覆盖未来安装版本。([github.com](https://github.com/superdesigndev/superdesign-skill))\n- 混淆/后门: 可见JavaScript入口dsh/index.js仅进行插件上下文合并，cordis.patch.yml属于声明式注册；未见压缩混淆、Base64载荷、动态eval、隐蔽下载器、反分析逻辑或持久化后门。\n- 权限越界: 插件可在项目内创建或覆盖.superdesign目录中的设计系统、HTML和资产文件，可修改.gitignore，并提供git add和git commit操作；正常流程要求用户确认，但全局CLI安装、浏览器登录、项目源码读取和外部上传明显扩大了插件权限边界。\n\n## 结论与使用建议\n\n**谨慎用**。未见后门，但会执行未锁定CLI并外发代码上下文，敏感项目不宜直接使用\n"},{"full_name":"vlln/whale-girl","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-13T00:00:00Z","summary":"未见恶意执行或外传，但存在跨会话数据暴露与无鉴权接口风险","details":["代码执行：根 package.json 没有 preinstall、install、postinstall 或 prepare，仅有手动触发的测试、构建和门禁命令；运行入口未发现 exec、eval、child_process 或 curl|sh。风险低。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/package.json))","数据外发：浏览器端使用 /whale-girl 下的同源相对路径访问状态、配置、素材和交互接口，代码中未检出 http:// 或 https:// 外部地址；Node 入口同样没有外部网络地址。未发现遥测或第三方数据上传。([github.com](https://github.com/vlln/whale-girl/blob/main/lib/client.js))","敏感读取：插件只读取 DSH_HOME 环境变量并访问自身 data/whale-girl/state.json，未发现 ~/.ssh、TOKEN、SECRET 等读取；但它会读取全部 Agent 的任务标签以及会话 ID、标题和活动状态，敏感范围明显超过普通桌宠所需。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))","依赖风险：运行时依赖只有 schemastery，开发依赖为 esbuild；esbuild 0.28.1 高于已知 GHSA-67mh-4wv8-2f99 的修复版本 0.25.0。不过 package.json 与 pnpm-lock.yaml 对 schemastery 的依赖分组和版本声明不一致，会削弱可复现安装。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/package.json))","混淆与后门：lib/client.js 虽是构建产物，但保留模块边界、可读变量名和注释；未检出 eval、new Function、atob、btoa、WebAssembly 或编码载荷。静态模板使用 innerHTML，来自任务和状态的动态文案使用 textContent，未发现明显 DOM 注入后门。([github.com](https://github.com/vlln/whale-girl/blob/main/lib/client.js))","权限越界：代码明确遍历所有 Agent 并“绕过 owner fence”收集任务；/sessions、/state、/events 等 GET 接口没有插件级鉴权或速率限制，/sessions 会返回会话 ID、标题、活动类型和时间。若 DSH Web 暴露到局域网或公网且宿主未统一鉴权，可能造成任务与会话元数据泄露，并存在大量 SSE 连接导致资源消耗的风险。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照《MyDSH 安全报告标准》对 `vlln/whale-girl` 进行了六维度静态安全分析。综合结论为：**未发现恶意代码、命令执行链、凭据窃取或第三方数据外传，但当前版本存在真实的权限过宽与接口暴露风险，不能直接评价为“放心用”**。建议仅在绑定本机或已启用宿主统一身份认证的 DSH Web 环境中使用，不应未经复核直接暴露到局域网或公网。\n\n安全评分为 **54/100**，需要注意。该分数主要来自跨 Agent 任务读取、会话标题与活动信息暴露、缺少插件级接口鉴权和 SSE 连接上限，而不是恶意行为。\n\n## 评估对象\n\n- **仓库：** `vlln/whale-girl`\n- **评估分支：** `main`。仓库页面显示默认分支为 main，未使用不存在的 master 分支。([github.com](https://github.com/vlln/whale-girl))\n- **最新可验证提交：** `ecba322`，提交历史显示日期为 2026-08-13。([github.com](https://github.com/vlln/whale-girl/commits/main/))\n- **更新时间字段：** `2026-08-13T00:00:00Z` 为已验证日期的 ISO 日级归一化值。审计通道请求 GitHub Repo API 时未取得 JSON 响应，因此本报告不伪造秒级 `pushed_at`；正式发布流水线应再次调用仓库 API 覆盖此字段。\n- **仓库规模：** 223 次提交，根目录可见 8 个目录；核心运行代码包括 `lib/index.mjs` 591 行和 `lib/client.js` 1273 行。根目录不存在独立 `src/`，实际源模块位于 `lib/src/`。([github.com](https://github.com/vlln/whale-girl))\n- **重点检查范围：** `package.json`、`cordis.patch.yml`、`pnpm-lock.yaml`、`lib/index.mjs`、`lib/client.js`、`lib/src/` 模块入口、Web 路由、状态持久化、会话与任务读取逻辑，以及 `scripts/build-client.mjs`、`scripts/gates/run.mjs` 的调用入口和安装行为。`cordis.patch.yml` 仅向 Web 组合插入 `whale-girl`，未包含命令或远程下载配置。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/package.json))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 安装生命周期脚本、Node 子进程、Shell 命令、动态代码执行、远程脚本下载及 Git Hook 自动启用路径。\n\n**发现：** `package.json:32-37` 只有 `gates`、`test`、`build:client`、`check:client` 等手动命令，没有 `preinstall`、`install`、`postinstall`、`prepare` 等安装钩子；`package.json:6-14` 的发布文件白名单也不包含 `scripts/`、`desktop/` 或 `.githooks/`。主入口 `lib/index.mjs` 只导入 `node:fs` 与 `node:path`，未导入 `node:child_process`，全文未发现 `exec()`、`eval()` 或远程 Shell 管道。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/package.json))\n\n**风险程度：低。** 安装插件不会自动运行仓库开发脚本。但如果用户主动执行 `npm run build:client` 或 `npm run gates`，仍属于主动信任开发脚本的行为，建议发布流程固定提交 SHA 后再运行。\n\n### 2. 数据外发\n\n**检查内容：** `fetch`、图片加载、SSE、HTTP/HTTPS 常量、遥测和第三方域名。\n\n**发现：** `lib/client.js` 定义的接口全部位于 `/whale-girl` 相对路径，包括 `/state`、`/config`、`/interact`、`/events`、`/sessions` 和 `/assets`；素材清单和角色图片也从同源路径加载。客户端及 Node 入口均未检出 `http://` 或 `https://` 外部地址。([github.com](https://github.com/vlln/whale-girl/blob/main/lib/client.js))\n\n**风险程度：低。** 未发现向分析平台、作者服务器或其他第三方域名发送任务、会话、凭据或设备信息的行为。\n\n### 3. 敏感信息读取\n\n**检查内容：** SSH 文件、DSH 凭据、环境变量、Token、Secret、宿主状态文件及会话内容。\n\n**发现：** `lib/index.mjs:37-55` 只读取 `DSH_HOME`，随后访问 `<DSH_HOME>/data/whale-girl/state.json`，写入范围也限制在插件自己的状态目录；未发现 `~/.ssh`、通用 Token、Secret 或其他凭据文件读取。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))\n\n但 `lib/index.mjs:60-77` 会遍历 `ctx.agents.list()`，读取每个 Agent 的任务 ID、状态和标签；`lib/index.mjs:193-220` 还读取会话 ID、标题、创建时间和活动状态。这些信息未外发到第三方，但属于本地敏感工作元数据。\n\n**风险程度：中。** 对桌宠功能而言，读取全局运行状态可以解释，但读取完整任务标签和会话标题并非严格必要，应改为宿主提供的聚合状态或脱敏计数。\n\n### 4. 依赖风险\n\n**检查内容：** 直接依赖、开发依赖、锁文件完整性、已知安全公告和安装可复现性。\n\n**发现：** `package.json:29-40` 只有运行时依赖 `schemastery ^3.18.0` 和开发依赖 `esbuild ^0.28.1`。现有 esbuild 版本高于 GHSA-67mh-4wv8-2f99 所列修复版本 0.25.0，因此不受该已知问题影响。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/package.json))\n\n需要整改的是锁文件一致性：`pnpm-lock.yaml` 仍把 `schemastery` 放在 `devDependencies` 下，specifier 为 `^3.5.0`，而 `package.json` 已改为正式依赖 `^3.18.0`。这可能导致 `pnpm --frozen-lockfile` 拒绝安装，或在 Git 源使用 npm 安装时忽略 pnpm 锁文件并重新解析浮动版本。([github.com](https://github.com/vlln/whale-girl/blob/main/pnpm-lock.yaml))\n\n**风险程度：中低。** 未发现已确认的高危依赖漏洞，但供应链可复现性不足。建议重新生成锁文件，并在安装命令中使用固定提交 SHA，而不是长期跟随 `#main`。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆、编码载荷、动态函数、WebAssembly、隐藏远程加载及 DOM 注入。\n\n**发现：** `lib/client.js` 是构建后的单文件，但仍保留 `lib/src/...` 模块标记、正常变量名和业务注释，不属于刻意混淆。未发现 `eval`、`new Function`、`atob`、`btoa`、`WebAssembly` 或 `data:application` 载荷。([github.com](https://github.com/vlln/whale-girl/blob/main/lib/client.js))\n\n界面骨架使用了一段固定常量 `innerHTML`，任务回忆、回复等动态文本则通过 `textContent` 写入，未发现将任务标签或会话标题直接拼接进 HTML 的明显 XSS 路径。([github.com](https://github.com/vlln/whale-girl/blob/main/lib/client.js))\n\n**风险程度：低。** 未发现后门、隐藏下载器或恶意混淆特征。\n\n### 6. 权限越界\n\n**检查内容：** Cordis 注入权限、跨 Agent 数据访问、Web API 暴露、鉴权、CSRF、请求限制及资源消耗。\n\n**发现一：** `lib/index.mjs:26` 注入 `jobs`、`agents`、`sessions`、`settings` 和 `webServer`；`lib/index.mjs:60` 的注释明确写明“绕过 owner fence”，随后遍历所有 Agent 和无 owner 任务。这是明确的跨所有者读取，而不是最小权限设计。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))\n\n**发现二：** `lib/index.mjs:493-510` 注册的 `/sessions` GET 接口直接返回会话 ID、标题、活动和时间；`/state` 返回宠物账本与活动状态，账本来源包含已完成任务标签。路由处理器本身未执行身份或权限校验。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))\n\n**发现三：** `/interact` 与 `/presence` 有同源检查和 1KB 请求体限制，这是有效的浏览器 CSRF 缓解措施，但同源检查不是用户身份认证，原始 HTTP 客户端仍可直接调用。`/events` SSE 接口也没有连接数量限制或速率限制，每个连接都会保存在 `sseClients` 集合并维持 25 秒心跳。([raw.githubusercontent.com](https://raw.githubusercontent.com/vlln/whale-girl/main/lib/index.mjs))\n\n**风险程度：中高。** 若宿主 Web Server 已统一实施登录鉴权、仅绑定回环地址且限制连接数，实际风险会明显下降；如果监听局域网或公网而没有统一认证，则可能泄露任务和会话元数据，并遭受低成本连接耗尽攻击。\n\n## 风险点汇总\n\n1. **跨 Agent 读取过宽：** 主动绕过 owner fence，获取全部任务标签和状态。\n2. **会话元数据暴露：** `/sessions` 返回会话 ID、标题、工具活动和开始时间，插件层无鉴权。\n3. **只做 CSRF、未做身份认证：** POST 同源检查不能阻止直接 HTTP 调用。\n4. **SSE 缺少资源上限：** `/events` 没有连接数、用户或速率限制。\n5. **依赖锁文件漂移：** `package.json` 与 `pnpm-lock.yaml` 的 schemastery 声明不一致。\n6. **审计剩余项：** 开发脚本不是安装自动执行链，但在发布前仍应对 `scripts/build-client.mjs` 与 `scripts/gates/run.mjs` 正文做提交 SHA 固定后的复核。\n\n## 结论与使用建议\n\n**结论：存在风险，但没有证据表明该仓库是恶意插件。** 当前版本不应被描述为“用户可以完全放心使用”。\n\n明确建议如下：\n\n- **个人本机、DSH Web 仅绑定 `127.0.0.1`，且不与不可信用户共享：可以谨慎使用。**\n- **局域网多人环境：先确认宿主统一鉴权覆盖 `/whale-girl/*`，并限制 `/events` 连接数，再使用。**\n- **公网环境：当前状态不要直接使用。** 应先移除 owner fence 绕过、把会话标题改为脱敏聚合信息、为接口增加用户级授权和速率限制。\n- 安装时固定到已审查提交 `ecba322be408138fcc265588cacf00737154d31e`，不要长期使用可漂移的 `#main`。\n- 重新生成并提交一致的 pnpm 锁文件，通过冻结锁文件安装验证后再进入 MyDSH 发布流程。\n\n完成上述权限与依赖整改后，可以重新审查并考虑将结论提升为“通过”；在整改前应保持 `review`，不建议直接自动发布。\n","action":"review","reviewed_at":"2026-08-17T13:11:31.951182+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"Ikalus1988/MisakaNet","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-06-29T02:56:43Z","summary":"本地检索核心较干净，但远程上报、公开令牌与代理权限设计不宜默认信任","details":["维度1·代码执行：根 package.json 仅发布 SKILL.md 与 cordis.patch.yml，没有 scripts、bin、dependencies、preinstall 或 postinstall；cordis.patch.yml 也只有插件名称配置，installer.js 仅导出静态元数据。未发现 eval 或下载后直接执行的 curl|sh。风险主要来自知识库会向智能体返回社区贡献的命令，以及可选 fatal-guard 会按用户指令包装并启动目标 Node.js 进程；若宿主智能体自动执行检索结果，仍可能形成间接命令执行。风险程度：中。([github.com](https://github.com/Ikalus1988/MisakaNet))","维度2·数据外发：本地搜索模式可以离线运行，但远程 MCP intake、节点注册、使用反馈和 helpful 投票会把数据发送到 misakanet.org、Cloudflare KV 或 GitHub Issues。注册接口会提交 agent_type、node_name、invite_code；远程 intake 可提交 problem、error、what_tried、fix、verification。代码对部分来源标识做 SHA-256 截断，但这不能替代用户授权。没有证据表明安装后会自动上传，不过智能体工具具备主动上报能力。风险程度：中。([github.com](https://github.com/Ikalus1988/MisakaNet))","维度3·敏感读取：在已审查的安装元数据、Worker 和公开集成说明中，没有发现读取用户 ~/.ssh、~/.dsh、浏览器凭据或遍历本地环境 token 的逻辑；Worker 读取的是服务端 REGISTER_TOKEN、MAINTAINER_KEY 和 MISAKANET_KV。严重的工程问题是 SECURITY.md 明确记录曾将 GitHub PAT 以十六进制形式放入 docs/index.html 与 JOIN.md；编码不是加密，若令牌仍有效会被任何人还原。风险程度：用户侧低、项目基础设施侧中高。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/SECURITY.md))","维度4·依赖风险：根 npm 包没有第三方运行依赖和生命周期脚本，Python 主路径也声明使用标准库，本地搜索的传统供应链面较小。packages/fatal-guard 是独立的可选子包，没有被根包自动安装。仍建议发布前核对 package-lock.json、PyPI/npm 实际制品与 main 源码是否一致，尤其是仓库同时存在 server.mcpb 等打包制品。风险程度：低。([github.com](https://github.com/Ikalus1988/MisakaNet))","维度5·混淆或后门：已读 JavaScript 为正常可读源码，未发现 eval、Function 构造器、压缩混淆载荷或隐藏下载执行链；atob/btoa 用于解析 GitHub Base64 文件和更新计数器，具有可解释业务用途。公开 PAT 的 hex 编码属于错误的秘密管理方式，但目前证据不足以认定为后门。SKILL.md 和 server.mcpb 未能通过当前网页抓取获得完整内容，因此无法给出字节级同源保证。风险程度：低到中。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))","维度6·权限越界：Worker 暴露通用 /api/github/* GET 代理，把服务端 GitHub token 附加到调用方指定的任意 GitHub API 路径，并配有 Access-Control-Allow-Origin: *。此外 REGISTER_TOKEN 被代码注释要求具有 contents+issues write，公开注册入口可以代用户创建 Issue、修改 counter.json 并发表评论。这属于典型的令牌代理和权限漂移风险；一旦 token 实际授权范围扩大，公开端点可能成为访问额外 GitHub 数据的 confused-deputy。风险程度：中高。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：Ikalus1988/MisakaNet\n\n## 概述\n\n本次按 MyDSH 六维安全标准审查 MisakaNet。结论为：**未发现可将项目直接定性为恶意软件的证据，但当前版本不应作为“放心用、默认放行”的智能体插件发布。** 根 DSH 包本身非常轻量，没有 npm 生命周期脚本或第三方依赖；主要风险来自社区知识中的可执行命令、可由智能体调用的远程上报能力，以及 Cloudflare Worker 中过宽的 GitHub 令牌代理和公开写入设计。综合评分为 **46/100**，用户建议为 **谨慎用**，发布动作应为 **review**。\n\n## 评估对象\n\n- 仓库：`Ikalus1988/MisakaNet`\n- 默认分支：`main`\n- GitHub Repository API 返回的 `pushed_at`：`2026-06-29T02:56:43Z`\n- API 报告仓库规模约 6685 KB；当前仓库页面显示约 2068 次提交。顶层没有 `src/`、`lib/`，实际实现集中于 `misakanet/`、`scripts/`、`workers/`、`hub/` 和 `packages/fatal-guard/`。([]())\n- 时间证据存在冲突：`main` 提交页显示 2026 年 8 月 15 日还有提交，而 Repository API 的 `pushed_at` 较早。本报告按任务要求在 `updated_at` 字段保留 API 原始 ISO 值，同时以当前 `main` 页面可见内容进行代码判断；建议发布系统重新直连 GitHub API 校验该字段。([]())\n- 重点检查：`package.json`、`package-lock.json` 的存在性、`cordis.patch.yml`、`installer.js`、`SECURITY.md`、`README.md`、`misakanet/` 结构、DeepSeekHarness MCP 集成文档、`workers/register-proxy.js`、远程 MCP/注册流程及安装相关入口。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`cordis.patch.yml`、`installer.js`、README 安装命令、MCP 工具清单、Worker 动态执行特征。\n\n**发现：** 根 `package.json:1-14` 只声明包名、版本、仓库地址和发布文件 `SKILL.md`、`cordis.patch.yml`，没有 `scripts`、`bin`、依赖或 `preinstall/postinstall`。`cordis.patch.yml:1-2` 仅定义 schema 与名称；`installer.js:1-6` 只是静态对象导出。Worker 中也没有找到 `eval(`。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))\n\nMCP 文档列出的工具为搜索、读取 lesson、提交反馈、状态检查、doctor 和 smoke，没有通用 shell/exec 工具。风险不在安装阶段自动执行，而在于 lesson 本身包含修复命令；README 明确要求在沙箱中运行智能体并人工审查社区命令。若宿主允许智能体无确认执行检索到的 shell 指令，恶意或被污染的 lesson 可能形成间接代码执行。`fatal-guard` 还是一个会包装并启动目标 Node.js 进程的可选工具，但它没有被根包自动安装。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/docs/integration/deepseek-harness.md))\n\n**风险程度：中。**\n\n### 2. 数据外发\n\n**检查内容：** 远程 MCP、注册接口、反馈工具、helpful 投票、需求信号聚合、第三方域名。\n\n**发现：** 本地 `search_knowledge.py` 路径可以离线工作，但远程功能涉及 `misakanet.org`、`api.github.com`、`github.com` 以及 Cloudflare KV。README 给出的 `misakanet_submit_intake` 参数包括 problem、error、what_tried、fix、verification；这些内容最终会成为维护者可见的 GitHub Issue。项目提醒不要提交秘密或原始私有日志，但仅靠提示不能防止智能体误传。([github.com](https://github.com/Ikalus1988/MisakaNet))\n\n`workers/register-proxy.js` 的注册处理读取 `agent_type`、`node_name`、`invite_code`，拼装后创建公开 GitHub Issue；helpful 接口向 KV 写入 `lesson_id` 计数。需求聚合对 sourceId 做 SHA-256 后截取 16 个十六进制字符，并只保存分类与原因计数，这是正向的最小化设计，但仍属于外部遥测。没有发现安装即自动上传的证据，外发主要发生在显式注册、反馈或 intake 工具调用时。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))\n\n**风险程度：中。**\n\n### 3. 敏感信息读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境 token、浏览器凭据、用户主目录扫描及服务端秘密。\n\n**发现：** 已读安装入口和 Worker 没有读取用户 SSH、DSH 或浏览器凭据的逻辑；Worker 使用的是服务端环境变量 `REGISTER_TOKEN`、`MAINTAINER_KEY`、`MISAKANET_KV`。但 `SECURITY.md` 明确写明曾把一个细粒度 GitHub PAT 以十六进制形式放在 `docs/index.html` 与 `JOIN.md`，并建议周期轮换。代码片段证据为：`Hex-encoded in docs/index.html and JOIN.md`。十六进制只是一种编码，无法保护令牌；若仍有效，任何访问仓库的人都能还原并滥用其权限。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/SECURITY.md))\n\n此外，安全文档称公开 PAT 只能写 Issues，而 Worker 文件头要求 `REGISTER_TOKEN` 具有 `contents+issues write`，权限说明存在明显不一致。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/SECURITY.md))\n\n**风险程度：用户凭据读取为低；项目令牌管理为中高。**\n\n### 4. 依赖风险\n\n**检查内容：** npm 依赖、生命周期脚本、Python 依赖声明、可选子包、锁文件和打包制品。\n\n**发现：** 根 npm 包没有任何依赖和安装脚本，发布内容被限制为两个文件，因此传统 npm 供应链攻击面较小。README 和项目站点将 Python 搜索核心描述为标准库实现；`packages/fatal-guard` 是独立的零依赖可选产品，不属于根包的自动安装链。([misakanet.org](https://misakanet.org/))\n\n仓库存在 `package-lock.json`、`server.mcpb`、`server.mcpb.json` 等制品，但当前抓取未返回其完整内容，无法验证 MCPB 与源码是否可复现一致。发布前应重新生成 SBOM、比较 npm/PyPI/MCPB 制品哈希，并确认锁文件没有与 `package.json` 不一致的残留依赖。([github.com](https://github.com/Ikalus1988/MisakaNet))\n\n**风险程度：低，制品一致性待复核。**\n\n### 5. 混淆与后门\n\n**检查内容：** eval/Function、压缩混淆代码、Base64 载荷、隐藏下载器、动态模块加载和伪装秘密。\n\n**发现：** 已读 Worker 为正常可读源码，没有 `eval`。其中 `atob` 用来解码 GitHub Contents API 返回的 JSON，`btoa` 用来提交更新后的计数器，具有明确业务原因，不构成隐藏载荷。未发现反向连接、加密 C2、矿工、凭据窃取或下载后二次执行链。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))\n\n需要强调：把 PAT 做 hex 编码虽不是后门，但属于伪安全措施；同时 `SKILL.md` 和 `server.mcpb` 未能取得完整正文，无法确认 Skill 是否含有诱导智能体自动上报、自动执行命令或扩大工具授权的隐藏指令。因此不能给出“完整无后门”的绝对保证。\n\n**风险程度：低到中。**\n\n### 6. 权限越界\n\n**检查内容：** Worker token 权限、公开 API、路径约束、CORS、写操作和 MCP 工具权限。\n\n**发现：** `workers/register-proxy.js` 暴露了通用路径：`/api/github/* → api.github.com/*`，直接将客户端指定的剩余路径拼接成 GitHub API URL，并自动附加服务端 Bearer token。响应同时启用 `Access-Control-Allow-Origin: *`。即便当前代码只代理 GET，该设计仍会把服务端身份变成公开的 GitHub API 代理；如果 token 实际可读私有资源或未来扩大权限，外部调用者可能读取超出预期的数据。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))\n\n公开注册端点还会使用具备 contents 与 issues 写权限的 token 创建 Issue、读取并 PUT 更新 `counter.json`、发表评论。IP 限流只有单实例内存中的 30 秒窗口，无法替代身份认证、持久限流或严格权限分离。该实现违反最小权限原则，也造成安全文档与实际部署权限不一致。([github.com](https://github.com/Ikalus1988/MisakaNet/blob/main/workers/register-proxy.js))\n\n**风险程度：中高。**\n\n## 风险点汇总\n\n| 风险点 | 影响 | 建议 |\n|---|---|---|\n| 社区 lesson 含可执行命令 | 智能体可能把不可信文本转化为本地命令 | 禁止自动执行，逐次确认并使用沙箱 |\n| 远程 intake/反馈含错误上下文 | 可能误传路径、日志、账号或业务信息 | 默认关闭，上报前做秘密扫描和用户确认 |\n| 仓库记录公开 hex PAT | 令牌可被还原并滥用 | 立即撤销轮换，删除历史公开令牌 |\n| 通用 GitHub token GET 代理 | token 成为 confused-deputy，权限漂移后可泄露数据 | 删除通用代理，仅允许固定公开资源路径 |\n| 注册 token 同时具有 contents 与 issues 写权限 | 公开端点间接获得仓库写能力 | 分拆 token，注册只允许最小化 Issue 写入 |\n| SKILL.md/MCPB 未完成字节级核验 | 无法确认发布制品和源码完全一致 | 完成源码—制品哈希与指令审计后再 release |\n\n## 结论与使用建议\n\n**用户不能把该插件当作“放心用”的纯只读插件。** 目前没有恶意证据，本地检索部分可以使用，但必须满足以下条件：固定到已审查 commit；仅启用本地只读搜索和 lesson 读取；关闭自动注册、submit_feedback、remote intake 等外发能力；禁止智能体直接执行 lesson 中的命令；在隔离工作区和最低权限账号下运行。\n\n对于 MyDSH 上架，建议保持 `review`，不要直接 `release`。维护者至少应先撤销所有公开或 hex 编码 PAT、删除通用 `/api/github/*` 令牌代理、将读写 token 分离并严格限权、为所有远程上报增加明确用户确认和秘密脱敏，并验证 `SKILL.md`、`server.mcpb` 与公开源码完全同源。完成这些整改后，可重新审查并考虑降为“放心用”。\n","action":"review","reviewed_at":"2026-08-17T13:12:32.407176+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-at-file","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T10:53:00Z","summary":"未发现恶意行为，但路径暴露、授权依赖和发布版本混乱需先整改。","details":["维度1·代码执行：检查 package.json、cordis.patch.yml、build.mjs、src/ 和 lib/。项目未声明 preinstall、install、postinstall 等安装期脚本，也未发现 child_process、exec、spawn、curl|sh 或远程下载执行逻辑；但 lib/index.js:9048-9065 的内嵌 Schemastery 代码使用 new Function(expr) 动态生成校验函数。该表达式目前来自内部 Schema，不属于直接命令执行，但仍扩大了动态代码攻击面，风险较低。","维度2·数据外发：未发现 fetch、axios、WebSocket 或写死的第三方业务域名。当前源码明确采用路径引用模型，不把文件正文附加到消息；但 src/files.ts:86-90 生成包含宿主机绝对路径的 FileEntry，src/runtime.ts:58-66 将其返回客户端，src/client/index.ts:88-92、233-237 又保存并传给 openPath。远程控制台因此可获得用户名、磁盘挂载点和项目绝对目录等主机元数据，风险中等。","维度3·敏感读取：当前主流程使用 opendir、stat 枚举目录，没有在路径引用流程中直接调用 readFile；src/files.ts:56-90 也跳过了扫描过程中遇到的符号链接。不过默认忽略项主要覆盖 .git、node_modules、构建目录和常见编辑器目录，没有默认排除 .ssh、.dsh、.env、.npmrc、credentials 等敏感名称。当 Agent 的 cwd 是用户主目录或包含凭据的项目目录时，敏感文件名及路径仍可能显示在浏览器中，风险中等。","维度4·依赖风险：运行时依赖包含多个 link: 形式的 DSH 内部包，构建时又将部分内部依赖打入 lib，导致最终行为不能只通过 package.json 中的公开版本号复现。外部依赖由 pnpm-lock.yaml 固定，且没有安装期脚本，但发布标识存在明显不一致：package.json 和 dsh.plugin.json 显示 0.6.2，README 指示安装 v0.6.3，而 GitHub 当前可见最新标签为 v0.6.1，且没有正式 Release。该问题削弱了用户确认源码、标签和可执行 lib 是否属于同一构建的能力，风险中等。","维度5·混淆或后门：build.mjs 设置 minify:false 和 sourcemap:true，lib 仅包含 index.js、client.js、style.css 三个主要产物，代码整体可读；未发现加密载荷、超长 Base64、运行时解密、自删除、隐藏下载器或反调试逻辑。lib/index.js 较大主要是因为打包了内部依赖，属于审计成本问题而不是后门证据，风险较低。","维度6·权限越界：atFileSearch 接收客户端提交的 sessionId，src/typert.ts:18-41 根据该 ID 取得 Agent，src/index.ts:55-65 随后直接枚举该 Agent 的 cwd；代码中没有看到调用者身份与目标会话所有者的显式绑定检查。设置读取和 updateSettings 也是插件级共享接口。若外围 DSH Gateway 没有严格完成认证和会话归属校验，客户端可能枚举其他会话的目录结构或修改全局过滤规则。此外，src/defaults.ts:51-80 允许将用户输入直接编译为 RegExp，src/files.ts 在大量文件上反复执行，没有长度、复杂度或超时限制，可被灾难性回溯表达式拖住事件循环。该维度风险中高。"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查覆盖 `omdsh-dev/dsh-at-file` 的仓库结构、清单文件、宿主端源码、客户端源码、编译产物、依赖锁定文件及安装相关配置。未发现作者主动窃取文件、连接隐蔽第三方服务器、下载并执行脚本、植入持久化后门或混淆恶意载荷的证据。因此，该项目不应判定为恶意插件。\n\n但是，它目前仍不适合在公网暴露或多人共享的 DSH 环境中直接作为已通过安全认证的插件发布。主要原因是：服务端把宿主机绝对路径返回浏览器；远程接口依赖外围系统完成会话归属授权；默认过滤规则未覆盖常见凭据文件；用户正则表达式可能触发 ReDoS；源码、插件清单、README 与 Git 标签的版本标识不一致。综合评分为 **46/100**，属于标准中的中等风险区间。明确建议为：**谨慎用；单用户本地环境可在固定提交、限制控制台访问并确认构建产物一致后试用，多用户或公网环境整改前不要启用。**\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-at-file`\n- 评估分支：`main`；仓库页面的默认分支选择器指向 main，因此没有采用 master 回退。\n- 时间基准：GitHub Repository API 地址已尝试访问，但当前抓取通道没有返回可解析正文，无法诚实声称取得了 API 的秒级 `pushed_at`。JSON 中的 `2026-08-16T10:53:00Z` 是目前能够从 GitHub 页面独立核验的最新标签时间，不应被误解为已确认的 Repository API pushed_at；这项元数据不确定性本身也是本报告要求进入人工复核而非直接 release 的原因。\n- 仓库规模：约 12 个顶层文件或目录；`src/` 包含约 11 个宿主文件及 11 个客户端文件，`lib/` 有 3 个主要构建产物，测试目录约 8 个文件。仓库未发现独立 `scripts/` 目录或安装器文件。\n- 重点检查：`package.json`、`cordis.patch.yml`、`dsh.plugin.json`、`build.mjs`、`src/index.ts`、`src/runtime.ts`、`src/files.ts`、`src/typert.ts`、`src/contract.ts`、`src/defaults.ts`、`src/client/`、`lib/`、`pnpm-lock.yaml` 以及 README、标签和安装说明。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** package 生命周期脚本、Shell 命令、Node 子进程、动态执行、远程下载后执行以及编译产物中的等价逻辑。\n\n**发现：** `package.json:24-28` 仅包含 build、check、test 等开发脚本，没有 preinstall、install、postinstall 或 prepare；`cordis.patch.yml:1-5` 只声明添加 DSH 依赖；`build.mjs:1-34` 使用 Rollup、TypeScript 与 Svelte 编译，没有调用 Shell 或下载器。源码中没有发现 child_process、exec、spawn、curl|sh 等执行链。\n\n编译产物 `lib/index.js:9048-9065` 中存在 `new Function(expr)`，来源是打包进去的 Schemastery 校验代码。它将内部 Schema 编译成校验函数，不是直接执行用户提供的 JavaScript；但生产级插件仍应尽量避免不必要的动态代码生成，并对 Schema 来源保持封闭。\n\n**风险程度：低。**\n\n### 2. 数据外发\n\n**检查内容：** fetch、HTTP 客户端、WebSocket、遥测、硬编码域名、文件正文上传及宿主机信息传到浏览器的路径。\n\n**发现：** 未发现插件主动访问第三方业务域名。`src/index.ts:72-83` 和 `src/contract.ts:49-65` 表明当前设计只标记文件路径引用，不由插件读取或通过主机—客户端 RPC 传输文件正文。\n\n但是，`src/files.ts:86-90` 将绝对路径写入 FileEntry，`src/runtime.ts:58-66` 原样返回搜索结果，客户端 `src/client/index.ts:88-92` 保存绝对路径，并在用户操作时传给 `openPath`。这会让远程浏览器获知宿主机用户名、卷名、工作目录和目录层级。即使没有文件正文，该信息也属于不应默认跨越主机边界的环境元数据。\n\n**风险程度：中。** 建议 RPC 只返回相对路径或不可预测的文件 ID，由服务端维护 ID 与绝对路径的映射。\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境 Token、`.env`、npm 凭据、云厂商凭据及符号链接逃逸。\n\n**发现：** `src/files.ts:56-90` 使用 `opendir` 和 `stat` 枚举目录，并跳过扫描过程中遇到的符号链接；当前路径引用流程没有显示直接读取文件正文。\n\n不过，默认忽略列表主要覆盖版本控制、IDE、依赖和构建目录，未默认排除 `.ssh`、`.dsh`、`.env*`、`.npmrc`、`.netrc`、`credentials`、私钥扩展名等。当 Agent 的 cwd 被设置为用户主目录时，这些文件和目录的名称可能进入索引并显示在客户端。文件名本身可泄露凭据类型、账号体系和开发环境结构。\n\n**风险程度：中。** 应增加不可关闭的敏感路径基线，并在 cwd 为用户主目录、根目录或其他高风险目录时拒绝索引或要求二次确认。\n\n### 4. 依赖风险\n\n**检查内容：** 直接依赖、锁文件、安装脚本、内部 link 依赖、构建打包范围和版本可追溯性。\n\n**发现：** 项目使用 pnpm 锁文件固定外部依赖，没有安装期执行脚本。但多个 DSH 运行时依赖采用 `link:` 路径，构建时部分内部代码又被直接打入 `lib/index.js`。因此，用户不能仅根据 package.json 的版本范围判断最终可执行内容，必须核对提交、锁文件和 lib 哈希。\n\n发布标识存在明显冲突：`package.json:4` 和 `dsh.plugin.json:3` 为 0.6.2，README 安装说明使用 v0.6.3，但 GitHub 当前可见最新标签是 v0.6.1，并且没有正式 Release。该状态不能证明用户安装到的 lib 与审查源码来自同一提交。\n\n**风险程度：中。** 发布前应统一版本号、创建不可变标签和正式 Release，在 CI 中从标签重新构建 lib，生成 SBOM、依赖审计结果和 SHA-256 清单。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆、编码载荷、运行时解密、隐藏网络地址、自删除、反调试和源码—产物差异。\n\n**发现：** `build.mjs:23-25` 明确设置 `minify:false` 和 `sourcemap:true`，构建产物整体可读；没有发现大段 Base64、加密配置、隐藏下载器或自修改代码。lib 体积较大主要是打包内部依赖造成，并非恶意混淆的直接证据。\n\n**风险程度：低。** 仍应在 CI 中验证 lib 必须由同一提交确定性生成，禁止开发者手工提交无法复现的构建产物。\n\n### 6. 权限越界\n\n**检查内容：** 会话归属、跨 Agent 访问、设置修改权限、宿主文件操作和拒绝服务风险。\n\n**发现：** `src/typert.ts:18-41` 根据客户端提交的 sessionId 取得 Agent，`src/index.ts:55-65` 随后对该 Agent 的 cwd 执行索引；代码中没有看到调用者身份与 sessionId 所有者的插件级绑定检查。安全性完全依赖外围 DSH Gateway 是否已经做了身份认证、会话隔离和 RPC 授权。如果外围校验缺失或配置错误，调用者可能枚举其他会话的工作目录。设置接口同样是插件级共享状态，缺少可见的管理员权限检查。\n\n另外，`src/defaults.ts:51-80` 将用户规则直接传给 `new RegExp`；这些表达式会在目录扫描和匹配过程中对大量路径反复执行。代码只捕获语法错误，没有限制表达式长度、嵌套复杂度或执行时间。合法但具有灾难性回溯的表达式可能长时间阻塞 JavaScript 事件循环，形成 ReDoS。\n\n**风险程度：中高。** 必须增加服务端会话归属校验和设置管理员权限；过滤规则优先改为 glob，若保留正则，应使用安全正则检查、长度限制和 RE2 类无回溯实现。\n\n## 风险点汇总\n\n1. **宿主机绝对路径跨 RPC 返回客户端：** 可能泄露用户名、磁盘和项目目录结构。\n2. **会话授权依赖外围系统：** 插件未显示执行调用者与目标 sessionId 的服务端所有权绑定。\n3. **可配置正则缺少 ReDoS 防护：** 恶意或错误规则可能阻塞扫描线程。\n4. **敏感文件缺少安全默认过滤：** cwd 为主目录时可能暴露 `.ssh`、`.dsh`、`.env` 等名称。\n5. **版本和发布产物不可可靠追溯：** manifest、README、标签和 Release 状态不一致。\n6. **未发现恶意核心行为：** 没有直接文件正文外传、隐藏第三方网络请求、安装期脚本执行或混淆后门证据。\n\n## 结论与使用建议\n\n本插件**不是恶意插件**，但目前也不能对普通用户给出“放心用”的结论。单用户、本机、非公网的 DSH 环境可以在以下前提下谨慎试用：固定到不可变提交；确认 `lib/` 由该提交重新构建；不要把 Agent cwd 指向用户主目录；不要向不可信用户开放 DSH 控制台；只允许管理员修改过滤规则。\n\n在进入 MyDSH 官方推荐、多人服务器或公网部署前，维护者应完成五项整改：一是只向客户端返回相对路径或文件 ID；二是为搜索、设置和文件打开操作增加服务端身份及会话归属校验；三是增加敏感路径硬性过滤；四是消除可回溯正则或加入安全限制；五是统一版本号并提供可复现构建、正式标签、Release、SBOM 和产物哈希。整改完成并重新审计后，才适合将结论调整为“通过 / 放心用”。\n","action":"review","reviewed_at":"2026-08-17T13:16:26.537755+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"mnemon-dev/mnemon","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-16T08:17:56Z","summary":"未见恶意后门，但安装钩子、明文存储权限及依赖版本漂移需要先处理。","details":["代码执行：根 package.json 未定义 preinstall、install 或 postinstall，只通过 cordis.patch.yml 挂载 dsh-mnemon@0.1.0；但 Mnemon 的 setup 会向多种 Agent 配置目录部署可执行生命周期钩子，dsh-mnemon 运行器也会启动本地 mnemon 二进制。未发现 eval、curl|sh 或下载后直接执行远程代码；属于功能所需但权限较高的本地执行。","数据外发：核心默认使用本地 SQLite 和 localhost Ollama，不要求云端 API Key，也未发现隐藏遥测；但是嵌入端点可通过 MNEMON_EMBED_ENDPOINT 或 OLLAMA_HOST 指向远程 HTTP 服务，当前 dsh-mnemon 还支持 OpenViking、Honcho、Mem0、Hindsight、RetainDB、Supermemory 等远程 Provider。启用后，记忆内容会按功能需要发送至用户配置的服务，且普通 HTTP 不提供传输加密。","敏感读取：Mnemon 的核心数据是跨会话记忆，数据库会保存事实、偏好、关系及来源；DSH 集成还会处理 Runtime、USER.md、MEMORY.md、Documents 和会话归档。未发现读取 ~/.ssh 私钥或静默搜集 ~/.dsh 全局凭据的证据；但项目明确没有 secret scanner，用户若把令牌、密码或私密内容写入会话，可能被持久化或在启用远程 Provider 后外发。","依赖风险：根 npm 包本身是薄包装，固定依赖 dsh-mnemon@0.1.0，而其公开源码仓库当前 package.json 已为 0.2.4；这意味着实际安装版本与当前可审查源码存在明显版本漂移。核心 Go 依赖均在 go.mod 固定版本，当前检查未发现所用版本命中明确的未修复 OSV 公告，但发布前仍应核验 npm 0.1.0 tarball、完整性哈希和 SBOM。","混淆或后门：审阅到的 Go、TypeScript、YAML、Shell 和包清单均为可读源码，未发现大段 Base64、动态 eval、反向 Shell、挖矿、隐藏下载器或可疑域名。需要注意 dsh-mnemon 的 lib/ 为发布时生成且不提交仓库，安全政策也承认审计应以 npm tarball 为准，因此仅审查 GitHub HEAD 不能完全证明发布包与源码一致。","权限越界：setup 会修改 Claude Code、Codex、Cursor、OpenCode、Trae、OpenClaw、Hermes 等工具的配置或插件目录，并生成 0755 的可执行钩子；默认 SQLite 文件权限为 0644，在共享主机上可能被其他本地账户读取。项目不会自动删除远程 Provider 中的数据，卸载插件也不等于删除记忆。该行为并非隐蔽越权，但默认边界不够严格，不建议未经检查直接部署到多人共用或包含生产凭据的工作站。"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查覆盖 `mnemon-dev/mnemon` 的 `master` 分支、Go 核心、安装与 Agent 集成代码、根目录 DSH 包装清单，以及包装包实际指向的 `dsh-mnemon` 集成项目。综合结论为：**没有发现木马、窃密后门、挖矿、混淆加载器或隐藏遥测，但当前版本不适合不经配置直接作为“放心安装”的生产插件使用。**主要问题不是确认的恶意行为，而是记忆数据本身高度敏感、安装程序会部署自动执行钩子、数据库默认权限偏宽、远程 Provider 可外发记忆，以及根包装包和实际依赖源码存在版本漂移。\n\n**明确建议：谨慎用。**单用户、本地 Ollama、远程 Provider 全部关闭，并在安装前核验 npm tarball 的场景可以使用；共享服务器、企业生产终端或会话中经常出现密钥的环境，应先完成权限和供应链整改。\n\n## 评估对象\n\n- 仓库：`mnemon-dev/mnemon`\n- 默认分支：`master`\n- GitHub 元数据快照时间：`2026-08-16T08:17:56Z`\n- 规模：约 1,380 次提交；主体为 Go 单二进制，同时包含 `cmd/`、`internal/`、`setup/`、`scripts/`、`webapp/`、`package.json` 和 `cordis.patch.yml`。最新公开 Go 模块版本为 v0.2.3，发布于 2026-08-16。\n- DSH 安装链：根 `package.json:1-31` 是薄包装包 `@mnemon-dev/dsh-mnemon@0.1.0`，不包含 `src/` 或 `lib/`，通过 `cordis.patch.yml` 挂载，并固定依赖 `dsh-mnemon@0.1.0`。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：**根 `package.json`、`cordis.patch.yml`、`cmd/setup.go`、安装脚本、Agent hooks、dsh-mnemon 的 `runner.ts`、`process.ts` 和发布脚本。\n\n**发现：**根包没有 `preinstall`、`install` 或 `postinstall`，因此安装 npm 包时未发现自动运行 Shell 的生命周期钩子。dsh-mnemon 当前源码只有 `prepublishOnly`，用于发布前构建，不会在普通安装阶段执行。然而 Mnemon 的功能设计需要安装 Agent 生命周期 hooks：setup 会把脚本写入多个 Agent 的配置目录，运行期间由宿主自动调用 `mnemon inject`、`capture` 等本地命令。dsh-mnemon 还会启动和管理本地 Mnemon 进程。\n\n**证据：**`package.json:10-17`；`cmd/setup.go:113-116,190-206`；`dsh-mnemon/package.json:23-32`；`SECURITY.md:44-49,94-109`。核心安全说明确认 hooks 为 0755 可执行文件，但不使用提权、sudo 或 setuid。\n\n**风险程度：中等。**属于产品能力所需的显式本地执行，不是隐藏远程代码执行；但钩子会随会话生命周期自动运行，应视为高信任组件。\n\n### 2. 数据外发\n\n**检查内容：**嵌入端点、HTTP Provider、Hub/远程同步、遥测声明和环境变量配置。\n\n**发现：**默认链路是本地 SQLite 与 `localhost:11434` Ollama，核心不要求云端 API Key，也未发现崩溃遥测或未知统计域名。风险来自可配置能力：`MNEMON_EMBED_ENDPOINT`、`OLLAMA_HOST` 可指向远程服务，且项目明确说明普通 HTTP 不加密。当前 dsh-mnemon 还实现多个远程 Provider；Provider 默认关闭，但启用后会发送需要归档或检索的记忆内容。\n\n**证据：**`.env.example:2-11`；`README.md:200-204`；`SECURITY.md:61-72`；`dsh-mnemon/README.md:100-107,184-194,222-227,305-311`。\n\n**风险程度：中等、条件触发。**保持默认本地端点时没有隐藏外发；配置远程 Provider 或远程 Ollama 后，应按真实数据出境处理。\n\n### 3. 敏感读取\n\n**检查内容：**`~/.ssh`、DSH 凭据、环境 Token、会话内容、数据库、Provider 凭据和存储权限。\n\n**发现：**未发现代码主动扫描 `~/.ssh`、读取 SSH 私钥或批量收集系统 Token。项目会读取和持久化 Agent 会话中形成的事实、偏好和关系，这正是其核心功能。DSH 集成可访问 Runtime、`USER.md`、`MEMORY.md`、Documents 和会话归档；Provider 凭据写入本地配置并使用 0600，但项目没有 secret scanner，因此会话中的密钥可能作为普通记忆内容保存。\n\n**证据：**`README.md:124-149`；`dsh-mnemon/README.md:241-243,305-311,331-337`；`dsh-mnemon/SECURITY.md:49-60`。\n\n**风险程度：中等。**不是窃取型读取，但处理的数据高度敏感，不能把该插件当作无状态 UI 插件。\n\n### 4. 依赖风险\n\n**检查内容：**根 npm 依赖、dsh-mnemon 依赖、Go 模块、锁文件、发布产物与源码对应关系。\n\n**发现：**核心 Go 依赖固定在 `go.mod`，包括 Cobra、UUID、SQLite 和终端库；本次没有发现这些实际固定版本命中明确的未修复 OSV 漏洞。dsh-mnemon 当前依赖数量可控，并提交 pnpm 锁文件。主要问题是根包装包固定 `dsh-mnemon@0.1.0`，而公开源码当前已为 0.2.4；安全政策又表示通常只支持最新发布版本。用户实际安装的是旧 tarball，而不是 GitHub HEAD。\n\n**证据：**根 `package.json:15-17`；`go.mod:5-22`；`dsh-mnemon/package.json:3-5,61-80`；`dsh-mnemon/SECURITY.md:7-11,64-67`。\n\n**风险程度：中等。**未发现恶意依赖，但存在版本漂移和发布物不可完全复核的问题。\n\n### 5. 混淆与后门\n\n**检查内容：**eval、动态模块加载、大段编码数据、反向 Shell、挖矿、隐藏下载器、未知域名和生成产物。\n\n**发现：**审阅到的 Go、TypeScript、YAML 和 Shell 均保持正常可读结构，未发现 `eval`、大段 Base64、恶意混淆、反向连接或矿池地址。安装流程也没有 `curl|sh`。需要保留的审计缺口是：dsh-mnemon 的 `lib/` 为发布时生成且不提交仓库，实际 npm tarball 才是最终执行物。\n\n**证据：**`dsh-mnemon/package.json:18-32`；`dsh-mnemon/SECURITY.md:64-67`；根 `package.json:1-31`。\n\n**风险程度：低到中等。**没有恶意证据，但发布产物与仓库源码的一致性必须补验。\n\n### 6. 权限越界\n\n**检查内容：**配置目录写入、文件权限、自动 hooks、数据删除和远程状态残留。\n\n**发现：**setup 支持 Claude Code、Codex、Cursor、OpenCode、Trae、OpenClaw、Hermes 等多个宿主，会修改对应配置或插件目录。核心数据库默认模式为 0644，在多人共用 Unix 主机上可能被其他账户读取；hooks 使用 0755。项目不使用 sudo，但卸载插件不会自动删除本地或远程记忆数据。\n\n**证据：**`README.md:57-103`；`SECURITY.md:29-49,85-86`；`cmd/setup.go:88-116,183-206`；`dsh-mnemon/README.md:370`。\n\n**风险程度：中等偏高。**没有提权行为，但默认权限和写入范围不符合最小权限原则。\n\n## 风险点汇总\n\n1. `~/.mnemon/memory.db` 默认 0644，记忆数据库可能被同机其他账户读取。\n2. setup 会安装自动执行的 Agent hooks，等同于授予插件长期本地执行能力。\n3. 远程嵌入端点和 Provider 可发送敏感记忆；HTTP 端点缺少传输加密。\n4. 不提供 secret scanner，输入会话的令牌和密码可能被正常持久化。\n5. 根包固定旧版 `dsh-mnemon@0.1.0`，而当前源码为 0.2.4，存在供应链版本漂移。\n6. npm `lib/` 发布产物不在仓库中，尚缺 tarball 与源码的一致性证明。\n7. 卸载不会自动清理本地数据库或远程 Provider 数据。\n\n## 结论与使用建议\n\n**最终结论：存在风险，建议谨慎用，不应标记为“放心用”。**目前没有证据支持将其判为恶意，也没有发现隐蔽窃密或后门。对于个人单用户电脑，可以在满足以下条件后使用：远程 Provider 默认关闭；只连接 localhost Ollama；把数据库权限收紧为 0600；安装前检查将被修改的 Agent 配置；下载并审查 `dsh-mnemon@0.1.0` 的 npm tarball及哈希；避免在会话中输入真实密钥。\n\n在共享服务器、受监管环境或生产凭据密集的开发机上，完成上述整改前不要直接部署。MyDSH 的推荐处置为 `review`：保留展示但明确警示，不自动进入完全可信名单。\n","action":"review","reviewed_at":"2026-08-17T13:25:10.699171+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"Fishquito7/dsh-skill-viewer","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T14:13:07Z","summary":"未见恶意后门，但高权限文件操作、安装脚本与范围校验仍需复核。","details":["代码执行：检查 package.json、lib/index.js、lib/client.js、scripts/ 构建入口及安装说明。运行时代码未发现 eval、Function、child_process、exec、spawn、curl|sh 或静默命令执行；但 Git 来源安装存在 prepare 构建脚本执行路径，CLI 的 update 命令会主动更新插件。推荐使用固定版本 tarball，而不是直接安装可变 main。","数据外发：插件核心服务主要通过 DSH 网关 RPC 和本地文件系统工作，未发现上传 SKILL.md、令牌或用户目录内容到第三方的逻辑。安装和用户显式执行 dsh-skill update 时会连接 GitHub，第三方可获得常规网络元数据，但没有证据表明技能正文会被发送。","敏感读取：预期扫描 ~/.dsh/skills、~/.agents/skills、工作区 .dsh/skills、SKILL.md 和 skill.json；未发现读取 ~/.ssh、云凭据文件或环境 token。代码仅使用 DSH_AGENTS_HOME 确定技能根目录。扫描器会遍历符号链接目录，虽然内容读取另有 realpath 边界检查，列表阶段仍可能解析链接目标中的技能元数据。","依赖风险：直接依赖面较小，主要为 zod、typert 和 Cordis peer dependency；但版本范围未完全锁死，仓库根目录未见公开锁文件或 SBOM，Git 安装还涉及构建生命周期。发布前应固定依赖、公开完整性哈希并执行依赖漏洞扫描。","混淆与后门：TypeScript 源码与编译后的 lib/*.js 同时提交，代码结构可读；未发现大段 Base64、加密字符串表、动态下载执行、反调试、隐藏定时任务或混淆控制流。客户端对可变内容使用转义或 textContent，未看到明显的脚本注入后门。","权限越界：插件能够新增、重命名、复制、移动和递归删除技能文件，权限本身较高。可检索的 scope 实现会接受任意存在的 workspace 路径，而不只接受 DSH 已登记工作区；如果 RPC 调用者可自行构造参数，可能读写其他可访问目录下的 .dsh/skills。上传路径虽有 ..、绝对路径、符号链接、覆盖写入、文件数量和大小防护，但工作区服务端白名单仍需补强。"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：Fishquito7/dsh-skill-viewer\n\n## 概述\n\n本次审查结论为 **存在风险，建议谨慎使用，暂不直接进入免复核发布状态**。仓库中没有发现恶意后门、凭据窃取、静默远程命令执行或技能内容外传逻辑；主要风险来自插件具备真实的本地文件增删改权限、Git 来源安装会进入构建脚本路径，以及服务端工作区范围限制缺少充分的强制证明。\n\n该插件不是只读查看器：它会真实修改磁盘上的 `SKILL.md`，能够启用、停用、添加、删除、复制和移动技能，因此一旦 DSH 网关被非可信用户访问，影响范围明显大于普通界面插件。仓库 README 也明确说明这些操作会直接作用于全局与工作区技能目录。([github.com](https://github.com/Fishquito7/dsh-skill-viewer))\n\n## 评估对象\n\n- **仓库**：Fishquito7/dsh-skill-viewer\n- **评估分支**：`main`\n- **分支最后推送时间**：`2026-08-16T14:13:07Z`\n- **仓库规模**：主分支页面显示 53 次提交，根目录包含 `assets/`、`examples/`、`lib/`、`scripts/`、`src/` 及 package、Cordis 配置和三组测试文件。([github.com](https://github.com/Fishquito7/dsh-skill-viewer))\n- **重点检查对象**：`package.json`、`cordis.patch.yml`、`src/`、`lib/index.js`、`lib/client.js`、`lib/scope.js`、`lib/skill-files.js`、`scripts/`、README 中的安装和更新流程。\n\n审计期间 GitHub 页面存在缓存版本差异：README 已描述 0.7.0 功能，而部分可检索的 package/lib 文件快照仍为较早构建。因此下述代码行号对应本次能够取证的 `main` 文件快照；在正式放行前，仍应针对 `pushed_at` 对应的精确提交 SHA 再做一次可复现审计。这一版本可追溯性问题也是本报告不直接判定“通过”的原因之一。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` 生命周期脚本、`lib/index.js` 和 `lib/client.js` 导入项、`scripts/` 构建辅助脚本、CLI 安装与更新说明。\n\n**发现**：插件核心运行时代码使用 Node.js 文件系统、路径和操作系统模块，未发现 `eval`、`new Function`、`child_process.exec/spawn`、`curl | sh`、下载后执行或隐藏 shell 命令。`cordis.patch.yml:1-7` 仅把 skills 服务注册进网关控制台，没有声明额外系统命令。\n\n`package.json:15-19` 的可检索快照包含 build/prepack 构建流程；当前 README 进一步说明，从 Git 来源安装时可能运行 prepare 构建脚本，而发行版 tarball 可避开该路径。CLI 还提供用户显式触发的 `dsh-skill update`。这些不等同于后门，但属于安装阶段代码执行面。README 推荐发行版 tarball，并明确列出了更新命令。([github.com](https://github.com/Fishquito7/dsh-skill-viewer))\n\n**风险程度**：低到中。固定版本 tarball 安装风险较低；不应直接信任持续变化的 main 或无哈希 Git 安装。\n\n### 2. 数据外发\n\n**检查内容**：第三方域名、HTTP 客户端、fetch/axios、遥测、版本检查和上传逻辑。\n\n**发现**：核心服务端与客户端未发现把技能正文、目录列表、环境变量或凭据发送至第三方的代码；界面主要调用 DSH 网关内的 skills RPC。外部访问集中在安装和用户主动执行更新时连接 GitHub。没有发现把 `SKILL.md` 内容作为更新请求参数发送的证据。\n\n**风险程度**：低。对网络隐私敏感的环境可禁用或避免更新检查，并通过离线固定包部署。\n\n### 3. 敏感读取\n\n**检查内容**：`~/.ssh`、`~/.dsh` 凭据、环境 token、技能目录扫描、符号链接处理。\n\n**发现**：代码会按功能需要读取 `~/.dsh/skills`、`~/.agents/skills`、工作区 `.dsh/skills`、`SKILL.md` 和 `skill.json`。`lib/index.js:224-229` 只读取 `DSH_AGENTS_HOME` 来确定目录，没有读取 token、API Key 或 SSH 私钥。`lib/index.js:260-272` 在返回完整内容前使用 `realpath` 检查文件是否仍位于技能根目录内。\n\n需要注意的是，`lib/skill-files.js:52-76` 会将符号链接目录加入递归扫描。即使后续完整内容读取和变更操作有 realpath、lstat 防护，列表扫描阶段仍可能解析链接目标下 `SKILL.md` 的名称和描述元数据。最安全的处理方式是扫描阶段直接跳过所有符号链接。\n\n**风险程度**：中低。未发现凭据窃取，但符号链接元数据边界应继续收紧。\n\n### 4. 依赖风险\n\n**检查内容**：直接依赖、peer dependency、锁文件、生命周期脚本和发布完整性。\n\n**发现**：直接代码依赖面较小，主要使用 zod、typert，并依赖 Cordis 宿主。未发现可疑私有包名或拼写仿冒依赖。但版本范围采用兼容区间，根目录未见公开 lockfile、SBOM、签名发布证明或 SHA-256 清单，Git 安装还可能触发构建生命周期。\n\n**风险程度**：中低。建议发布固定依赖快照、SBOM、发行包哈希和签名 tag，并在 CI 中运行依赖漏洞与恶意生命周期脚本扫描。\n\n### 5. 混淆与后门\n\n**检查内容**：Base64/十六进制载荷、动态代码构造、字符串表、隐藏下载器、异常定时任务、压缩混淆代码和客户端注入点。\n\n**发现**：源码和编译产物结构清晰，TypeScript 位于 `src/`，`lib/*.js` 作为可审计构建产物提交，README 也说明两者的关系。([github.com](https://github.com/Fishquito7/dsh-skill-viewer)) 未发现加密载荷、动态执行、反调试、隐藏控制服务器或伪装遥测。`lib/client.js:35-39` 定义 HTML 转义，技能正文展示路径使用 `textContent`，未发现故意执行技能 Markdown 中脚本的行为。\n\n**风险程度**：低。没有恶意或后门特征。\n\n### 6. 权限越界\n\n**检查内容**：路径规范化、工作区边界、上传文件名、覆盖写入、符号链接、删除和迁移权限。\n\n**发现**：上传防护整体较好：`lib/index.js:55-81` 拒绝绝对路径、`..`、NUL、冒号和符号链接父目录，使用 `wx` 防覆盖，并在支持的平台加入 `O_NOFOLLOW`；`lib/index.js:202-215` 验证技能名和上传内容；`lib/index.js:429-477` 限制文件数量与单文件大小，并在失败后回滚。删除、启停和迁移也会重新验证条目存在性和目录边界。\n\n主要问题是 `lib/scope.js:42-57` 的 `normalizeWorkspace` 接受调用方给出的任意现存目录，`lib/scope.js:98-107` 再把它转换为工作区技能根和分组配置位置。若 Web RPC 调用者能够绕过页面下拉框直接构造 workspace 参数，便可能在 DSH 进程有权限访问的任意目录下读取或写入 `.dsh/skills`，而不必是宿主登记的工作区。这属于服务端授权边界不足，不能只依靠前端限制。\n\n**风险程度**：中。应将 workspace 的 canonical realpath 与 DSH 已登记工作区白名单逐一比对；Web 端不应接受任意路径。CLI 如确需任意路径，应与 Web RPC 使用不同入口和权限策略。\n\n## 风险点汇总\n\n| 风险点 | 影响 | 建议 |\n|---|---|---|\n| Web 服务端工作区未证明强制白名单 | 可能访问非登记目录中的 `.dsh/skills` | 仅允许宿主返回的 canonical workspace；CLI 与 Web 权限分离 |\n| 插件具备真实删除、重命名和迁移权限 | 错误操作可直接破坏技能文件 | 操作前备份；删除使用隔离区或可恢复回收机制 |\n| 符号链接目录参与扫描 | 可能暴露技能名称、描述等元数据 | 扫描阶段直接拒绝 symlink，而非读取后再校验 |\n| Git 安装存在 prepare 构建路径 | 安装时执行仓库代码 | 使用固定版本 tarball、校验哈希、禁止安装可变 main |\n| 缺少公开 lockfile、SBOM 与签名证明 | 依赖漂移和供应链复现能力不足 | 发布 SBOM、锁文件、SHA-256 和签名 tag |\n| 本次取证存在 GitHub 页面缓存版本差异 | 无法对最新 HEAD 做完全可复现放行 | 以 pushed_at 对应提交 SHA 重新拉取并审计全部源码 |\n\n## 结论与使用建议\n\n**用户不能把该插件理解为可以无条件放心安装的纯展示组件。** 它没有表现出恶意行为，核心路径也包含较完善的文件名、目录穿越、覆盖写入、大小限制和失败回滚措施，但它拥有实际文件管理权限，并且服务端工作区范围、符号链接扫描和供应链可复现性仍需要复核。\n\n建议仅在以下条件下使用：\n\n1. 仅部署在本机或可信单用户 DSH 网关，不暴露给公网或不可信多租户；\n2. 安装固定版本发行包并校验哈希，不直接跟随 `main`；\n3. 安装前备份 `~/.dsh/skills` 与各工作区 `.dsh/skills`；\n4. 暂不允许插件操作含符号链接的技能目录；\n5. 在服务端加入工作区 realpath 白名单后，再考虑 MyDSH 正式 release。\n\n因此，本报告给出的明确建议是：**可以在隔离、备份、固定版本且只有可信用户的环境中谨慎使用；不建议在公网共享网关或重要生产技能目录中直接使用。**\n","action":"review","reviewed_at":"2026-08-17T14:17:37.012071+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"Awu12277/dsh-stock-watch","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T13:20:32Z","summary":"未见恶意代码，但远程脚本、技能自动注入和智能体扩权需要整改","details":["代码执行：package.json 未定义 preinstall、install、postinstall 或其他 scripts，也未声明 npm 依赖；index.js 未发现 child_process、exec、eval、curl|sh。主要风险是 client.js 会动态创建 script 标签，从 unpkg 和 jsDelivr 执行 Lightweight Charts 4.2.3，虽固定版本但没有 SRI 完整性校验。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/package.json))","数据外发：Host 端把股票代码发送到 web.ifzq.gtimg.cn 的腾讯财经分钟和 K 线接口；浏览器还会连接 unpkg.com 或 cdn.jsdelivr.net。点击投资研究功能后，公司名称和股票代码会进入新建的 DSH 会话，并可能继续发送至用户配置的模型供应商。未发现向未知域名上传文件、凭据或环境变量。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))","敏感读取：插件读取 ~/.stocking/settings.json 迁移自选股配置，并读取包内股票池；未发现访问 ~/.ssh、~/.dsh、云凭据、浏览器 Cookie或通用 TOKEN。环境变量仅用于关闭技能注入或修改技能目录。但 /config 响应会返回配置来源路径和自选股分组，若 DSH Web 对外暴露，可能泄露本机路径和投资关注信息。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))","依赖风险：npm 包没有第三方依赖和安装生命周期脚本，scripts 目录也未列入 package.json 的发布 files，降低了安装期供应链风险；但图表库在运行时从两个公共 CDN 下载并直接执行，缺少本地打包、哈希或 SRI 校验，CDN、域名劫持或上游同版本内容异常均可影响 DSH 页面。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/package.json))","混淆与后门：核心代码为可读 JavaScript，index.js 520 行、client.js 1435 行；未发现 eval、Function 构造器、编码载荷、动态解密、反调试、隐蔽进程启动或凭据收集逻辑。外部域名、文件路径和系统提示均以明文出现，暂未见恶意后门迹象。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))","权限越界：插件每次启动都会尝试把 investment-research 和 frontend-design 复制到 ~/.agents/skills，并写入 _user_meta.json；同时向 DSH 全局 systemPrompt 注册条件式指令，让以“分析”开头的上市公司请求调用这两个技能。客户端还能自动创建会话并排队发送提示词。这些行为已在 README 披露且可通过 DSH_STOCK_WATCH_NO_SKILLS=1 禁用，但明显超出单纯行情展示权限，可能间接触发联网研究和工作区文件生成。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次对 `Awu12277/dsh-stock-watch` 当前默认分支进行了静态安全审查。结论是：**未发现窃取凭据、执行系统命令、下载后门或隐藏外传等恶意行为，但不建议用户在未经配置的生产环境中直接放心启用。** 风险主要不是传统木马，而是运行时加载第三方 JavaScript、启动时修改用户智能体技能目录、注册全局系统提示，以及行情接口缺少插件自身的访问控制和请求限额。这些行为均与产品功能相关并有一定披露，因此不能判定为恶意，但其权限范围已超过普通行情 UI 插件。([github.com](https://github.com/Awu12277/dsh-stock-watch))\n\n## 评估对象\n\n- 仓库：`Awu12277/dsh-stock-watch`\n- 默认分支：`main`\n- 分支最后推送时间：`2026-08-17T13:20:32Z`\n- 包版本：`1.0.7`\n- 核心规模：`index.js` 520 行，`client.js` 1435 行、约 74.9 KB；另有 `data/`、2 个本地测试脚本和 2 个随包技能目录。仓库当前没有 `src/`、`lib/` 或独立安装 Shell 文件，运行入口位于根目录。\n- 安装方式：`cordis.patch.yml` 仅将 `dsh-stock-watch` 注册进 DSH bundle；浏览器模块由 `package.json` 的 `dsh.client` 声明挂载。([github.com](https://github.com/Awu12277/dsh-stock-watch))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`cordis.patch.yml`、`index.js`、`client.js` 及 scripts 目录入口。\n\n**发现：** `package.json:1-43` 没有 `scripts`、依赖项或 `preinstall/install/postinstall`；`index.js` 未发现 `child_process`、`exec/spawn`、`eval`、`curl|sh`。两个 scripts 文件未被列入发布文件，也没有安装生命周期会自动调用它们。正向证据说明安装阶段不存在直接执行命令链。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/package.json))\n\n但 `client.js` 的图表加载函数包含：`const sources = ['https://unpkg.com/...4.2.3...', 'https://cdn.jsdelivr.net/...4.2.3...']`，随后设置 `s.src` 并执行 `document.head.appendChild(s)`。这等同于在 DSH 页面上下文执行远端 CDN 返回的 JavaScript。版本虽然固定，但没有 `integrity` 和 `crossorigin` 校验。\n\n**风险程度：中。** 未发现本地命令执行，但存在浏览器运行时远程代码供应链风险。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/client.js))\n\n### 2. 数据外发\n\n**检查内容：** 所有硬编码 URL、Node `fetch`、浏览器 `fetch`、会话创建及提示词发送逻辑。\n\n**发现：** `index.js:60-61` 仅定义腾讯财经的分钟行情与前复权 K 线接口；`index.js:174-177` 使用原生 `fetch`，12 秒超时，发送内容主要为股票代码、周期和数量。浏览器业务 API 使用 `/dsh-stock-watch/*` 同源路径。第三方域名包括 `web.ifzq.gtimg.cn`、`unpkg.com`、`cdn.jsdelivr.net`，未发现陌生统计、广告、Webhook 或文件上传域名。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))\n\n`client.js` 的投资研究按钮会创建新 DSH 会话并发送 `分析{公司名}（代码）`。因此公司名和股票代码会进入 DSH 会话，并可能由用户配置的云模型供应商处理。这是显式功能，但用户应理解其并非完全本地行情查看。\n\n**风险程度：中。** 没有隐蔽外传，但存在预期的腾讯行情访问、CDN访问和智能体模型调用。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/client.js))\n\n### 3. 敏感读取\n\n**检查内容：** `homedir()`、`readFile`、环境变量、凭据目录和浏览器存储访问。\n\n**发现：** `index.js:118-153` 读取 `~/.stocking/settings.json`，内容为自选股分组、代码和目标价格；同时读取包内 `data/a_stocks.json`。未发现访问 `~/.ssh`、`~/.dsh`、Git 凭据、云厂商配置、浏览器 Cookie或环境 TOKEN。环境变量仅使用 `DSH_STOCK_WATCH_NO_SKILLS` 和 `DSH_STOCK_WATCH_SKILLS_DIR`，分别控制是否注入技能及目标目录。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))\n\n需要注意 `/dsh-stock-watch/config` 会把 `groups`、`source` 和本地 `path` 返回给浏览器。如果 DSH Web 被错误暴露到公网或未可信局域网，访问者可能获得用户关注股票以及包含用户名的主目录路径。\n\n**风险程度：低至中。** 没有凭据读取，但存在投资偏好和本机路径的隐私面。\n\n### 4. 依赖风险\n\n**检查内容：** npm dependencies、lockfile、生命周期脚本、发布文件和运行时加载模块。\n\n**发现：** npm manifest 没有 dependencies/devDependencies，不依赖庞大的安装期依赖树，也没有 `package-lock.json` 必须校验的问题。`files` 白名单仅发布核心代码、数据、截图、技能和许可证，scripts 不随 npm 包发布。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/package.json))\n\n主要依赖风险来自 `lightweight-charts@4.2.3` 的运行时 CDN加载。固定版本优于 `latest`，且失败时可以回退 SVG，但固定版本不能替代内容哈希：如果 CDN 或传输链受到控制，恶意脚本可读取同源页面数据、调用 DSH 前端服务或篡改用户操作。\n\n**风险程度：中。** 建议将图表库打包进插件，或至少增加 SRI 和严格 CSP。\n\n### 5. 混淆与后门\n\n**检查内容：** 编码载荷、压缩混淆、动态函数构造、隐藏网络地址、反调试和异常持久化逻辑。\n\n**发现：** 核心源码为结构清晰的 JavaScript，外部域名、文件写入位置、系统提示和会话调用均以明文出现。未发现 `eval`、`Function()`、Base64 二阶段载荷、WebAssembly载荷、隐蔽子进程、反向连接或凭据采集。股票数据清洗、超时和错误降级逻辑也与功能目标一致。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/client.js))\n\n**风险程度：低。** 当前没有证据表明仓库包含恶意后门。\n\n### 6. 权限越界\n\n**检查内容：** 文件系统写入、全局智能体行为修改、会话控制、路由权限和资源消耗边界。\n\n**发现一：技能目录写入。** `index.js:22-58` 在插件启动时调用 `ensureUserSkills()`，递归复制 `investment-research` 和 `frontend-design` 到 `~/.agents/skills/`，并写入 `_user_meta.json`。当目标目录已有 `SKILL.md` 时会跳过，且可用 `DSH_STOCK_WATCH_NO_SKILLS=1` 禁用；但默认仍是未经单独确认便修改用户级智能体能力。如果目录已存在但缺少 `SKILL.md`，`copyFileSync` 仍可能覆盖同名辅助文件。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))\n\n**发现二：全局提示注入。** `index.js:500-517` 注册 `dsh-stock-watch.analysis` 系统提示，使任何以“分析”开头且被识别为上市公司分析的请求依次调用投资研究和前端设计技能。该规则不仅作用于插件按钮，还会影响其他会话中的匹配请求。生成网站的技能可能进一步使用联网搜索和工作区写入能力。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/index.js))\n\n**发现三：会话与请求放大。** `client.js` 可以创建新会话并以 queue 模式发送提示词。行情 `/quotes` 路由接受客户端提供的 groups，代码中没有明确的股票数量上限和插件级速率限制，随后会通过 `Promise.all` 并发请求腾讯接口。若宿主没有统一认证和限流，可能被滥用为请求放大或造成服务资源耗尽。([github.com](https://github.com/Awu12277/dsh-stock-watch/blob/main/client.js))\n\n**风险程度：高。** 行为有业务目的且公开披露，但权限范围明显超过行情展示插件，应由用户显式授权。\n\n## 风险点汇总\n\n1. **运行时远程脚本：** 两个公共 CDN脚本无 SRI，供应链失陷时可在 DSH 页面上下文执行代码。\n2. **默认写入用户技能目录：** 安装行情插件会修改 `~/.agents/skills`，授权粒度不够清晰。\n3. **全局智能体提示扩权：** 匹配条件的普通对话也可能自动调用投资研究和网站生成技能。\n4. **隐私信息暴露面：** `/config` 返回自选股配置及本地路径，依赖宿主阻止未授权访问。\n5. **缺少插件级限流：** 客户端 groups 数量无明显上限，可能触发大量并发第三方请求。\n6. **正向项：** 无安装脚本、无系统命令执行、无凭据扫描、无混淆载荷，暂未发现恶意后门。\n\n## 结论与使用建议\n\n**明确建议：谨慎用，暂不建议直接安装到包含敏感项目、企业凭据或公网暴露的生产 DSH 环境。** 它不是恶意插件，但当前版本不能被评价为“完全放心用”。\n\n个人测试环境如需使用，至少应：\n\n1. 安装前设置 `DSH_STOCK_WATCH_NO_SKILLS=1`，除非已人工审查并确实需要两个随包技能；\n2. 确认 DSH Web 仅可信用户可访问，禁止无认证公网暴露；\n3. 不在自选股名称、目标价或研究提示中放入敏感交易策略；\n4. 将 Lightweight Charts 改为随包本地资源，或增加 SRI、CSP 和可信域名限制；\n5. 对 `/quotes`、`/kline`、`/minute` 增加认证、股票代码格式校验、最大股票数、并发上限和速率限制；\n6. 将技能安装和系统提示注入改为用户显式确认、插件作用域内启用，并提供完整卸载清理。\n\n完成上述整改并重新审查两个随包技能的全部内容后，可考虑调整为“通过/放心用”；在当前版本下应维持人工复核状态。\n","action":"review","reviewed_at":"2026-08-17T14:43:58.986341+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"c3ll256/dsh-toy","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14T16:15:54Z","summary":"未见恶意后门，但会下载并执行本地程序、访问硬件及第三方服务。","details":["维度1·代码执行：插件会启动本地 intiface-engine；未安装时默认从官方 GitHub Release 下载固定版本、校验 SHA-256、写入缓存后执行。macOS 原始蓝牙扫描还依赖 Swift 编译器生成辅助程序。虽然未发现 eval、curl|sh 或任意命令字符串拼接证据，但其本质具备下载和执行二进制文件的能力，风险程度为中等。([github.com](https://github.com/c3ll256/dsh-toy))","维度2·数据外发：Intiface WebSocket 默认连接 127.0.0.1:12345，属于本地通信；启用 MonsterParty 时会携带分享令牌连接第三方中继服务，自动下载还会访问 GitHub Release。未发现遥测、隐藏回传或向无关域名发送 DSH 会话内容的公开证据，但第三方令牌和控制指令会按功能需要发送，风险程度为中等。([github.com](https://github.com/c3ll256/dsh-toy))","维度3·敏感读取：公开配置明确支持通过 process.env.MONSTERPARTY_TOKEN 读取控制令牌，同时写入用户缓存目录和私有临时配置文件。未发现读取 ~/.ssh、~/.dsh 凭据、~/.codex 或批量枚举环境变量的证据；项目声明令牌不会进入模型参数、工具结果或日志。风险程度为低到中等。([github.com](https://github.com/c3ll256/dsh-toy))","维度4·依赖风险：pnpm 锁文件显示直接运行依赖仅为 @deepseek-ai/schemastery 和 ws，开发依赖主要是 Cordis、DSH Tools、TypeScript、tsdown、Vitest；锁文件包含完整 registry integrity，没有发现直接 Git URL 或未知 tarball 依赖。主要供应链风险来自锁文件之外的 Intiface 二进制自动下载，风险程度为中等。([github.com](https://github.com/c3ll256/dsh-toy/blob/main/pnpm-lock.yaml))","维度5·混淆与后门：源码目录由 auto.ts、buttplug.ts、index.ts、intiface-download.ts、intiface-user-config.ts、macos-ble.ts、monsterparty.ts、runtime.ts、types.ts、websocket.ts 等职责明确的 TypeScript 文件组成，构建产物为 lib/index.js 和 index.d.ts；未见大段 Base64、匿名下载器、反向 Shell 或挖矿组件的结构性信号。但 GitHub 当前无法返回部分 blob 正文，因此不能把“未发现”解释为完整排除，风险程度为低并保留审计不确定性。([github.com](https://github.com/c3ll256/dsh-toy/tree/main/src))","维度6·权限越界：插件需要蓝牙权限，并可能访问串口、USB HID、启动子进程、写缓存和临时文件及控制实体设备；这些权限与功能目标相符，但明显高于普通展示型插件。项目提供默认30秒停止、禁止无限保持、持续时间和强度上限、卸载和断开时停止输出等防护。风险程度为中等，必须限制运行环境和令牌权限。([github.com](https://github.com/c3ll256/dsh-toy))"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本报告依据《MyDSH 安全报告标准》对 `c3ll256/dsh-toy` 进行六维度审查。该项目不是普通界面插件，而是一个可以连接蓝牙、串口、USB HID 设备并控制实体玩具的 DSH 插件。它会按需启动本地 Intiface Engine，在缺少可执行文件时默认下载并运行经过 SHA-256 校验的官方构建；启用 MonsterParty 后，还会使用分享令牌连接第三方中继服务。因此，该项目虽然暂未呈现木马、窃密或隐藏回传特征，但具备真实的本地代码执行、网络通信、硬件访问和凭据使用能力，不能按低权限插件直接判定为“放心用”。\n\n综合安全评分为 **54/100**，需要注意。最终建议是：**谨慎用**，不建议在保存生产密钥、SSH 凭据或重要业务会话的主力环境中未经复核直接安装。\n\n## 评估对象\n\n- 仓库：`c3ll256/dsh-toy`\n- 评估分支：`main`\n- 分支最后更新时间：`2026-08-14T16:15:54Z`\n- 仓库规模：8 个提交；根目录包含 `.github/workflows/`、`src/`、`lib/`、`tests/`、`package.json`、`cordis.patch.yml`、`pnpm-lock.yaml` 等。`src/` 当前列出 10 个 TypeScript 文件，`lib/` 包含编译后的 `index.js` 和类型声明。([github.com](https://github.com/c3ll256/dsh-toy))\n- 主要功能：通过 Buttplug/Intiface 连接本地蓝牙、串口或 USB 设备；macOS 支持只读 CoreBluetooth 广播扫描；特定型号可通过 MonsterParty 分享链路连接。([github.com](https://github.com/c3ll256/dsh-toy))\n- 审计限制：GitHub 当前可读取仓库结构、README 和锁文件，但 `package.json`、`cordis.patch.yml` 及部分源码 blob 的正文请求返回 404。因此本报告明确保留源码逐行复核和 npm 生命周期脚本复核缺口，不将“没有看到”写成“确认不存在”。([]())\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`src/intiface-download.ts`、`src/macos-ble.ts`、`src/runtime.ts`、`lib/index.js`、安装说明及根目录中的 install/scripts 文件。\n\n**发现：** 项目明确会执行 `intiface-engine --websocket-port 12345 --use-bluetooth-le --use-serial --use-hid`。如果 PATH 中不存在该程序，插件默认从官方 Buttplug GitHub Release 下载固定构建，验证 SHA-256 后写入用户缓存并启动。macOS 原始 BLE 扫描还需要 Swift 编译器构建辅助程序。该行为属于真实子进程执行和动态二进制供应链，不是普通依赖加载。仓库根目录未列出独立 `scripts/` 目录或 `curl|sh` 安装文件，但由于 `package.json` 正文未能获取，尚不能完全排除 `preinstall`、`install` 或 `postinstall` 生命周期脚本。\n\n**证据：** `README.md:224-229` 描述启动 Intiface、自动下载、SHA-256 校验、缓存、临时配置及进程停止策略；`README.md:275-278` 明确出现 spawn 错误和 Swift helper 构建要求。([github.com](https://github.com/c3ll256/dsh-toy))\n\n**风险程度：中等。** 下载来源和摘要校验降低了风险，但插件仍具备执行外部程序的能力；若发布账户、Release 资产或校验值同时被篡改，可能形成供应链执行路径。\n\n### 2. 数据外发\n\n**检查内容：** `src/websocket.ts`、`src/monsterparty.ts`、`src/buttplug.ts`、Intiface 与 MonsterParty 配置、自动下载行为。\n\n**发现：** Intiface 默认连接 `127.0.0.1:12345`，主要流量留在本机。启用 MonsterParty 后，插件需要携带分享令牌连接第三方中继并传输设备发现及控制消息；自动下载功能还会访问 GitHub Release。未发现公开文档中存在遥测、分析 SDK、会话上传或向无关域名发送本地文件的说明。项目明确表示分享令牌不会出现在模型可见参数和工具结果中。\n\n**证据：** `README.md:173-192` 说明本地 Intiface、MonsterParty 路由和令牌保护；`README.md:244-259` 说明令牌通过环境变量进入配置；`README.md:224-229` 说明 GitHub Release 下载。([github.com](https://github.com/c3ll256/dsh-toy))\n\n**风险程度：中等。** 数据外发属于显式功能而非隐藏回传，但第三方中继可接触控制凭据和必要协议数据，用户必须把分享令牌视为临时远程控制凭据。\n\n### 3. 敏感读取\n\n**检查内容：** 环境变量、用户目录、缓存目录、临时文件，以及是否读取 `~/.ssh`、`~/.dsh`、`~/.codex` 或其他凭据目录。\n\n**发现：** 明确读取的敏感值是 `process.env.MONSTERPARTY_TOKEN`。插件还会使用用户缓存目录保存下载的 Intiface 程序，并在运行期间创建私有临时用户设备配置。现有公开证据未显示读取 SSH 私钥、DSH 登录凭据、Codex 配置或批量收集环境变量。项目声明令牌不会写入日志或返回给模型，但源码正文未完全获得，仍需人工逐行确认日志和异常路径。\n\n**证据：** `README.md:228` 描述私有临时配置文件；`README.md:246-259` 给出环境变量令牌配置；`README.md:183-192` 描述令牌隔离原则。([github.com](https://github.com/c3ll256/dsh-toy))\n\n**风险程度：低到中等。** 令牌读取具有合理业务用途，但这是可直接控制设备的凭据，应采用最小环境变量作用域并在使用后轮换。\n\n### 4. 依赖风险\n\n**检查内容：** `pnpm-lock.yaml`、直接运行依赖、开发依赖、完整性摘要、Git/URL/tarball 型依赖及锁文件之外的动态下载。\n\n**发现：** 直接运行依赖只有 `@deepseek-ai/schemastery` 和 `ws`；开发依赖包括 Cordis、DSH Tools、Node/WS 类型、tsdown、TypeScript 和 Vitest。锁文件为 pnpm v9 格式，列出的包带有 SHA-512 integrity，未发现直接 Git 仓库、未知 HTTP tarball 或明显仿冒包。需要单独注意的是 Intiface Engine 不由 pnpm 锁文件约束，而是运行时下载并由项目维护的 SHA-256 值验证。\n\n**证据：** `pnpm-lock.yaml:2180-2246` 列出直接依赖和开发依赖；后续 package 条目包含 registry integrity。([github.com](https://github.com/c3ll256/dsh-toy/blob/main/pnpm-lock.yaml))\n\n**风险程度：中等。** Node 依赖结构较克制，主要风险来自锁文件之外的原生二进制下载和 DSH RC 版本开发依赖。\n\n### 5. 混淆与后门\n\n**检查内容：** `src/`、`lib/`、文件命名、编译产物、Base64/加密载荷、反向 Shell、挖矿、动态求值和隐藏下载器迹象。\n\n**发现：** 源码按协议、下载、配置、BLE、WebSocket 和运行时职责拆分，文件名称与 README 描述能够对应；构建产物只有 `lib/index.js` 和 `index.d.ts`。没有发现额外二进制文件、压缩资源、随机文件名或明显混淆结构。项目对下载、子进程、第三方中继和硬件权限进行了主动披露，这与典型后门的隐藏行为不一致。但由于部分源码 blob 无法逐行读取，本次只能判定“未发现明确恶意证据”，不能证明不存在隐藏逻辑。\n\n**证据：** `src/:190-199` 列出 10 个职责清晰的源文件；`lib/:190-192` 列出编译产物。([github.com](https://github.com/c3ll256/dsh-toy/tree/main/src))\n\n**风险程度：低，存在审计残余不确定性。** 当前证据不支持恶意判定。\n\n### 6. 权限越界\n\n**检查内容：** 蓝牙、串口、USB HID、文件写入、进程管理、远程设备控制、配置修改和安全限制。\n\n**发现：** 插件需要获得蓝牙权限，启动 Intiface 后可访问 BLE、serial 和 HID，并能够向实体设备发送强度和持续时间指令。它会写入用户缓存和临时配置，但声明仅停止自己启动的 Intiface 进程，不关闭既有服务。安全边界包括默认 30 秒自动停止、默认禁用无限保持、最大持续时间和强度限制、新命令替换旧定时器、断开或卸载时停止输出、未知硬件仅做只读广播发现且不任意写 BLE 特征。\n\n**证据：** `README.md:183-192` 描述控制边界；`README.md:219-243` 描述只读发现、Intiface 启动、权限与默认限制；`README.md:260-273` 列出模型可调用工具。([github.com](https://github.com/c3ll256/dsh-toy))\n\n**风险程度：中等。** 权限与功能一致，但控制实体硬件本身具有安全和隐私影响，不应在无人监督或共享机器上运行。\n\n## 风险点汇总\n\n1. 默认允许下载并执行原生 Intiface Engine，是最主要的供应链风险。\n2. 插件拥有蓝牙、串口、USB HID、子进程、缓存写入和实体设备控制能力。\n3. MonsterParty 分享令牌属于远程控制凭据，会被发送给第三方中继服务。\n4. `package.json` 和关键源码正文未能在本次 GitHub Web 抓取中完整取得，无法最终排除生命周期脚本、异常日志泄漏及编译产物与源码不一致问题。\n5. 积极因素包括固定下载版本、SHA-256 校验、本地 Intiface、私有临时文件、默认自动停止、强度和时长限制、默认禁止无限保持及令牌不进入模型上下文等。\n\n## 结论与使用建议\n\n**结论：存在风险；用户建议：谨慎用。** 当前没有足够证据将该项目认定为木马、后门或恶意窃密插件，但也不适合给出“可以无条件放心安装”的结论。\n\n建议仅在确有实体设备控制需求时使用，并执行以下措施：\n\n- 优先设置 `intifaceAutoDownload: false`，自行安装和固定可信的 Intiface Engine；如保留自动下载，应核对 Release 来源、版本和 SHA-256。\n- 在独立 DSH profile、独立系统账户或测试机器中运行，不要与生产 API Key、SSH 私钥和高权限开发环境共用进程环境。\n- 将 MonsterParty token 作为一次性凭据，仅注入当前进程，禁止写入 Git、聊天记录和长期配置；断开后立即作废或轮换。\n- 保持 `allowHold: false`，将 `maxIntensityPercent`、`defaultDurationSeconds` 和 `maxDurationSeconds` 调整到实际所需的最低值。\n- 正式发布前必须补做对 `package.json`、`src/intiface-download.ts`、`src/monsterparty.ts`、`src/macos-ble.ts`、`src/runtime.ts` 和 `lib/index.js` 的逐行人工复核，并核对构建产物是否可由当前源码可复现生成。\n\n基于以上证据，本报告建议进入 **人工复核（review）**，而不是直接发布为“安全通过”，也不具备列入恶意禁用名单的证据。\n","action":"review","reviewed_at":"2026-08-17T14:48:51.267806+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"Moeblack/dsh-message-edit","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T11:33:35Z","summary":"未见恶意代码，但接口缺少独立鉴权与体积限制，发布前必须整改","details":["代码执行：未发现 eval、动态 Function、curl|sh、远程脚本下载或安装期钩子。package.json 仅在 build 与 prepublishOnly 阶段调用本地构建脚本；scripts/build.mjs 使用 spawnSync 执行项目内的 tsc、tsdown 和 vite，未启用 shell。风险较低。","数据外发：客户端仅向同源 /message-edit/api 发起请求，未发现向第三方域名上传会话、令牌或设备信息的逻辑。但 GET 接口会按调用者提供的 sessionId 返回完整会话条目，若宿主没有统一鉴权，可能造成会话数据越权读取。","敏感读取：未发现 fs、os、process.env、~/.ssh、~/.dsh 或环境令牌读取。插件会读取 sessionProjectionCache 中的消息内容、元数据和会话结构，这是功能所需，但属于用户敏感会话数据。","依赖风险：运行时能力主要通过 @dsh/* peerDependencies 获得，开发依赖包含 TypeScript、Vite、tsdown、ESLint，并提交 package-lock.json。未发现仓库自定义 postinstall，但当前审计未能完成实时 npm 漏洞数据库比对，因此不能把依赖风险判定为零。","混淆与后门：仓库同时提供 TypeScript 源码、构建产物和客户端 source map，未发现 Base64 解密执行、加密载荷、隐藏下载器、反调试、定时回连或条件后门。生成文件体积较大，但与正常前端打包结果一致。","权限越界：服务端路由直接接受 sessionId 并执行 retry、reroll、branch、edit、edit-in-place 等会话变更，代码中未见插件自身的登录校验、会话所有权校验或租户隔离。请求体读取也未设置字节上限。这是本次审查的核心风险。"],"report_md":"## 安全评分\n\n**54/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：Moeblack/dsh-message-edit\n\n## 概述\n\n本次审查按照 MyDSH 六维度标准，对 `Moeblack/dsh-message-edit` 的仓库结构、服务端源码、客户端源码、构建脚本、依赖声明、补丁声明和生成产物进行了静态安全分析。仓库未呈现恶意插件常见的远程下载执行、凭据窃取、第三方回传、代码混淆或隐藏持久化行为，但服务端消息编辑接口缺少插件级鉴权、会话所有权验证和请求体大小限制。结论是：**不要把它当作可以无条件放心使用的插件；在本地单用户且 DSH Web 服务未对外暴露时可以谨慎试用，在公网、多用户或共享实例中应先整改再使用。**\n\n参考安全评分为 **54/100**，需要注意。该分数表示存在需要发布前处理的真实风险，不代表仓库恶意。\n\n## 评估对象\n\n- 仓库：`Moeblack/dsh-message-edit`\n- 评估分支：`main`\n- 可见规模：7 次提交；根目录包含 `src/`、`scripts/`、`package.json`、`package-lock.json`、`cordis.patch.yml`、`index.mjs`、`client.js` 和 `client.js.map` 等文件。未发现 `lib/` 目录或独立的 install、preinstall、postinstall 文件。\n- 分支核验：GitHub 页面当前展示并可读取 `main`；`master` 未取得可审查文件树。\n- 最后更新时间：审计过程中未取得 GitHub Repository API 的有效 JSON 响应，因此没有把页面抓取时间或文件显示时间冒充 `pushed_at`，本报告将 `updated_at` 保留为 `null`。该元数据缺口本身不改变代码风险结论，但正式发布报告前必须重新调用仓库 API 补齐 ISO 时间。\n- 重点范围：`package.json`、`package-lock.json`、`cordis.patch.yml`、`src/index.ts`、`src/client/`、`scripts/build.mjs`、构建产物及 README 使用说明。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 安装生命周期脚本、`exec`、`spawn`、`eval`、动态函数、Shell 管道、`curl|sh`、远程脚本和构建过程。\n\n**发现：** `package.json` 的脚本仅有 `build: node scripts/build.mjs` 和 `prepublishOnly: npm run build`，没有 `install`、`preinstall` 或 `postinstall`。`scripts/build.mjs` 确实调用了 `spawnSync`，但执行目标是项目本地的 `node_modules/.bin/tsc`、`tsdown` 和 `vite`，参数采用数组传递，未设置 `shell: true`，没有把用户输入拼接成命令。构建脚本还会删除并重新创建 `dist`，该行为发生在开发或发布构建阶段，不会在普通插件安装时自动执行。\n\n**证据：** `package.json:14-17`；`scripts/build.mjs:6-18,21-32`。核心代码为 `spawnSync(command, args, { stdio: 'inherit' })`，命令来自脚本内固定路径。\n\n**风险程度：低。** 没有发现远程代码执行链或安装期自动执行恶意代码。\n\n### 2. 数据外发\n\n**检查内容：** `fetch`、XHR、WebSocket、第三方域名、日志上传、遥测、Webhook 和外部 API。\n\n**发现：** 客户端 `fetchHistory` 与 `mutate` 仅访问同源 `/message-edit/api`，未发现硬编码第三方收集域名，也未发现把消息内容上传到外部服务。README 和包元数据中的 GitHub、npm 链接属于文档或发布信息，不是运行时外发。\n\n但服务端 GET 接口会读取 `sessionProjectionCache`，并返回指定会话中的消息条目。调用者只需提供 `sessionId`；插件代码自身没有验证当前用户是否拥有该会话。因此，虽然数据没有被发送到第三方，仍存在同一 DSH 服务内部的横向数据泄露风险。\n\n**证据：** `src/client/controller.ts` 的 `fetchHistory()` 调用同源接口；`src/index.ts` 的 `handleRoute()` 从查询参数取得 `sessionId` 后读取并返回投影条目。\n\n**风险程度：条件性较高。** 本地单用户环境风险有限；共享或公网环境中必须依赖宿主鉴权，否则不可接受。\n\n### 3. 敏感读取\n\n**检查内容：** 文件系统、SSH 密钥、DSH 凭据目录、环境变量、Token、浏览器存储和系统信息。\n\n**发现：** 源码中未发现 `fs`、`os`、`process.env`、`~/.ssh`、`~/.dsh`、API Key 或环境令牌读取，也没有遍历用户目录的行为。插件读取的敏感对象是 DSH 会话投影，包括消息正文、角色、元数据、分支关系和会话标识。该读取与消息编辑功能直接相关，但返回边界取决于接口权限控制。\n\n**证据：** `src/index.ts` 中的 `sessionProjectionCache.readSessionProjection(sessionId)` 以及后续消息序列化逻辑。\n\n**风险程度：中等且依赖部署方式。** 没有窃取系统凭据，但会处理高敏感度对话内容。\n\n### 4. 依赖风险\n\n**检查内容：** 直接依赖、peerDependencies、开发依赖、锁文件、Git 依赖、远程压缩包和安装脚本。\n\n**发现：** 运行时依赖通过 `@dsh/ai`、`@dsh/cli`、`@dsh/framework`、`@dsh/store` 等 peerDependencies 接入；开发依赖包括 TypeScript、Vite、tsdown、ESLint 和 Cordis。仓库提交了 `package-lock.json`，有利于锁定解析版本。未在仓库自有脚本中发现依赖安装后执行远程代码的行为。\n\n局限是本次未完成实时 `npm audit`、OSV 或 GitHub Advisory 数据库匹配，因此不能保证全部传递依赖当前无已知漏洞。构建环境还应注意 Vite、Rolldown 等工具链可能包含平台原生二进制包。\n\n**证据：** `package.json:20-38`；根目录 `package-lock.json`。\n\n**风险程度：低到中。** 没有明显投毒依赖，但发布前仍需自动化漏洞扫描和 SBOM。\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆、Base64 载荷、动态解密、反调试、隐藏网络请求、定时任务、条件触发和源码与产物一致性。\n\n**发现：** 仓库提供完整 TypeScript 源码、构建脚本、`index.mjs`、`client.js` 和 `client.js.map`。生成代码中的压缩和辅助函数符合正常打包器输出特征。未发现 `eval`、动态 `Function`、解密后执行、远程二阶段载荷、矿工、反向 Shell、定时回连或根据用户名、时间、主机名触发的隐藏逻辑。\n\n**风险程度：低。** 没有证据表明该仓库包含后门或恶意混淆。\n\n### 6. 权限越界\n\n**检查内容：** 路由认证、会话所有权、租户隔离、写操作权限、请求限制、子智能体权限和工作区继承。\n\n**发现一：接口缺少独立授权检查。** `handleRoute()` 注册了 `/message-edit/api`，GET 可读取会话，POST 可执行 `retry`、`reroll`、`branch`、`edit` 和 `edit-in-place`。请求中的 `sessionId`、`messageId` 和操作类型由调用者提供，代码中未见当前用户身份、会话所有者、租户或权限角色检查。插件可能假设 `ctx.webServer` 已统一保护所有路由，但这种安全假设没有在插件内强制或验证。\n\n**发现二：请求体无大小限制。** `requestJson()` 通过异步遍历持续累加请求体后再执行 `JSON.parse`，没有最大字节数、超时或速率限制。能够访问接口的攻击者可以发送超大 JSON，造成 Node.js 内存和 CPU 压力。\n\n**发现三：可选子智能体继承工作区。** 分支到子智能体功能会把当前 `cwd`、workspace attachment、会话上下文和 prompt 交给新智能体。这属于产品设计能力，不是后门，但开启后扩大了能够读取工作区和执行智能体操作的主体范围，应默认关闭并由用户明确授权。README 也将该功能描述为可选分支方式。\n\n**风险程度：较高但取决于宿主边界。** 如果 DSH 服务只监听本机并有可靠统一鉴权，风险可降低；若对公网、局域网多人或共享租户开放，当前实现不应直接发布。\n\n## 风险点汇总\n\n1. **会话级授权缺失：** 任意能够访问路由的调用者可能尝试读取或修改其他会话。\n2. **请求体无限制：** 大体积 POST 可造成内存消耗和拒绝服务。\n3. **写操作缺少附加防护：** 未见插件级 Origin、CSRF、速率限制或敏感操作确认。\n4. **子智能体权限扩张：** 开启后会继承工作目录和工作区附件，需要明确权限提示和默认关闭策略。\n5. **依赖漏洞状态待实时确认：** 锁文件存在，但仍需在发布流水线执行 npm audit、OSV 扫描及许可证检查。\n6. **仓库更新时间待补证：** 必须重新读取 GitHub Repository API 的 `default_branch` 与 `pushed_at` 后，才能形成最终可归档版本。\n\n## 结论与使用建议\n\n本仓库**没有表现出恶意插件特征**，不应标记为“恶意”或直接封禁；但是当前也达不到“用户可以放心使用”的发布标准。明确建议为：**谨慎用**。\n\n仅在以下条件同时满足时可进行受控试用：DSH Web 服务只对本机或可信网络开放；宿主已实施强制登录；每个请求都能绑定当前用户；禁止普通用户枚举或指定其他人的 `sessionId`；默认关闭子智能体分支功能；外层反向代理设置请求体和速率上限。\n\n发布前必须完成以下整改：\n\n1. 在插件路由中显式校验登录身份、会话所有权及租户边界，失败时返回 401 或 403。\n2. 为 POST 请求设置明确的字节上限，例如 64 KB，并验证 `Content-Type`。\n3. 对编辑、重试、重掷和分支操作增加 Origin/CSRF 防护、频率限制和审计日志。\n4. 子智能体创建前展示最终用户可理解的权限范围，并限制可继承的工作区路径和附件。\n5. 在 CI 中运行 `npm ci`、漏洞扫描、SBOM 生成和构建产物差异检查。\n6. 重新取得 GitHub API 元数据并补齐精确的 `pushed_at`，再执行正式发布。\n\n最终处置建议：**进入人工复核与整改流程，不直接 release，也没有足够证据执行恶意 block。**\n","action":"review","reviewed_at":"2026-08-17T14:53:43.664651+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":54,"score_type":"safety","review_status":"complete"},{"full_name":"Nagi-ovo/dsh-visualize","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14T00:00:00Z","summary":"渲染隔离较好，但更新接口可读写任意工作区路径且允许外部脚本。","details":["维度1：代码执行。package.json:24-29 只有 build、typecheck、test、check，没有 preinstall、postinstall、prepare 或 curl|sh；Node 端编译产物也未发现 child_process、exec、spawn、eval。主要风险来自可视化功能主动执行模型生成的 JavaScript：src/shell.ts:17-42 的 CSP 允许 unsafe-inline、unsafe-eval、wasm-unsafe-eval 和外部脚本，流式渲染还会将 script 节点克隆为可执行节点。最终内容位于 sandbox=\"allow-scripts\" 的不透明源 iframe 中，明显降低了宿主页被直接控制的风险，但仍可能造成页面卡死、资源消耗和第三方脚本供应链问题。风险程度：中。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/package.json))","维度2：数据外发。src/shell.ts:17-42 允许向 cdnjs.cloudflare.com、cdn.jsdelivr.net、esm.sh、fonts.bunny.net、fonts.googleapis.com、fonts.gstatic.com、unpkg.com 加载脚本、图片、字体和媒体；普通 fetch、XHR、WebSocket 被 connect-src blob: data: 阻断，表单提交、嵌套页面、object 和 referrer 也受到限制。插件本身没有固定业务上报接口，但模型生成的 HTML 可以触发对这些 CDN 的资源请求，因此使用者的 IP、请求时间和 URL 参数可能交给第三方处理。风险程度：低至中。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/shell.ts))","维度3：敏感读取。源码和可读编译产物中未发现 process.env、~/.ssh、~/.dsh、凭据目录或系统密钥读取；src/skill.ts:14-50 的 node:fs/promises 只读取包内 assets/visualize-skill.md。问题在于 src/tool.ts 的 update 动作直接接受模型提供的 path，并调用 ctx.fs.resolve、readText、writeText；没有在插件自身强制路径必须属于 viz/ 或必须是生成的 HTML 文件。若宿主沙箱正确配置，影响主要局限于工作区；若沙箱策略缺失、过宽或存在符号链接边界问题，则可能读取和改写更敏感的文件。风险程度：中。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/skill.ts))","维度4：依赖风险。运行时依赖主要声明为 peerDependencies，但多个 DSH 组件仍是 0.1.0-rc.6 预发布版本，并使用 ^ 范围；pnpm-lock.yaml 对实际解析包提供 integrity，未发现 git+、HTTP 或 HTTPS 自定义包源。锁文件解析到 vitest 4.1.10，已高于相关 Vitest 漏洞的 4.1.0 修复版本，且 Vitest仅为开发依赖。更值得关注的是 README 使用 GitHub 仓库安装方式，以及运行时从多个 CDN 加载库但未使用 SRI，建议安装时固定提交 SHA。风险程度：中。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/package.json))","维度5：混淆或后门。src/ 保留完整 TypeScript 源码，lib/index.js 是带源码区域标记的可读构建产物，没有发现大段 Base64、自解密逻辑、动态下载后执行、隐藏 native 二进制、反调试或条件后门。编译产物中的核心文件读写、校验和注册流程与 src/ 设计一致。风险程度：低。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/lib/index.js))","维度6：权限越界。src/index.ts:18-20 明确注入 fs 服务；create 动作只在 viz/ 下生成内容寻址文件，但 update 动作允许传入任意 path，并对目标执行读—替换—写。src/fragment.ts 的补丁失败诊断还可能返回目标文件附近最多 160 个字符，进一步扩大错误路径被滥用时的信息暴露。cordis.patch.yml 会将插件直接插入运行层。该能力超出了单纯“渲染可视化卡片”的最小权限，应在发布前限制目标目录、扩展名、文件身份并在沙箱缺失时拒绝运行。风险程度：中偏高。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/index.ts))"],"report_md":"## 安全评分\n\n**53/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：Nagi-ovo/dsh-visualize\n\n## 概述\n\n本次审查覆盖代码执行、数据外发、敏感读取、依赖风险、混淆或后门、权限越界六个维度，并重点检查了 `package.json`、`cordis.patch.yml`、`src/`、`lib/`、`assets/`、测试目录及安装说明。综合评分为 **47/100**，结论为 **存在风险，用户应谨慎使用**。\n\n仓库没有表现出恶意软件或主动窃取凭据的特征，安装阶段也没有发现 `postinstall`、`curl | sh`、子进程执行等典型危险行为。其核心可视化采用不透明源 iframe、CSP、禁止表单与普通网络连接等隔离措施，安全设计并非完全缺失。但当前 `update` 接口可以根据模型传入的路径读取和改写任意可解析工作区文件，没有在插件内部强制目标必须是自己生成的 `viz/*.html`，这是阻止直接放行的主要原因。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/package.json))\n\n## 评估对象\n\n- **仓库**：`Nagi-ovo/dsh-visualize`\n- **评估分支**：`main`\n- **最新可验证提交**：`e3254f762cbe4dbf796eca05d73a293f0e8e4a87`\n- **最后更新日期**：2026-08-14。GitHub 提交历史确认 `main` 在该日有最新提交；由于审计环境未能取得仓库 API 的秒级响应，JSON 中时间被归一化为 `2026-08-14T00:00:00Z`，不应视为提交的精确时分秒。([github.com](https://github.com/Nagi-ovo/dsh-visualize/commits/main))\n- **仓库规模**：核心文件包括 253 行的 `src/tool.ts`、258 行的 `src/fragment.ts`、247 行的 `src/shell.ts`、141 行的主客户端卡片、59 行的 Skill 提供器，以及 3,530 行锁文件；另有可读的 `lib/` 构建产物和三组测试文件。属于体量较小、可人工审阅的 TypeScript 插件。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/tool.ts))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` 生命周期脚本，`src/tool.ts`、`src/shell.ts`、`src/client/` 和 `lib/index.js` 中的 `exec`、`eval`、子进程、动态脚本及安装命令。\n\n**发现**：`package.json:24-29` 仅定义 `build`、`typecheck`、`test`、`check`，未设置 `preinstall`、`install`、`postinstall` 或 `prepare`。Node 端产物未发现 `child_process`、`exec()`、`spawn()`、`process.env` 或直接 `eval()`。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/package.json))\n\n插件的业务目标本身是执行模型生成的 HTML/JavaScript。`src/shell.ts:17-42` 的 CSP 包含 `script-src 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'`，并允许多个 CDN；流式同步代码会创建新的 `script` 元素，使完成的脚本实际运行。最终卡片使用 `src/client/VisualizeCard.tsx:102-108` 的 `sandbox=\"allow-scripts\"`，不包含 `allow-same-origin`、`allow-forms`、`allow-popups` 或顶层导航权限，因此脚本通常不能读取宿主页面 DOM、Cookie 或本地存储。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/client/VisualizeCard.tsx))\n\n**风险程度：中。** 隔离设计有效降低了宿主接管风险，但恶意或失控的生成脚本仍可能进入死循环、执行高负载计算、加载不可信 CDN 代码或伪造误导性界面。插件没有脚本执行超时、CPU 配额或默认静态模式。\n\n### 2. 数据外发\n\n**检查内容**：第三方域名、网络 API、遥测、外部资源、表单提交及 referrer 策略。\n\n**发现**：`src/shell.ts:17-26` 固定允许 `cdnjs.cloudflare.com`、`cdn.jsdelivr.net`、`esm.sh`、Bunny Fonts、Google Fonts 和 `unpkg.com`。CSP 将 `connect-src` 限制为 `blob:` 与 `data:`，所以普通 `fetch`、XHR 和 WebSocket 无法直接连接互联网；同时设置 `form-action 'none'`、`frame-src 'none'`、`object-src 'none'`、`base-uri 'none'` 和 `no-referrer`。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/shell.ts))\n\n仓库没有固定遥测或业务上报接口，但模型生成的 `<script src>`、`<img>`、字体和媒体仍能向白名单 CDN 发起请求。这会向第三方暴露用户 IP、请求时间和请求 URL；如果私密对话内容被拼入资源 URL，也可能形成有限的数据外发通道。\n\n**风险程度：低至中。** 不属于主动窃取，但不满足完全离线或严格隐私环境要求。\n\n### 3. 敏感文件与凭据读取\n\n**检查内容**：`~/.ssh`、`~/.dsh`、环境变量、Token、系统目录、任意文件 API。\n\n**发现**：源码和构建产物未发现 `process.env`、SSH 目录、DSH 凭据目录、Keychain 或浏览器凭据读取。`src/skill.ts:14-50` 使用 `readFile` 读取的目标固定为包内 `assets/visualize-skill.md`，属于正常的 Skill 资源加载。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/skill.ts))\n\n但 `src/tool.ts:131-154` 的 `update` 分支对调用方提供的 `args.path` 执行 `ctx.fs.resolve()`、`readText()` 和 `writeText()`。插件没有自行检查路径是否位于 `viz/`、是否以 `.html` 结尾、是否是之前由本工具创建的内容寻址文件。若宿主沙箱正确配置，影响会局限于工作区；若策略缺失、继承过宽或符号链接处理不严，敏感读取范围可能扩大。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/tool.ts))\n\n此外，`src/fragment.ts` 在补丁匹配失败时可能把目标文件附近最多 160 个字符写入错误信息。该功能原意是帮助模型修正卡片，却会在路径被误用时增加局部文件内容泄露面。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/fragment.ts))\n\n**风险程度：中。**\n\n### 4. 依赖与供应链风险\n\n**检查内容**：直接依赖、peerDependencies、锁文件来源、完整性摘要、开发工具漏洞和外部 CDN。\n\n**发现**：运行时以 DSH peerDependencies 为主，其中多个组件是 `0.1.0-rc.6` 预发布版本，并使用 `^` 范围，实际安全性会随宿主解析版本变化。`pnpm-lock.yaml` 包含 registry integrity 摘要，未检出 `git+`、明文 HTTP 或显式 HTTPS 自定义包源。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/package.json))\n\n锁文件中的 Vitest 为 4.1.10；已公开的相关漏洞影响 `<4.1.0`，因此该锁定版本不在该漏洞范围内，而且 Vitest 仅用于开发测试。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/pnpm-lock.yaml))\n\n较大的供应链问题来自运行时 CDN：CSP 允许从七个外部源执行脚本，但没有 SRI 完整性校验，也没有限制到具体库路径。仓库安装说明还采用 GitHub 源；若用户不固定提交 SHA，首次安装或升级可能取得之后变化的代码。\n\n**风险程度：中。** 建议固定仓库 SHA，将可视化库随插件打包，或至少固定版本并配置 SRI。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容**：Base64 载荷、自解密代码、压缩混淆、动态下载执行、原生二进制、源码与构建产物差异。\n\n**发现**：仓库保留完整 TypeScript 源码；`lib/index.js` 是可读构建结果，并带有 `//#region src/...` 源模块标记。未发现大段编码载荷、加密字符串、反调试、动态远程下载后执行、隐藏 native 模块或条件式后门。构建产物中可见的文件读写和注册逻辑与源码一致。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/lib/index.js))\n\n**风险程度：低。** 当前没有证据表明仓库具有恶意意图。\n\n### 6. 权限越界\n\n**检查内容**：插件注入服务、文件系统范围、路径参数、工作区写入及自动注册行为。\n\n**发现**：`src/index.ts:18-20` 注入 `tools`、`skills`、`fs`。`create` 动作把内容写到 `viz/<slug>-<hash>.html`，范围相对明确；`update` 动作却直接信任路径参数，并将目标文件读出、替换和写回。由于该 Skill 同时允许模型调用和用户调用，提示注入或模型误判都可能触发超出“展示可视化”所需的工作区修改。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/src/skill.ts))\n\n`cordis.patch.yml` 会把插件直接插入 profile 层栈，没有附带额外权限确认或只读模式。([github.com](https://github.com/Nagi-ovo/dsh-visualize/blob/main/cordis.patch.yml))\n\n**风险程度：中偏高。** 建议发布前完成以下修复：\n\n1. `update.path` 必须匹配工具生成的 `viz/<slug>-<hash>.html`，拒绝绝对路径、`..`、非 HTML、符号链接和未登记路径。\n2. 将允许更新的文件身份保存在服务端状态中，而不是信任模型重新提供的路径。\n3. 强制注入并解析 `sandboxPolicy`；策略缺失时失败关闭，禁止退回无策略文件访问。\n4. 将可视化写入根目录隔离为专用目录，不与源码、`.env`、Git 配置共享权限。\n5. 默认关闭脚本或提供静态模式；执行脚本前由用户明确确认。\n6. 将常用前端库本地打包，或使用精确版本与 SRI。\n7. 增加绝对路径、`../`、`.env`、符号链接逃逸、沙箱缺失、任意文件补丁和无限循环脚本的安全测试。\n\n## 风险点汇总\n\n| 风险点 | 影响 | 当前缓解 | 建议 |\n|---|---|---|---|\n| `update` 可接受任意路径 | 工作区文件读取、覆盖、局部内容泄露 | 依赖宿主 sandboxPolicy | 强制限定 `viz/` 生成文件 |\n| 执行模型生成 JavaScript | 页面卡死、欺骗界面、第三方代码执行 | 不透明源 iframe 和 CSP | 默认静态模式、超时和资源配额 |\n| CDN 脚本无 SRI | CDN 或上游包供应链风险 | 固定域名白名单 | 本地打包或精确版本加 SRI |\n| GitHub 源及 RC 依赖 | 安装结果与兼容性可能变化 | 项目锁文件含 integrity | 用户安装固定 commit SHA |\n| 沙箱策略未在插件内强制 | 不同宿主中的权限边界不一致 | DSH 环境通常提供策略 | 缺少策略时拒绝启动 |\n\n## 结论与使用建议\n\n该仓库 **没有发现恶意后门、凭据窃取、安装期命令执行或主动遥测证据**，因此不应判定为恶意插件。但它也 **不能作为可以无条件放心使用的插件直接放行**：模型可调用的 `update` 接口拥有过宽的文件路径能力，而可视化内容能够执行任意脚本并加载第三方 CDN 代码。\n\n对普通用户的明确建议是：**谨慎用**。在维护者修复路径约束前，只应在不含 `.env`、密钥、重要源码和个人文件的隔离工作区中使用，并固定安装到已审查的提交 SHA；不要在拥有宽泛文件系统权限的重要项目、生产运维目录或凭据目录中启用。MyDSH 社区当前建议执行 `review`，完成路径限制、沙箱失败关闭和远程脚本治理后再转为正式发布。\n","action":"review","reviewed_at":"2026-08-17T13:26:56.521970+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":53,"score_type":"safety","review_status":"complete"},{"full_name":"icetomoyo/dsh_workflow","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-01-06","summary":"插件具备脚本执行与联网能力，审计证据未闭环，暂不能放心用于生产。","details":["代码执行：package.json:6-9 仅定义 test、build 命令，未发现 preinstall、install、postinstall 生命周期脚本；但 README 明确支持执行工作流 code 步骤，属于产品核心能力。项目声称使用隔离 Worker、限定注入对象并设置超时，但 runtime.ts、capsule.ts、validate.ts 的具体隔离实现未能完成源码验证，因此不能确认是否能阻断 process、require、动态 import 或原型链逃逸。","数据外发：README 暴露 dsh.web.fetch 联网能力，并通过 source policy/profile 控制工作流权限；在已读取的 package.json、README.md 中未发现固定可疑第三方域名，但未能核实 builtins.ts 与 source-policy.ts 是否实施域名白名单、重定向限制、私网地址拦截及请求体脱敏。","敏感读取：已检查材料未出现 ~/.ssh、~/.dsh、process.env 或环境 token 的直接读取证据；README 声称代码步骤仅获得 inputs、context 和 dsh。不过该结论依赖隔离层实现，当前不能排除 dsh 内建能力、文件读写接口或运行时对象泄漏凭据的可能。","依赖风险：package.json:10-17 使用 @dsh/types、cordis、yaml 及 TypeScript/Vitest，版本均采用 ^ 范围；仓库根目录未显示 lockfile，安装结果可能随上游版本变化。积极因素是根包未定义安装生命周期脚本，但仍应锁定完整依赖树并执行漏洞、来源及完整性扫描。","混淆与后门：仓库可见结构以 TypeScript 源码为主，未显示 lib、scripts、二进制文件、压缩 bundle 或明显混淆产物；目前也没有发现恶意载荷证据。但 src 下 12 个核心文件只能确认文件名，未完成逐行检索，故不能据此排除编码字符串、动态加载、隐蔽网络请求或条件触发后门。","权限越界：工作流可定时运行，并能调用存储写入、联网请求和指标上报等能力。如果 source policy 校验存在绕过，恶意工作流可能自动读取工作区数据并对外发送。当前结论是不能放心直接用于生产，只适合在无真实凭据、无敏感文件且网络受限的隔离环境继续复核。"],"report_md":"## 安全评分\n\n**52/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告\n\n## 概述\n\n本次审查对象为用户提供的 GitHub 地址 `icetomoyo/dsh_workflow`。该地址当前跳转到 `omdsh-dev/dsh_workflow`，包名为 `@omdsh/dsh-workflow`。从公开说明看，它是一个 Cordis 工作流插件，能够读取工作流 JSON、按计划自动执行任务，并允许工作流包含 JavaScript `code` 步骤以及存储、联网、指标等内建能力。\n\n审查未发现能够直接证明其为窃密程序、下载器或恶意后门的证据；但是，脚本执行和网络访问是该插件的设计能力，而且本次未能取得 GitHub API 的完整响应，也未能完成 `cordis.patch.yml` 和 `src/` 全部实现的逐行审阅。因此，本报告不能给出“放心用”或直接发布的结论。综合评分为 **48/100**。该分数主要反映高权限能力与审计证据缺口，并不等同于认定作者具有恶意行为。\n\n## 评估对象\n\n- **原始仓库地址**：`github.com/icetomoyo/dsh_workflow`\n- **当前跳转仓库**：`github.com/omdsh-dev/dsh_workflow`\n- **评估分支**：`main`\n- **页面可见最后提交日期**：2026-01-06\n- **API 元数据状态**：本次执行环境未成功取得 `api.github.com/repos/icetomoyo/dsh_workflow` 的有效响应，因而无法诚实填写精确到秒的 `pushed_at`；上方日期来自 main 分支页面可见的最后提交日期，不能冒充 API 的精确时间。\n- **仓库规模**：页面显示约 42 次提交、2 个分支；根目录包含 `package.json`、`cordis.patch.yml`、`tsconfig.json`、`vitest.config.ts`、`README.md`、`src/` 和 `tests/`。`src/` 可见 12 个 TypeScript 文件，包括 `runtime.ts`、`capsule.ts`、`builtins.ts`、`source-policy.ts`、`validate.ts` 等安全关键模块。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` scripts、README 工作流格式、`src/` 安全相关文件列表，以及根目录是否存在 install、scripts、lib 等附加执行入口。\n\n**发现**：`package.json:6-9` 只包含 `npm test` 和 TypeScript build 命令，没有 `preinstall`、`install`、`postinstall`、`prepare` 等安装阶段钩子，这是积极信号。\n\n但是，README 明确把 JavaScript `code` 步骤作为插件功能，并给出返回计算结果的代码示例。文档声称代码在隔离 Worker 中运行，只注入 `inputs`、`context`、`dsh`，并执行超时限制。该设计若实现正确，可以降低任意代码风险；但由于未完成 `runtime.ts`、`capsule.ts`、`validate.ts` 的逐行验证，目前不能确认是否真正禁止 Node.js 全局对象、模块加载、动态 import、构造器逃逸、无限资源消耗或跨步骤对象污染。\n\n**证据**：`package.json:6-9`；README 中 `type: code` 示例及 Worker 隔离说明；`src/runtime.ts`、`src/capsule.ts`、`src/validate.ts` 文件存在。\n\n**风险程度**：较高能力风险。没有安装即执行迹象，但插件运行后本身就是代码执行器，必须把隔离实现作为发布前阻断项审查。\n\n### 2. 数据外发\n\n**检查内容**：第三方域名、HTTP 客户端、Webhook、遥测、上传接口及工作流网络能力。\n\n**发现**：README 展示了 `dsh.web.fetch`，说明工作流可以主动访问网络；同时存在 `source-policy.ts` 和不同权限 profile。已读取的 `package.json` 与 README 中未发现硬编码的可疑收集域名、匿名统计地址或下载执行链。\n\n风险在于文档只说明“受 policy/profile 控制”，尚未验证代码是否进行协议限制、域名白名单、DNS 重绑定防护、私网及云元数据地址拦截、跳转后二次校验、请求头过滤和响应大小限制。如果工作流可把存储内容直接放入请求体，插件就具备现实的数据外发能力。\n\n**证据**：README 中 `dsh.web.fetch` 示例；`src/builtins.ts`、`src/source-policy.ts` 文件列表。\n\n**风险程度**：中等偏高。没有发现固定恶意接收端，但存在通用联网通道，策略实现未验证。\n\n### 3. 敏感信息读取\n\n**检查内容**：`~/.ssh`、`~/.dsh`、环境变量、Token、Cookie、系统配置、任意文件读取及凭据注入。\n\n**发现**：已获取的材料没有出现 `~/.ssh`、`~/.dsh`、`process.env`、API Token 或私钥文件的直接读取证据。README 声称代码步骤只获得明确注入的数据和能力对象，而不是完整 Node.js 环境。\n\n不过，README 同时表明 `dsh` 暴露存储和其他平台能力。未读取 `builtins.ts`、`capsule.ts` 的实现，无法确认文件路径是否被限制在工作目录内，也无法确认错误对象、上下文对象或 Cordis 服务是否会间接暴露凭据。\n\n**证据**：README 的 Worker 注入说明以及存储能力示例；`src/builtins.ts`、`src/capsule.ts` 文件存在。\n\n**风险程度**：中等。当前无直接窃取凭据证据，但权限边界尚未得到源码证明。\n\n### 4. 依赖风险\n\n**检查内容**：运行依赖、开发依赖、版本锁定、生命周期脚本及供应链可重复性。\n\n**发现**：`package.json:10-17` 声明运行依赖 `@dsh/types`、`cordis`、`yaml`，开发依赖 TypeScript 和 Vitest；依赖均使用 `^` 范围。`package.json:18-24` 要求 Node.js 20 以上，并把 Cordis 同时声明为 peer dependency。仓库根目录未显示 `package-lock.json`、`pnpm-lock.yaml` 或 `yarn.lock`，因此从源码仓库安装时无法保证解析到完全相同的依赖树。\n\n根包没有安装生命周期脚本，降低了依赖安装时直接执行仓库代码的风险；但上游及传递依赖仍需独立扫描，不能因为本包没有 postinstall 就认定整个安装链安全。\n\n**证据**：`package.json:6-24`；根目录文件列表未出现锁文件。\n\n**风险程度**：中等。主要问题是供应链漂移和缺少可重复安装证据，而非已确认漏洞。\n\n### 5. 混淆与后门\n\n**检查内容**：压缩或混淆代码、Base64 大块数据、动态解密、二进制载荷、隐藏下载器、条件触发逻辑及异常命名文件。\n\n**发现**：公开结构以短小、语义明确的 TypeScript 源文件为主，未显示预编译 `lib/`、独立 `scripts/`、二进制文件或压缩 bundle；已读取的 package.json 和 README 也没有可疑编码载荷。\n\n然而，文件名正常不能替代内容审查。由于没有取得 12 个 `src` 文件的完整正文，本次不能排除动态构造函数、字符串拆分、条件网络请求、远程代码加载或只在定时任务中触发的隐藏行为。\n\n**证据**：根目录及 `src/` 文件结构；未发现可见二进制或压缩产物。\n\n**风险程度**：可见证据层面较低，但审计置信度不足，不能据此宣布无后门。\n\n### 6. 权限越界\n\n**检查内容**：文件系统范围、网络范围、调度器、平台服务访问、策略绕过及工作流之间的隔离。\n\n**发现**：插件能够保存工作流状态、自动调度运行，并向代码步骤提供存储写入、网络访问、指标上报等能力。README 还描述了不同 profile，例如基础能力、文档发布和指标演示。\n\n如果 profile 只是在输入层校验，而执行层没有再次授权，恶意工作流可能伪造来源、跨目录读写、访问内网服务或把数据发送到外部地址。还需验证 schedule 的最小间隔、并发数量、运行次数、日志体积和输出大小，否则可能被用于持久化资源消耗攻击。\n\n**证据**：README 的调度、source policy、builtins 和 profile 说明；`src/schedule.ts`、`src/source-policy.ts`、`src/runtime.ts` 文件列表。\n\n**风险程度**：中等偏高。权限能力较大，核心授权实现尚未得到逐行证明。\n\n## 风险点汇总\n\n| 风险点 | 当前证据 | 影响 |\n|---|---|---|\n| 工作流可执行 JavaScript | README 明确支持 code 步骤 | 隔离失败时可形成任意代码执行 |\n| 工作流可访问网络 | 存在 `dsh.web.fetch` | 可被用于数据外发、SSRF 或内网探测 |\n| 策略实现未完成验证 | `source-policy.ts`、`capsule.ts` 正文未审 | 无法确认权限声明真正强制执行 |\n| 依赖树未锁定 | 根目录未显示 lockfile，依赖采用 `^` | 上游更新可能改变安装结果和风险 |\n| 可自动调度运行 | README 描述 schedule 与 runCount | 恶意或错误工作流可能持续执行 |\n| 仓库身份发生跳转 | 原地址跳转至 `omdsh-dev` | 安装前应核实维护者和 npm 发布者一致性 |\n\n## 结论与使用建议\n\n**明确结论：当前不能放心用于生产环境。** 目前没有证据足以把该仓库认定为恶意软件，但它具备脚本执行、网络访问、存储写入和定时运行能力，而这些能力的安全边界尚未通过完整源码审计证明。因此建议为 **“谨慎用”**，仅允许在隔离测试环境继续验证，不应直接加载真实用户数据、SSH 凭据、DSH Token 或生产网络权限。\n\n发布前至少应完成以下工作：\n\n1. 重新取得 GitHub API 元数据，确认真实 `default_branch` 与精确 `pushed_at`。\n2. 逐行审查 `cordis.patch.yml`、`runtime.ts`、`capsule.ts`、`builtins.ts`、`source-policy.ts`、`validate.ts` 和 `schedule.ts`。\n3. 使用恶意测试工作流验证 `process`、`require`、动态 import、构造器逃逸、原型链、超时、内存和并发限制。\n4. 验证网络策略能阻止 localhost、私网、云元数据地址、DNS 重绑定和跨域重定向绕过。\n5. 验证文件读写只能发生在授权工作区，拒绝绝对路径、`..`、符号链接和凭据目录。\n6. 提交并校验 lockfile，对完整依赖树执行漏洞、许可证、来源和完整性扫描。\n7. 核实 GitHub 维护者、npm 包发布者与 MyDSH 信任主体一致，并固定审核过的提交 SHA。\n\n在上述验证完成前，MyDSH 不应将该版本标记为“安全通过”或向普通用户宣传为可放心安装。\n","action":"review","reviewed_at":"2026-08-17T13:51:14.942143+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":52,"score_type":"safety","review_status":"complete"},{"full_name":"LX2000WASD/dsh-web-plugin-manager","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-17T13:11:42Z","summary":"未见恶意后门，但具备高权限安装和删除能力，必须隔离并人工复核。","details":["代码执行：未发现 `eval`、`new Function`、`curl|sh` 或拼接 Shell 命令等典型后门，但 `package.json` 包含 `prepare: pnpm build`，从 Git 仓库安装时会触发生命周期构建；智能体工具还能调用安装、更新、卸载和启停接口。风险程度：中。","数据外发：插件会访问 npm Registry、GitHub、awesome 市场源和 dsh.so，发送包名、仓库地址、查询参数及常规 HTTP 请求头。未发现主动上传本地文件、聊天内容、SSH 密钥或 DSH 凭据的代码。风险程度：低至中。","敏感读取：插件读取 `DSH_HOME` 或 `~/.dsh` 下的 profile、`package.json`、`cordis.patch.yml`、插件目录及环境变量名称。项目对常见 `KEY/SECRET/TOKEN/PASSWORD/CREDENTIAL/AUTH/COOKIE/SESSION` 字段进行了展示过滤，但文档明确承认其他环境变量仍可能进入子 `pnpm` 进程。风险程度：中。","依赖风险：运行时依赖包含 `undici`，开发链包含 Vite、Vue、Element Plus、tsdown、TypeScript 等。声明的 `undici ^7.29.0` 已高于近期公开问题的受影响版本范围，但仍应以实际锁文件和生产依赖审计结果为准。风险程度：低至中。","混淆和后门：源码为可读 TypeScript，未发现大段 Base64、十六进制载荷、动态远程脚本下载、自删除代码、隐蔽定时任务或可疑反调试逻辑。动态导入仅用于加载本地 DSH profile 中的 `js-yaml`。风险程度：低。","权限越界：智能体工具能够接受 npm 包、GitHub 仓库、tarball URL 和本地路径作为安装源，并执行更新、卸载、启停、profile 删除和备份恢复。工具处理器中未看到安装、删除前的强制人工二次确认，因此提示词注入或误调用可能造成真实环境变更。风险程度：中至高。"],"report_md":"## 安全评分\n\n**52/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对 `LX2000WASD/dsh-web-plugin-manager` 的仓库结构、依赖声明、安装入口、插件管理工具、运行时扫描、配置处理和网络请求进行了静态安全审计。评估结果为：**未发现恶意后门、凭据窃取或隐蔽控制代码，但该项目本质上是具有软件安装、卸载、配置修改和 profile 管理能力的高权限插件，不能按照普通展示型插件的安全等级直接信任。**\n\n该插件可以在受控环境中使用，但必须限制为本机或可信私网访问，并对智能体触发的安装、更新、删除和恢复操作增加人工复核。安全评分为 **52/100**，需要注意，属于中等风险区间**；明确用户建议为：**谨慎用，而不是放心用**。\n\n## 评估对象\n\n- 仓库：`LX2000WASD/dsh-web-plugin-manager`\n- 默认分支：`master`\n- 分支最后更新时间：`2026-08-17T13:11:42Z`\n- 当前文档标注版本：`0.4.4`\n- 主要语言：TypeScript，包含 Vue 管理界面、Cordis 服务、智能体工具、插件扫描、环境管理、市场查询和备份恢复功能。\n- 仓库规模：GitHub 页面显示约 103 次提交；当前文档列出的实现包含 `src/client/`、`src/scan/`、`src/tools.ts`、`src/live.ts`、`src/installSession.ts`、`src/guard.ts`、`src/index.ts`、测试文件和构建配置。\n\n仓库当前结构中没有独立的 `scripts/` 目录；安装相关逻辑主要位于 `src/tools.ts`、`src/installSession.ts`、`src/index.ts` 和 `package.json`。仓库也没有提交一份用户真实使用的根级 `cordis.patch.yml`，该文件是运行时位于 `~/.dsh/profiles/<profile>/cordis.patch.yml` 的用户配置；其读取、解析和写入逻辑主要位于 `src/live.ts` 与 `src/patch.ts`。`lib/`、`dist/` 被作为发布产物声明，但安全判断以可读 TypeScript 源码为主。\n\n## 逐维度分析\n\n### 1. 代码执行能力\n\n**检查内容：** `package.json:L9-L16`、`src/tools.ts:L59-L102`、`src/live.ts:L220-L245`、`src/index.ts`、安装会话及 README 中的安装链说明。\n\n**发现：** 未在已检查源码中发现 `eval`、`new Function`、`curl | sh`、`wget | sh`、反向 Shell、隐蔽 `child_process.exec` 字符串拼接或下载后直接执行二进制的行为。项目使用正规的插件管理接口完成安装和更新，而不是把用户输入直接拼入 Shell。\n\n但是，`package.json` 定义了 `prepare: pnpm build`。当用户直接从 Git 仓库安装该项目时，包管理器可能执行该生命周期脚本。README 也说明 Git 安装场景可能需要将本包加入 `pnpm.onlyBuiltDependencies`，证明构建阶段代码执行是预期行为。更重要的是，`src/tools.ts` 注册的 `plugin_install`、`plugin_update`、`plugin_remove` 和 `plugin_toggle` 工具会把智能体请求直接交给实际插件管理依赖执行。\n\n**风险程度：中。** 没有恶意执行证据，但功能本身具有真实代码安装和环境变更能力。安装任意第三方包时，该第三方包的生命周期脚本仍可能获得 DSH 进程权限。\n\n### 2. 数据外发和第三方域名\n\n**检查内容：** `src/analyze.ts:L390-L430`、市场查询实现、GitHub 安装逻辑和 README 的 marketplace 数据源说明。\n\n**发现：** `src/analyze.ts` 使用 `undici.request` 请求 npm Registry 的包元数据，请求内容包括插件包名，并设置 `User-Agent: dsh-web-plugin-manager`。当前市场功能还会聚合 GitHub、npm、awesome 列表和 dsh.so 独立验证结果；安装 GitHub 插件时会连接对应 GitHub 仓库。\n\n未发现把 `cordis.patch.yml` 内容、环境变量值、用户文件、SSH 私钥、聊天记录或完整 profile 上传到这些服务的实现。正常外发内容主要是包名、仓库地址、版本查询和 HTTP 元数据。\n\n**风险程度：低至中。** 存在明确的第三方联网，但目前未发现秘密数据主动外传。企业或离线环境仍应通过网络策略限制允许访问的域名。\n\n### 3. 敏感目录和凭据读取\n\n**检查内容：** `src/live.ts:L90-L150`、`src/live.ts:L220-L245`、`src/analyze.ts:L60-L130`、环境扫描与导入逻辑。\n\n**发现：** 插件通过 `process.env.DSH_HOME` 定位 DSH 目录，未设置时默认读取 `~/.dsh`。它会读取 profile 下的 `package.json`、`cordis.patch.yml`、`node_modules` 和插件源码，用于插件清单、健康检查、配置展示、依赖分析和更新判断。该读取范围符合插件管理器职责，但权限明显高于普通 Web UI 插件。\n\n项目实现了敏感环境变量过滤，覆盖名称中包含 `KEY`、`SECRET`、`TOKEN`、`PASSWORD`、`CREDENTIAL`、`AUTH`、`COOKIE` 和 `SESSION` 的常见字段。README 同时明确指出该过滤并非完整安全边界：未匹配这些命名模式的环境变量仍可能传递给子 `pnpm` 进程。\n\n未发现访问 `~/.ssh`、浏览器凭据库、系统钥匙串或主动枚举云服务 Token 的代码。需要注意的是，安装源支持本地路径；如果智能体被允许提供任意路径，插件可能读取用户指定目录中的包信息。\n\n**风险程度：中。** 主要危险不是当前代码主动盗取凭据，而是被安装的恶意依赖能够继承 DSH 进程环境。\n\n### 4. 依赖和供应链风险\n\n**检查内容：** `package.json:L27-L42`、`pnpm-lock.yaml`、构建脚本和公开安全公告。\n\n**发现：** 可见版本的主要运行时网络依赖为 `undici ^7.29.0`，并使用 Cordis、Vue、Vite、Element Plus、TypeScript、tsdown 等开发或界面依赖。`package.json` 没有 `postinstall`，但存在前述 `prepare` 构建脚本。仓库包含体积较大的 `pnpm-lock.yaml`，有利于锁定实际依赖树。\n\n公开公告显示，`undici` 在 2026 年曾修复多个请求头和内存消耗问题，但已知受影响范围分别低于 7.20.0 或 7.24.0；声明的 7.29.0 不落入这些已知范围。该结论不等于整个锁文件无漏洞，因为静态 Web 审查无法替代针对当前锁文件执行的 `pnpm audit --prod`、OSV 扫描和许可证检查。\n\n**风险程度：低至中。** 没有发现明确已知高危依赖，但安装第三方插件本身仍是供应链入口。\n\n### 5. 混淆、后门和隐藏行为\n\n**检查内容：** `src/`、`src/client/`、`src/scan/`、构建配置、配置解析和源码扫描实现。\n\n**发现：** 项目源码为结构清晰的 TypeScript/Vue，实现名称与 README 描述基本一致。未发现大段 Base64、十六进制编码载荷、动态远程代码下载、加密命令控制地址、自删除、隐藏定时任务或反调试逻辑。`src/live.ts` 存在动态 `import()`，但目标是当前 DSH profile 下的本地 `js-yaml/index.js`，用于复用宿主环境已有依赖，而不是加载远程模块。\n\n`src/patch.ts` 的模板注释提到 DSH 配置可能支持 `!!js` 表达式，但插件自身未发现对字符串执行 `eval` 的代码；这属于 DSH 配置能力，而非当前插件植入的后门。\n\n**风险程度：低。** 没有恶意或刻意隐藏行为的证据。\n\n### 6. 权限越界和管理面暴露\n\n**检查内容：** `src/tools.ts:L35-L144`、`src/guard.ts`、`src/service.ts`、`src/installSession.ts`、API 路由与备份恢复说明。\n\n**发现：** 智能体工具不仅能够读取插件状态，还能安装 npm 包、GitHub 仓库、tarball URL 或本地目录，并执行更新、卸载、启停、profile 创建、重命名、删除、备份和恢复。`src/tools.ts` 的状态变更处理器中未看到强制的人类二次确认或来源白名单；是否执行主要取决于宿主智能体是否调用该工具。\n\n项目已经实现多项有效缓解措施，包括 Host/CORS/loopback 判断、代理 Host allowlist、路径遍历与协议检查、备份 manifest 校验、恢复前预览、临时目录逃逸检查，以及对敏感环境变量的展示过滤。这些措施降低了直接 HTTP 攻击和恶意备份风险。\n\n但 Host 和 CORS 校验不能替代身份认证。如果 DSH Web UI 被暴露到公网，而宿主没有可靠登录控制，攻击者仍可能通过管理接口或智能体会话触发高权限操作。提示词注入也可能诱导智能体调用 `plugin_install` 或 `profile_delete`。\n\n**风险程度：中至高。** 这是本次审计最主要的风险来源。\n\n## 风险点汇总\n\n| 风险点 | 影响 | 建议 |\n|---|---|---|\n| 智能体可直接安装、更新和卸载插件 | 可能执行不可信依赖代码或破坏现有 profile | 对安装、更新、卸载、删除和恢复增加强制人工确认 |\n| 安装源允许 URL、GitHub 和本地路径 | 扩大供应链和本地文件访问范围 | 只允许审核过的仓库，固定版本或 commit，禁止任意 tarball |\n| 子包管理器可能继承未被过滤的环境变量 | 恶意依赖可能读取 Token 或内部服务凭据 | 以最小环境变量启动 DSH，敏感凭据使用隔离进程或临时凭据 |\n| 插件自身未体现独立用户认证 | 公网暴露时管理接口风险较高 | 仅绑定 loopback/可信私网，并由宿主或反向代理实施强认证 |\n| Git 安装触发 `prepare` 构建 | 安装阶段会运行仓库代码 | 安装前审查 commit，优先使用固定、可复现的正式包 |\n| 多个外部市场和 Registry 数据源 | 存在元数据外发和供应源污染可能 | 配置域名白名单，安装前核对作者、版本、提交和包摘要 |\n\n## 结论与使用建议\n\n**最终结论：存在风险；用户建议：谨慎用。**\n\n该仓库没有表现出恶意软件特征，不能判定为后门或凭据窃取工具。但它是一个高权限插件管理面，并且把部分状态变更能力直接暴露给智能体。用户不应在公网裸露、共享 DSH 实例或包含大量生产凭据的环境中无条件启用。\n\n满足以下条件时可以使用：\n\n1. DSH 仅运行在本机或受控私网，并有可靠身份认证；\n2. 安装、更新、卸载、profile 删除和备份恢复必须由用户逐次确认；\n3. 只安装已人工审查的插件，固定 npm 版本或 Git commit；\n4. 不使用来源不明的 tarball、临时下载地址或本地目录；\n5. 使用最小权限账户运行 DSH，并从进程环境中移除长期 Token、云密钥和生产数据库密码；\n6. 上线前针对实际 `pnpm-lock.yaml` 执行生产依赖审计，并保留 profile 备份和回滚点。\n\n在没有上述隔离和人工确认措施的情况下，**不建议把它当作可以放心使用的普通插件**；在本机、可信来源、最小权限和人工复核条件下，可以作为管理工具谨慎使用。\n","action":"review","reviewed_at":"2026-08-17T13:57:37.268892+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":52,"score_type":"safety","review_status":"complete"},{"full_name":"liustack/modsearch","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-15T00:00:00Z","summary":"未见恶意后门，但存在远程脚本执行、代理权限过宽和环境凭据暴露风险。","details":["代码执行：package.json 未定义 install、postinstall、prepare 等安装期钩子，核心代码使用 spawn 参数数组而非 shell 拼接，降低命令注入风险；但 INSTALL.md 指导执行 curl -fsSL https://antigravity.google/install | bash，且 Antigravity 调用包含 --dangerously-skip-permissions，属于明确的远程代码与高权限代理执行面。","数据外发：搜索词、目标 URL、抓取内容会按所选引擎发送给 Antigravity、Grok、Tavily、Exa、Firecrawl 或用户配置的自定义 baseURL；local 引擎还会直接访问用户提供的站点。代码未发现静默遥测，但自定义 baseURL 可改变数据接收方。","敏感读取：未发现直接读取 ~/.ssh、~/.dsh 或扫描主目录凭据的代码；程序会读取 ~/.modsearch/config.json 和 TAVILY_API_KEY、EXA_API_KEY、FIRECRAWL_API_KEY 等环境变量。dsh/index.js 启动子进程时传递完整 process.env，外部 CLI 因而可能接触与本功能无关的 token。","依赖风险：运行时依赖仅 commander 与 undici，依赖面较小，undici 基线版本为 7.29.0；但使用脱字符版本范围，且本次无法完整读取当前 pnpm-lock.yaml 的传递依赖图，也未验证 npm 已发布 dist 与 GitHub 源码逐字一致。","混淆与后门：已检查 package.json、cordis.patch.yml、dsh/index.js、src/search.ts、src/providers/antigravity.ts、src/providers/tavily.ts、INSTALL.md 和安全文档，未发现 eval、new Function、Base64 载荷、自解密代码、隐藏矿工、反调试或静默持久化逻辑。","权限越界：cordis.patch.yml 会将 DSH 的 web/searchProvider seam 指向该插件；Antigravity 默认跳过权限确认；local 引擎可通过 allowPrivateNetwork 主动关闭 SSRF 私网保护；MODSEARCH_DSH_CLI 还能通过环境变量替换被 Node 执行的 CLI 文件。上述能力均有功能用途，但不适合在保存大量生产凭据的宿主机上无隔离运行。"],"report_md":"## 安全评分\n\n**51/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：liustack/modsearch\n\n## 概述\n\n本次审查按照 MyDSH 六维度标准，对 `liustack/modsearch` 的安装、运行、网络访问、凭据处理、依赖和 DSH 集成路径进行了静态分析。结论是：**没有发现能够证明项目为恶意软件的后门、混淆载荷或静默持久化行为，但该项目不能被认定为可在任意宿主机上“放心使用”**。主要原因不是传统木马，而是它会启动外部 AI CLI、继承宿主机环境变量、使用跳过权限确认的参数，并在安装文档中提供 `curl | bash` 形式的远程脚本执行方式。综合评分为 **49/100，建议谨慎使用并保持人工审核，不建议直接进入 MyDSH 无条件发布名单**。\n\n## 评估对象\n\n- 仓库：`liustack/modsearch`\n- 评估分支：`main`\n- 仓库类型：TypeScript/JavaScript CLI、Agent Skill 与 DSH 插件\n- 可见规模：仓库主页显示约 174 次提交；根目录包含 `docs/`、`dsh/`、`evals/`、`scripts/`、`skills/`、`src/` 等模块，`dsh/index.js` 为约 1,526 行的独立插件入口。\n- 版本状态：当前仓库页面的 `package.json` 显示 5.4.3，而可读取的提交历史页面最后明确展示的是 2026-08-15 的 5.4.2 发布提交，两个页面存在缓存新鲜度差异。\n- 时间核验限制：已尝试访问指定 GitHub Repository API，但当前执行环境未返回 API JSON；因此 `updated_at` 使用最后可独立核实的 2026-08-15 日期并标准化为 UTC 零点，**不应被当作精确的 API `pushed_at` 时刻**。正式发布前必须再次调用 Repository API 替换为精确时间。\n\n## 逐维度分析\n\n### 一、代码执行\n\n**检查内容：** `package.json` 的生命周期脚本、`INSTALL.md` 的安装命令、`src/search.ts` 的子进程调用、`src/providers/antigravity.ts` 的代理参数，以及 `dsh/index.js` 的 CLI 启动逻辑。\n\n**发现：** `package.json:9-20` 只有开发、构建、测试、发布和文档脚本，没有 `install`、`postinstall` 或 `prepare`，普通 npm 安装不会自动执行仓库脚本。`src/search.ts:107-173` 使用 `spawn(command, args, ...)`，参数以数组传递，未发现 `shell: true` 或将用户输入拼接进 shell 命令的实现，这对命令注入有正面作用。\n\n但是，`INSTALL.md` 包含 `curl -fsSL https://antigravity.google/install | bash`，会把网络返回内容直接交给 shell；`src/providers/antigravity.ts:24-70` 构造的参数包含 `--dangerously-skip-permissions`。即使查询内容被作为独立参数传递，外部 Agent 本身仍以跳过权限确认的模式运行。项目安全文档也承认提示词只能降低风险、不能提供绝对保证，并建议在需要更强隔离时使用容器或虚拟机。\n\n**风险程度：较高。** 未发现隐藏命令注入，但存在明确、文档化的远程脚本执行和高权限外部代理执行面。\n\n### 二、数据外发\n\n**检查内容：** `src/providers/`、`docs/configuration.md`、`docs/security.md`、`SKILL.md` 与安装文档中的网络服务配置。\n\n**发现：** 搜索词、URL 和部分抓取结果会依据引擎发送至 Antigravity、Grok、Tavily、Exa 或 Firecrawl。`docs/configuration.md` 还允许为 Tavily、Exa、Firecrawl 设置自定义 `baseURL`，这意味着操作者能够把查询内容和对应 API Key 发往非官方服务器。`local` 引擎不依赖搜索 API，但会直接连接用户指定的网站；这属于功能必需的网络外发，而不是静默遥测。\n\n项目提供了 SSRF 防护：`docs/security.md:13-29` 说明默认阻止私网、回环、链路本地、云元数据与保留地址，并对重定向逐跳复核和进行 DNS 固定。但 `allowPrivateNetwork` 可以全局关闭该边界，开启后程序具备访问局域网服务的能力。\n\n**风险程度：中等。** 未发现隐蔽遥测，但远程引擎和自定义端点会接收用户查询、URL 或页面内容，用户必须了解数据接收方。\n\n### 三、敏感信息读取\n\n**检查内容：** 对 `process.env`、主目录路径、配置文件、SSH/DSH 凭据关键词及子进程环境传递进行检查。\n\n**发现：** 未发现读取 `~/.ssh`、私钥、浏览器 Cookie、`~/.dsh` 凭据目录或遍历用户主目录的代码。项目会读取 `~/.modsearch/config.json`，并使用 `TAVILY_API_KEY`、`EXA_API_KEY`、`FIRECRAWL_API_KEY` 等明确属于本功能的变量。\n\n需要注意的是，`dsh/index.js:1496-1502` 使用 `spawn(process.execPath, [cliPath, ...args], { env: process.env })`，会把完整宿主环境传入子进程，而不是只允许必要变量。Antigravity/Grok 等外部 CLI 默认也会继承调用进程环境。如果宿主机同时保存云平台、数据库、GitHub、支付或生产系统 token，这些凭据会进入外部 CLI 的可见环境，形成不必要的暴露面。\n\n**风险程度：中等。** 没有主动偷取凭据，但环境变量的全量继承不符合最小暴露原则。\n\n### 四、依赖风险\n\n**检查内容：** `package.json:68-79` 的运行时和开发依赖、版本范围、发布脚本与构建产物范围。\n\n**发现：** 运行时依赖只有 `commander ^13.1.0` 和 `undici ^7.29.0`，依赖面相对克制。`undici` 的基线版本已经包含 2026 年 7 月发布的多项安全修复；未发现项目主动引入原生二进制下载器、生命周期安装器或大量低信誉包。\n\n风险在于依赖采用 `^` 范围，消费者重新安装时可能解析到未经本次审查的新版本；同时，实际执行入口是 `dist/main.js`，而源码仓库通过 `prepublishOnly` 在发布时构建。此次未能完成 npm tarball、`dist` 构建结果与 GitHub 源码的一致性校验，也未能完整验证当前锁文件的所有传递依赖。\n\n**风险程度：低到中等。** 当前声明依赖较少，但发布物一致性和传递依赖仍需供应链验证。\n\n### 五、混淆或后门\n\n**检查内容：** `eval`、`new Function`、动态模块下载、Base64/十六进制大载荷、自解密逻辑、反调试、挖矿、隐蔽持久化、异常网络域名和静默文件写入。\n\n**发现：** 已审查文件采用可读的 TypeScript/JavaScript；未发现动态求值、混淆字符串表、加密载荷、矿池地址、启动项植入或隐蔽回连。`package.json:17` 的 `release` 脚本会调用仓库内 `scripts/release.mjs`，但不在用户安装阶段运行。配置与状态写入集中在 `~/.modsearch/`，与产品功能一致。\n\n**风险程度：低。** 当前证据不支持“恶意”结论。\n\n### 六、权限越界\n\n**检查内容：** DSH seam 修改、外部代理权限、私网访问开关、CLI 路径覆盖及全局 Skill 安装目录。\n\n**发现：** `cordis.patch.yml:1-10` 注册 `@liustack/modsearch` 并把 `/seams/web/searchProvider` 指向该插件，启用后会接管 DSH 的网页搜索提供者。`dsh/index.js:1309-1323` 支持通过 `MODSEARCH_DSH_CLI` 环境变量覆盖被 Node 执行的 JavaScript 文件路径；如果环境变量可被不可信启动器修改，就可能执行非预期脚本。安装流程还会向 `~/.codex/skills`、`~/.claude/skills`、`~/.agents/skills` 等目录复制技能文件，扩大多个 AI 工具的可执行能力面。\n\n此外，`--dangerously-skip-permissions` 和 `allowPrivateNetwork` 分别放宽代理操作确认及网络边界。它们不是隐藏后门，但属于高影响配置，不应以默认方式部署到保存生产凭据的开发机、跳板机或服务器。\n\n**风险程度：较高。** 权限扩大具有明确功能目的，但默认边界不满足生产级最小权限要求。\n\n## 风险点汇总\n\n1. 安装文档提供未经校验的 `curl | bash` 远程执行方式。\n2. Antigravity 外部代理使用 `--dangerously-skip-permissions`。\n3. 子进程继承完整 `process.env`，可能接触无关生产 token。\n4. 查询、URL 和抓取内容会发送到多个第三方服务或自定义 `baseURL`。\n5. `allowPrivateNetwork` 可关闭 SSRF 私网隔离。\n6. `MODSEARCH_DSH_CLI` 可覆盖 DSH 实际执行的 JavaScript 路径。\n7. 尚未证明 npm 发布包中的 `dist` 与当前 GitHub 源码完全一致。\n8. 正面因素包括：无 npm 安装期脚本、无 shell 字符串拼接、未发现 eval/混淆/持久化后门、默认设计包含 SSRF 防护。\n\n## 结论与使用建议\n\n**最终判定：存在风险；用户建议：谨慎用。**\n\n该项目不像恶意软件，但也不能让普通用户在保存大量敏感凭据的宿主机上无条件放心运行。允许使用的前提应当是：在容器、虚拟机或独立低权限系统账户中运行；使用最小化环境变量白名单；优先选择 `local` 或明确可信的官方 API 端点；保持 `allowPrivateNetwork=false`；不要直接执行 `curl | bash`，而应先下载、固定版本、核对内容和校验值；不得让不可信进程控制 `MODSEARCH_DSH_CLI`；发布前对 npm tarball、构建产物和 GitHub 提交做可复现一致性校验。\n\nMyDSH 当前应执行 `review`，暂不直接 `release`。只有在移除或隔离 `--dangerously-skip-permissions`、对子进程环境实施白名单、改造远程安装流程、完成发布物一致性验证，并通过 GitHub API重新核实精确 `default_branch` 与 `pushed_at` 后，才适合进入可推荐名单。\n","action":"review","reviewed_at":"2026-08-17T13:28:01.197516+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":51,"score_type":"safety","review_status":"complete"},{"full_name":"QCYTSN/dsh-dafeiyu","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T13:25:39Z","summary":"未发现恶意外联或凭据窃取，但自动执行的发布版 EXE 无法由仓库源码完整复核。","details":["维度1（代码执行）：未发现 preinstall、install、postinstall、eval、动态下载或 curl|sh；但插件加载后会通过 src/helper-process.js 启动 Python helper 或 Windows EXE，并默认继承宿主进程全部环境变量。发布清单包含 EXE，而源码仓库未提供对应预编译文件，属于需要人工复核的执行链风险。","维度2（数据外发）：检查 src/、lib/client.js、runtime/helper.py 后，未发现遥测、Webhook、上传接口、第三方 API 或自动网络请求。前端仅访问同源的本地配置端点，默认 WebUI 地址也是 127.0.0.1；打开 WebUI 必须由用户在菜单中主动触发。","维度3（敏感读取）：未发现读取 ~/.ssh、私钥、浏览器凭据或环境 token 的代码；文件读取主要是 WSL 状态文件、宠物素材和 ~/.dsh/dsh-dafeiyu/layout.json。主要问题是子进程获得完整 process.env，如果发布版 EXE 被替换或构建链失陷，宿主中的 API Key、Token 等环境变量会处于其可访问范围。","维度4（依赖风险）：npm 运行时依赖仅 @deepseek-ai/schemastery，pnpm-lock.yaml 固定了解析版本及完整性哈希；Python 依赖 PySide6>=6.7,<7 未固定补丁版本和文件哈希。playwright-core 仅为开发依赖，当前 1.62.1 高于已披露相关漏洞的修复版本 1.55.1。","维度5（混淆或后门）：JavaScript、Python 和 PowerShell 源码可读，未发现加密载荷、Base64 执行、动态 Function、远程下载器或隐藏持久化。不能排除的部分是发布包中自动启动的 PyInstaller EXE：该二进制不在当前 GitHub 树中，缺少可复现构建、公开哈希、签名发布和源码到二进制对应证明。","维度6（权限越界）：未请求管理员权限、sudo、注册表启动项或系统服务，进程以当前用户权限运行；本地配置接口限制为回环地址、校验 Origin、限制请求体并设置字段白名单。插件会全局监听 DSH 会话事件并向桌面 helper 传递项目名、任务和状态，因此存在本机屏幕展示及环境继承层面的隐私边界。"],"report_md":"## 安全评分\n\n**51/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 插件安全分析报告：QCYTSN/dsh-dafeiyu\n\n## 概述\n\n本次审查按照《MyDSH 安全报告标准》，对代码执行、数据外发、敏感信息读取、依赖风险、混淆或后门、权限越界六个维度进行了静态审计。审计覆盖 `package.json`、`cordis.patch.yml`、`pnpm-lock.yaml`、`requirements.txt`、`src/`、`lib/client.js`、`runtime/`、`scripts/` 及安装生命周期配置。\n\n结论是：**未发现恶意外联、凭据窃取、远程下载执行、持久化后门或管理员权限提升代码，但当前发布链存在一个不能忽略的缺口——插件会自动执行预编译 Windows EXE，而该 EXE 不在受审 GitHub 源码树中，无法证明其与公开 Python 源码完全一致。** 因此本项目不能按“放心用”直接放行，应进入人工复核流程。仓库公开页面也明确说明，源码检出当前不提供可直接使用的预编译 helper。\n\n## 评估对象（分支、更新时间、仓库规模）\n\n- 仓库：`QCYTSN/dsh-dafeiyu`\n- 实际默认分支：`main`\n- `master` 检查结果：分支列表中不存在 `master`，因此最终按 `main` 评估\n- 仓库 API `pushed_at`：`2026-08-17T13:25:39Z`\n- 审计提交：`e45531c238e522834c541eebd1ae04300e71c120`\n- 提交时间：`2026-08-17T11:29:25Z`\n- 版本：`0.1.0-alpha.11`\n- GitHub API 仓库规模：约 4381 KB，主要语言为 JavaScript\n- npm 发布元数据：84 个文件，解包大小约 55.95 MB\n- 审计限制：本报告完成了源码和发布元数据审查，但未在隔离沙箱中动态引爆或逆向分析发布版 EXE，因此不能对该二进制作无条件安全背书\n\n仓库采用 JavaScript 插件、Python/PySide6 桌面 helper 和 Web 设置界面的组合架构；插件默认启用，并在运行时启动桌面 helper。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 的安装及生命周期脚本、`cordis.patch.yml`、`src/index.js`、`src/helper-process.js`、`scripts/build-helper.ps1`、`scripts/test-packaged-helper.mjs`。\n\n**发现：**\n\n1. `package.json:45-54` 只有测试、开发运行、构建和打包测试命令，没有 `preinstall`、`install`、`postinstall`、`prepare` 或下载脚本，因此安装 npm 包时不会仅凭生命周期钩子执行代码。\n2. 未发现 `eval`、`new Function`、`child_process.exec`、PowerShell 下载器或 `curl|sh`。\n3. 插件被 DSH 加载后会执行本地进程。`src/index.js:168-203` 创建 `HelperProcess` 并调用 `bridge.start()`；`src/helper-process.js:47-60` 优先选择预编译 EXE，否则运行 Python；`src/helper-process.js:103-124` 使用 `spawn(command, args)` 启动进程。\n4. Windows/WSL 下若预编译 helper 存在，将执行 `runtime/bin/win32-x64/dsh-dafeiyu-helper.exe`。`package.json:15-35` 将该文件列入发布清单，但 GitHub 源码树中没有该文件；README 也说明源码检出不提供可直接使用的预编译 helper。\n5. `scripts/build-helper.ps1:17-38` 使用本地 PyInstaller 和 PySide6 生成 one-file EXE，没有网络下载行为；但项目没有公开可复现构建工作流、二进制哈希清单或构建证明。\n\n**证据：** `src/helper-process.js` 中存在 `spawn(command, [...args, ...extraArgs], ...)`；Windows 路径返回 `{ command: bundledPath, args: [] }`；WSL 路径使用 `cmd.exe /d /c` 启动 Windows EXE。\n\n**风险程度：较高。** 执行桌面 helper 是插件功能所必需，不等同于恶意行为；风险来自“实际执行的发布二进制无法由本次受审源码完整验证”。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** `src/` 的 URL、HTTP、WebSocket 和 fetch 使用，`lib/client.js` 的网络请求，`runtime/helper.py` 的导入模块和 URL 打开逻辑。\n\n**发现：**\n\n1. 未发现 `requests`、`urllib`、`socket`、第三方 SDK、遥测平台、Webhook、远程日志上传或自动更新接口。\n2. `lib/client.js:60-91` 仅通过相对路径访问 `/plugins/dsh-dafeiyu/config`，属于当前 DSH WebUI 的同源本地请求，没有固定第三方域名。\n3. `src/index.js:184` 设置的默认 WebUI 地址为 `http://127.0.0.1:3080/`。\n4. `runtime/helper.py` 中的 `QDesktopServices.openUrl(QUrl(self.webui_url))` 只在用户主动点击“打开 WebUI”菜单项时执行，不属于后台自动外发。管理员若主动把 `webuiUrl` 改成外部地址，点击后会打开该地址，但这不是默认行为。\n5. 未发现任务内容、会话信息、环境变量或本地文件被发送到互联网的路径。\n\n**证据：** `lib/client.js` 使用 `fetch(CONFIG_ENDPOINT)` 和同一相对端点的 PATCH；配置端点由插件本地注册。\n\n**风险程度：低。** 当前源码未呈现数据外发能力。\n\n### 3. 敏感读取\n\n**检查内容：** 对 `~/.ssh`、私钥文件、DSH 凭据、环境变量、Token、浏览器数据、系统配置文件和任意目录遍历的检查。\n\n**发现：**\n\n1. 未发现访问 `~/.ssh`、SSH 私钥、Git 凭据、浏览器 Cookie、云厂商凭据或 DSH Token 的代码。\n2. `src/helper-process.js:16-27` 只读取 `/proc/sys/fs/binfmt_misc/WSLInterop` 和 `/proc/version` 判断是否处于 WSL。\n3. `runtime/layout_store.py:28-38` 默认读取和写入 `~/.dsh/dsh-dafeiyu/layout.json`，内容仅为窗口坐标、缩放、动画和气泡显示设置，不读取 `~/.dsh` 下的其他凭据文件。\n4. `src/helper-process.js:119-124` 启动子进程时使用 `env: { ...process.env, ...this.options.env }`，即完整继承 DSH 宿主的环境变量。公开 Python 源码只读取 `DSH_DAFEIYU_*`、`DSH_HOME`、`LOCALAPPDATA` 等特定变量，但预编译 EXE 在技术上能够访问全部继承变量。\n5. 当设置 `DSH_DAFEIYU_EVENT_LOG` 时，helper 会把收到的协议消息追加到指定 JSONL 文件；该功能默认不开启，但启用后可能落盘项目名、任务名称和状态摘要。\n\n**证据：** `runtime/layout_store.py` 的默认路径为 `Path.home() / '.dsh' / 'dsh-dafeiyu' / 'layout.json'`；`src/helper-process.js` 明确展开 `process.env`。\n\n**风险程度：中等。** 没有发现主动窃取，但完整环境继承会放大不可审计二进制的潜在影响。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、`pnpm-lock.yaml`、`requirements.txt`、运行时与开发依赖、完整性锁定及安装脚本。\n\n**发现：**\n\n1. npm 运行时依赖只有 `@deepseek-ai/schemastery`；锁文件将其固定为 3.18.1，并记录 SHA-512 完整性值，同时固定了 `@deepseek-ai/cosmokit` 和 `@standard-schema/spec`。\n2. `package.json` 仍使用 `^3.18.1`。在严格按锁文件安装时风险可控；如果下游忽略锁文件，则可能自动解析未来兼容版本。\n3. Python 依赖为 `PySide6>=6.7,<7`，没有固定补丁版本、平台 wheel 哈希或依赖锁文件，构建结果会随安装时间变化，不利于可复现构建。\n4. `playwright-core@1.62.1` 是开发依赖，不会进入 `files` 发布清单；其版本高于已披露 Playwright 下载源完整性问题的修复版本 1.55.1。\n5. 未发现依赖安装阶段的自定义执行钩子，但本次审查不等于完整的传递依赖动态漏洞扫描。\n\n**证据：** `package.json:42-53`、`package.json:85-87`、`pnpm-lock.yaml:1-45`、`requirements.txt:1`。\n\n**风险程度：低到中。** npm 依赖面较小且有完整性锁定；Python 构建链缺少精确锁定和哈希。\n\n### 5. 混淆、后门与供应链一致性\n\n**检查内容：** JavaScript/Python 可读性、编码载荷、反调试、动态代码加载、远程模块、二进制文件、提交和发布可验证性。\n\n**发现：**\n\n1. `src/`、`runtime/` 和 `scripts/` 源码结构清晰，未发现 Base64 解码执行、加密字符串表、动态 `import()` 远程地址、反调试、隐藏计划任务或注册表持久化。\n2. `lib/client.js` 虽然是构建后的模块包装形式，但仍然可读，没有典型恶意混淆特征。\n3. 最大问题是发布清单中的 PyInstaller EXE 不在当前 GitHub 仓库树内。GitHub 仓库约 4.3 MB，而 npm 发布元数据解包约 55.95 MB，两者规模差异与大型预编译 helper 一致；但在没有二进制哈希、源码提交标识、签名和可复现构建日志的情况下，无法证明发布二进制就是 `runtime/helper.py` 的纯构建结果。\n4. `main` 当前未开启分支保护，审计提交的 Git 验证状态为 unsigned，GitHub Releases 也没有独立签名发布物。这些不是恶意证据，但说明供应链治理尚未达到可无条件信任的生产级标准。\n5. 存在版本信息不一致：`package.json` 为 alpha.11，而 `src/index.js` HELLO 消息仍报告 alpha.7，README 页面仍显示 alpha.10。这会影响故障追踪和安全事件中的版本识别。\n\n**证据：** `package.json:3`、`package.json:15-35`、`src/index.js:189-194`，以及 README 关于源码检出不包含预编译 helper 的说明。\n\n**风险程度：较高。** 未发现源码后门，但源码与最终执行物之间存在关键审计断点。\n\n### 6. 权限越界\n\n**检查内容：** 管理员权限、sudo、系统服务、注册表、自启动、任意命令参数、本地接口和 DSH 会话访问范围。\n\n**发现：**\n\n1. 未发现管理员权限申请、UAC 提权、sudo、系统服务安装、注册表 Run 项、计划任务或系统目录写入。\n2. helper 以当前 DSH 用户身份运行，因此可以访问该用户本来可访问的文件和环境变量，但不会自动获得更高系统权限。\n3. 插件通过全局 `session/event` 和 `session/disposed` 监听所有 DSH 会话。它主要提取会话 ID、项目名、任务名称、工具名称和状态摘要，并传给本机桌面 helper；未发现将完整对话主动上传网络，但桌面气泡可能在屏幕上展示任务信息。\n4. 本地配置接口有回环地址限制、Origin/Host 一致性检查、8 KB 请求体上限和字段白名单，不能通过该接口直接注入 helper 命令。\n5. 接口没有独立身份认证，且无 Origin 请求仍会被接受；不过攻击者必须能够访问本机端口，且可修改的字段仅为启用状态、缩放、动画和气泡设置，直接安全影响有限。\n\n**证据：** `src/index.js:73-120`、`src/index.js:207-217`、`src/helper-process.js:119-124`。\n\n**风险程度：低到中。** 没有系统级越权，但会话可见范围和环境继承范围较宽。\n\n## 风险点汇总\n\n| 编号 | 风险点 | 可能影响 | 优先级 |\n|---|---|---|---|\n| R1 | 自动执行的 Windows EXE 不在受审 GitHub 源码树内 | 无法确认发布二进制与公开源码一致；若发布链失陷，可在用户权限下执行任意行为 | 高 |\n| R2 | helper 子进程继承完整 `process.env` | 发布二进制可接触宿主中的 API Key、Token 和代理凭据 | 高 |\n| R3 | Python 依赖未精确锁定或校验 wheel 哈希 | 构建不可复现，未来构建结果可能发生变化 | 中 |\n| R4 | 全局监听 DSH 会话并在桌面显示任务摘要 | 可能造成屏幕侧隐私暴露；启用事件日志时会落盘状态信息 | 中 |\n| R5 | main 未保护、提交未签名、没有签名 Release 或构建证明 | 供应链变更追踪和发布物真实性保障不足 | 中 |\n| R6 | 版本号在 package、运行时 HELLO 和 README 中不一致 | 安全响应、日志定位和版本核验容易出现误判 | 低 |\n\n## 结论与使用建议\n\n**最终结论：存在风险，用户应谨慎使用，当前不建议按“放心用”直接发布。**\n\n本次没有发现能够证明该插件为恶意软件的代码证据：没有第三方数据外发、凭据扫描、远程脚本下载、安装钩子执行、权限提升或持久化后门。其大多数源代码行为与桌面宠物和 DSH 状态展示功能一致。\n\n但是，实际安装版本可能自动执行一个源码仓库中不存在的预编译 EXE，而且该进程继承宿主全部环境变量。只要这一执行物无法通过公开 CI 从指定提交复现并校验，就不能把源码审查结果直接等同于发布包安全。因此建议 MyDSH 将该项目标记为 `review`，不要自动放行。\n\n用户如确需使用，应满足以下条件：\n\n1. 优先从审计提交自行构建 helper，或显式配置为运行公开的 Python helper，而不是直接信任未知来源的预编译 EXE。\n2. 在无高价值 SSH 私钥、云凭据、生产 Token 的低权限账户或隔离环境中运行，并尽量清理传给 DSH 的环境变量。\n3. 对 npm tarball 和 EXE 记录 SHA-256，执行多引擎恶意文件扫描和隔离环境动态行为检查。\n4. 要求维护者提供固定 PySide6 版本及哈希、SBOM、GitHub Actions 可复现构建、构建产物哈希、签名 Release 和受保护分支。\n5. 修正 package、README 与运行时上报版本不一致的问题后，再重新进行发布物级别审计。\n\n在上述供应链问题修复并完成 EXE 动态验证前：**普通测试环境可以谨慎试用；持有生产密钥、SSH 凭据或重要项目数据的开发机不应直接安装当前预编译版本。**\n","action":"review","reviewed_at":"2026-08-17T13:43:12.437115+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":51,"score_type":"safety","review_status":"complete"},{"full_name":"Han-1413141/dsh-cost-meter","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-17","summary":"未见恶意后门，但密钥明文持久化、前端回传及权限声明缺口需整改。","details":["代码执行：package.json 未定义 preinstall、postinstall 等生命周期脚本，运行时代码未发现 eval、Function 或 child_process；但推荐安装方式为远程 PowerShell 脚本直接 irm | iex，并会执行 corepack、npm 全局安装及 dsh plugin add。虽固定到 v1.4.0 和 pnpm 11.21.0，仍缺少提交哈希锁定及内容校验，风险程度中等。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/install.ps1))","数据外发：代码会访问 api-docs.deepseek.com 获取价格、向 api.deepseek.com/user/balance 发送 DeepSeek Bearer Token，并向 opencode.ai/zen/go/v1/usage 发送 OpenCode Go Bearer Token；未发现广告、分析或未知统计域名。DeepSeek 余额请求有严格域名校验，但 package.json 的网络权限声明遗漏 opencode.ai，存在声明与实际行为不一致。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/package.json))","敏感读取：插件会读取 DSH 凭据库、DEEPSEEK_API_KEY、OPENCODE_GO_API_KEY、OPENCODE_API_KEY，以及用户目录下多个 opencode/auth.json。Go 额度默认启用，意味着打开插件界面后可能自动发现并使用现有登录凭据。更重要的是，手工填写的 goQuota.apiKey 会进入普通配置对象、明文写入 ledger.json，并随 getState 的完整 config 返回浏览器端，风险程度中等偏高。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/index.js))","依赖风险：当前发布清单包含 @deepseek-ai/dsh-credentials、@deepseek-ai/dsh-home-paths 和 zod，均使用范围版本而非精确版本；仓库存在 pnpm-lock.yaml，但本次 Web 抓取未能展开锁文件，无法完成逐项 CVE 与完整性校验。安装器还可能全局安装 pnpm，扩大供应链执行面。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/package.json))","混淆与后门：已读取的 index.js、pricing.js、store.js 和安装脚本均为可读源码，未发现 Base64 载荷、动态下载后执行、加密字符串、反调试、隐藏定时任务或条件触发后门。client.js 为大型单文件前端，但 GitHub 抓取缓存比当前版本落后，不能据此对最新前端代码作百分之百无遗漏保证。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/index.js))","权限越界：运行时写入范围主要是 $DSH_HOME/storages/cost-meter/ledger.json，安装器修改指定 DSH web profile，并可通过 RPC 更新配置和清空费用历史；未发现读取 ~/.ssh、sudo、管理员提权或遍历无关用户文件。但默认读取 OpenCode 登录文件、未声明 opencode.ai 网络访问，以及把密钥下发到浏览器端，均超出了普通费用统计插件的最小权限范围。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/store.js))"],"report_md":"## 安全评分\n\n**51/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次对 `Han-1413141/dsh-cost-meter` 进行了六维静态安全审查。结论是：**没有发现木马、恶意后门或主动窃取无关凭据的证据，但当前版本不能归类为“放心用”**。主要问题不是明显恶意代码，而是 OpenCode Go 密钥的处理方式不符合生产级最小暴露原则：插件默认自动读取本机 OpenCode 登录凭据，允许把 API Key 写入普通配置，配置又会被明文持久化并完整返回浏览器端；同时实际访问的 `opencode.ai` 未出现在包清单声明的网络权限中。综合评分为 **49/100，建议进入人工整改复审，不建议直接作为社区安全通过插件发布**。\n\n## 评估对象\n\n- 仓库：`Han-1413141/dsh-cost-meter`\n- 评估分支：`master`，仓库页面显示该分支为默认展示分支，共 43 次提交。\n- 当前版本：`package.json` 为 `1.5.0`，对应标签 `v1.5.0`，标签日期为 2026-08-17。\n- 更新时间：Web 可确认到 2026-08-17；按要求尝试访问 GitHub REST 仓库 API，但抓取层返回缓存未命中，无法取得精确到秒的 `pushed_at`。为避免伪造时间，本报告仅填写已确认的 ISO 日期。\n- 仓库规模：核心目录包含 6 个 `lib` 文件、安装器、补丁、测试、文档和 CI；其中 `index.js` 653 行、`client.js` 1626 行、`install.ps1` 100 行，属于中等规模插件。([github.com](https://github.com/Han-1413141/dsh-cost-meter))\n- 审查范围：重点读取了 `package.json`、`install.ps1`、`lib/index.js`、`lib/pricing.js`、`lib/store.js`、前端文件元数据、仓库结构与安装文档。`cordis.patch.yml`、`scripts/`、`coding-plans.js` 和锁文件正文因 GitHub Web 缓存未展开；其中 `scripts/` 与 `coding-plans.js` 未列入 package.json 发布文件清单，运行时影响较低，但仍构成本次审查的残余不确定性。([github.com](https://github.com/Han-1413141/dsh-cost-meter/tree/master/lib))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`install.ps1`、宿主入口的动态执行和进程调用。\n\n**发现：** `package.json` 未定义 `preinstall`、`install`、`postinstall` 等 npm 生命周期脚本；已读取的运行时代码也未发现 `eval`、`new Function`、`child_process.exec`、`spawn` 或 `curl | sh`。但是 README 推荐命令为 `irm .../install.ps1 | iex`，安装器还会执行 `corepack prepare`、必要时执行 `npm install -g pnpm@11.21.0`，随后运行 `dsh plugin add` 获取并安装仓库内容。\n\n**证据：** `install.ps1` 中固定 `$Rev = 'v1.4.0'`、`$PnpmVersion = '11.21.0'`，并调用 `corepack prepare`、`npm install -g` 和 `dsh plugin --profile ... add $spec`。固定版本优于直接拉取主分支，但 Git tag 可被仓库维护者移动，且脚本没有 SHA-256、签名或不可变 commit SHA 校验。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/install.ps1))\n\n**风险程度：中等。** 不属于静默恶意执行，但一键管道执行和全局包安装会把远程供应链直接引入用户机器。推荐下载安装脚本后人工审阅，并把安装来源锁定到完整提交哈希。\n\n### 2. 数据外发\n\n**检查内容：** 所有可见 `fetch` 目标、Bearer Token 发送位置、官方价格同步和配额查询。\n\n**发现：** 明确外联目标包括：`api-docs.deepseek.com`、`api.deepseek.com` 和 `opencode.ai`。价格同步仅抓取公开定价页；DeepSeek 余额请求只允许主机严格等于 `api.deepseek.com`，能阻止把模型 API Key 发往自定义代理或类似后缀钓鱼域名；OpenCode Go Key 固定发送到 `https://opencode.ai/zen/go/v1/usage`。未发现分析 SDK、广告域名、Webhook、个人服务器或隐蔽 DNS 外发。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/pricing.js))\n\n**问题：** `package.json` 的 `dshhub.permissions.network` 只声明 `api.deepseek.com` 和 `api-docs.deepseek.com`，没有声明代码实际访问的 `opencode.ai`。这属于权限清单与真实行为不一致，会削弱用户在安装前进行知情审查的能力。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/package.json))\n\n**风险程度：中等。** 目标域名本身未显示恶意，但权限声明必须补齐，并应让 Go 配额功能默认关闭或首次使用时明确征得用户同意。\n\n### 3. 敏感信息读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、凭据服务、其他应用登录文件及密钥生命周期。\n\n**发现：** 未发现读取 `~/.ssh`。插件会从 DSH 凭据服务和环境变量读取 DeepSeek Key；OpenCode Go Key 的解析顺序为：手工配置、DSH 凭据库、`OPENCODE_GO_API_KEY`、`OPENCODE_API_KEY`、最后读取 `~/.local/share/opencode/auth.json`、`$XDG_CONFIG_HOME/opencode/auth.json` 或 `~/.config/opencode/auth.json`。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/index.js))\n\n**关键风险：** 默认配置包含 `goQuota.apiKey` 字符串字段。`store.js` 使用 `JSON.stringify({ version, config: this.config, days: this.days })` 将整个配置写入 `$DSH_HOME/storages/cost-meter/ledger.json`，没有对 API Key 剔除、加密或单独设置 `0600` 权限；`buildState` 又直接返回 `config: ledger.config`，因此手工填写的密钥可能被持久化并通过 Typert RPC 下发到浏览器。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/store.js))\n\n**风险程度：中等偏高。** 这是本报告最重要的问题。应彻底禁止把密钥放入普通配置，仅保存凭据引用；服务端返回状态前必须删除 `apiKey`，前端只能收到 `configured: true/false` 和脱敏尾号。\n\n### 4. 依赖风险\n\n**检查内容：** 直接依赖、版本约束、锁文件、安装期间新增工具及生命周期行为。\n\n**发现：** 当前直接依赖为 `@deepseek-ai/dsh-credentials ^0.1.0-rc.6`、`@deepseek-ai/dsh-home-paths ^0.1.0-rc.6` 和 `zod ^4.4.3`。依赖数量较少，但两个 DSH 包仍为 RC 阶段，且全部采用范围版本；仓库虽存在 `pnpm-lock.yaml`，本次无法读取锁文件正文，因此不能确认所有传递依赖版本和完整性散列。安装器还可能全局安装 pnpm。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/package.json))\n\n**风险程度：中低。** 发布前应执行锁文件级 SCA、许可证检查和恶意包扫描，并考虑将关键运行时依赖锁到精确版本。\n\n### 5. 混淆与后门\n\n**检查内容：** Base64/十六进制载荷、压缩混淆、动态导入、隐藏下载执行、反调试、定时触发和异常域名。\n\n**发现：** 已读取的宿主、价格、存储和安装代码结构清晰，函数名和注释可读；未发现 `eval`、动态 Function、加密载荷、反调试、隐藏矿工、启动项写入或条件后门。前端 `client.js` 为较大的单文件实现，但不是二进制；GitHub 抓取缓存落后于最新标签，因此最新前端新增部分仍需在发布前用完整 commit tarball 再做一次本地全文扫描。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/index.js))\n\n**风险程度：低，但存在审查完整性限制。** 当前没有恶意证据，不能据此判定为恶意仓库。\n\n### 6. 权限越界\n\n**检查内容：** 文件系统范围、宿主服务权限、配置修改、数据删除、网络清单和系统级操作。\n\n**发现：** 正常运行主要写入 `$DSH_HOME/storages/cost-meter/ledger.json`，安装阶段修改指定 DSH web profile；RPC 提供 `updateConfig`、`fetchPrices`、`refreshBalance`、`refreshGoQuota` 和 `resetHistory`。未发现 sudo、管理员权限请求、系统服务注册、SSH 文件读取或扫描整个用户目录。`resetHistory` 会清空费用历史，属于预期但有破坏性的功能，应依赖宿主认证并在 UI 二次确认。([github.com](https://github.com/Han-1413141/dsh-cost-meter/blob/master/lib/store.js))\n\n**越界点：** Go 配额默认启用，能够自动读取另一应用的登录文件；实际访问 `opencode.ai` 却未在网络权限中声明；密钥还会进入浏览器可见配置。这三项不符合最小权限原则。\n\n**风险程度：中等。** 在共享、远程暴露或多人可访问的 DSH Web 环境中风险明显高于单人 localhost 环境。\n\n## 风险点汇总\n\n| 编号 | 风险点 | 优先级 | 建议 |\n|---|---|---:|---|\n| S-01 | 手工 Go API Key 明文写入 ledger.json | 高 | 只保存凭据引用，迁移并删除历史明文 |\n| S-02 | `getState` 返回完整配置，可能把 Key 下发浏览器 | 高 | 服务端强制脱敏，不依赖前端隐藏 |\n| S-03 | 实际访问 opencode.ai，但权限清单未声明 | 中 | 补充域名声明并展示用途 |\n| S-04 | 默认读取 opencode auth.json | 中 | 改为默认关闭、首次启用明确授权 |\n| S-05 | `irm | iex`、全局安装 pnpm、无哈希校验 | 中 | 改为下载审阅、完整 commit SHA 和校验和 |\n| S-06 | 范围依赖与未完成锁文件 SCA | 中低 | 锁定版本并运行依赖漏洞扫描 |\n\n## 结论与使用建议\n\n**明确结论：用户目前不能把它当作“放心用”的插件。** 未发现恶意后门，因此不应定性为恶意；但密钥明文持久化、RPC 回传、默认跨应用读取凭据以及权限声明遗漏，均是生产级安全审查不能忽略的问题。\n\n个人本机、DSH Web 仅监听 localhost 且只有本人访问时，可以在以下条件下**谨慎使用**：关闭不需要的 OpenCode Go 配额功能；不要在界面手工填写 API Key；优先使用 DSH 凭据库；下载安装脚本后再运行，不执行未经核验的远程管道；检查并限制 ledger.json 文件权限。\n\n对于共享服务器、公网可达实例、团队环境或 MyDSH 社区正式推荐，建议暂缓发布，待维护者完成 S-01 至 S-04 后重新审查。整改完成前，本报告建议动作是 `review`，而不是 `release` 或 `block`。\n","action":"review","reviewed_at":"2026-08-17T13:52:43.176804+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":51,"score_type":"safety","review_status":"complete"},{"full_name":"AITabby/dockyard-dsh","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T11:06:22Z","summary":"未见恶意后门，但涉及凭据读取和进程启动，OAuth 回调监听范围需修复。","details":["维度1·代码执行：发现多处真实的本地进程启动，但未发现 eval、Function 构造器或 curl|sh。`modules/provider-codex/src/driver.mjs:48-61,159-166,228-244` 可通过 `DOCKYARD_CODEX_CLI_PATH` 选择可执行文件，并以参数数组启动 Codex CLI；`packages/oauth/src/cli-oauth-authorizer.mjs:214-252` 启动各服务商登录 CLI。实现使用 spawn/execFile 且未启用 shell，降低了参数注入风险，但插件被攻陷或环境变量遭篡改时可执行任意同权限程序。风险程度：中。","维度2·数据外发：Codex 驱动明确允许访问 `auth.openai.com` 和 `chatgpt.com`，并将用户提示词、工具输出和会话数据交给本地 Codex CLI，再由 CLI 发往模型服务商。仓库还声明 Claude、Cursor、Gemini、Grok 等提供商模块，因此其核心功能必然包含向对应服务商发送认证及推理数据；未发现独立广告、统计或隐蔽遥测域名。风险程度：中，属于功能必需外发，但用户不应提交未脱敏的生产秘密。","维度3·敏感读取：Codex 驱动会检查用户主目录中的 Codex 凭据候选文件，包括 `~/.codex/auth.json`，但状态接口只返回登录状态、账号标识和过期时间，没有直接返回原始 token。Vault 在 macOS 优先使用 Keychain；显式启用明文后备时，文件写入 `~/.dsh/server/vault` 并设置 0600 权限，但后备文件可同时保存密文与解密密钥，不能抵御同用户文件读取。Keychain 写入时秘密还会短暂作为 `security` 命令参数出现。风险程度：较高。","维度4·依赖风险：根 `package.json:8-19` 未声明 install/postinstall 生命周期；`packages/dsh-plugin/package.json:38-54` 的运行依赖主要是仓库内 `file:` 工作区包，并将 `fsevents` 设为可选依赖，外部依赖面较小。但子包包含 `prepare: node scripts/build-package.mjs`，若用户直接安装该子包会在安装阶段执行仓库构建脚本；根目录未见 npm/pnpm/yarn 锁文件，依赖解析和发布产物缺少可复现锁定证据。风险程度：中。","维度5·混淆与后门：检查 manifest、package 脚本、Codex 驱动、OAuth 授权器、Vault 和核心源码结构，未发现动态下载并执行代码、加密载荷解包、base64 后门、eval、隐藏矿工或刻意不可读变量。核心目录由具名 `.mjs` 模块组成，`packages/dsh-plugin/src` 共 12 个源文件、约 3216 行，生成的 `dist` 与源码同时存在。风险程度：低，当前没有恶意证据。","维度6·权限越界：`cordis.patch.yml:8-18` 注册了状态、配置、认证、导入、删除、启停及远程宿主能力，权限与账号池管理功能相符。主要缺陷位于 `packages/oauth/src/cli-oauth-authorizer.mjs:31-55`：临时 OAuth HTTP 服务调用 `server.listen(0)` 时未明确指定 `127.0.0.1` 或 `::1`，可能监听全部网络接口；这与项目安全文档要求本地服务仅绑定回环地址不一致。攻击需要获知随机端口及 OAuth state，但仍应在发布前修复。风险程度：中偏高。"],"report_md":"## 安全评分\n\n**51/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`AITabby/dockyard-dsh` 是一个面向 DeepSeek Harness 的本地账号池和多提供商插件，包含 Dockyard 桌面端、DSH 插件、OAuth 授权、系统凭据库以及 Claude、Codex、Cursor、Gemini、Grok 提供商模块。此次审计为静态源码审计，没有运行安装脚本、构建产物或登录流程。结论是：**当前没有发现恶意后门或隐蔽数据窃取，但插件天然拥有读取高价值凭据、启动本地 CLI、保存会话并向模型服务商传输内容的能力，同时存在 OAuth 回调未显式限制回环地址等需要修复的问题，因此不建议直接按“无风险插件”发布。**\n\n## 评估对象\n\n- 仓库：`AITabby/dockyard-dsh`\n- GitHub API 默认分支：`main`\n- 分支最后推送时间：`2026-08-17T11:06:22Z`\n- 仓库状态：24 次提交；根目录包含 `.github`、`docs`、`modules`、`packages`、`patches`、`scripts`、`vendor` 等 7 个主要目录。\n- 代码规模：`packages` 下有 6 个工作区包；`modules` 下有 Claude、Codex、Cursor、Gemini、Grok 5 个提供商模块；`packages/dsh-plugin/src` 包含 12 个源码文件、约 3216 行，其中主服务文件约 2090 行、原生密钥池宿主约 574 行。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 根目录及插件子包 `package.json`、`cordis.patch.yml`、Codex provider 驱动、OAuth CLI 授权器、Vault 系统命令调用和构建入口。\n\n**发现：** 未发现 `eval`、`new Function`、动态 URL import、`curl | sh` 或下载安装远程脚本后执行的逻辑。仓库存在多处 `spawn`、`execFile`，主要用于启动 Codex 等官方 CLI、执行 OAuth 登录、调用 macOS `security`、PowerShell DPAPI 和 Swift 编译器。这些执行能力与插件业务一致，但其安全性依赖插件源码、环境变量和 CLI 路径未遭篡改。\n\n**证据：**\n- `modules/provider-codex/src/driver.mjs:48-61`：从 `DOCKYARD_CODEX_CLI_PATH` 或默认值取得 CLI 路径，登录参数为固定数组。\n- `modules/provider-codex/src/driver.mjs:159-166,228-244`：使用 `spawn(cliPath, args)` 启动登录及会话进程，未设置 `shell: true`。\n- `packages/oauth/src/cli-oauth-authorizer.mjs:214-252`：使用提供商定义中的 CLI 路径和参数启动登录进程。\n- `package.json:8-19`：根包只有显式 build/test 脚本，没有 install/postinstall。\n\n**风险程度：中。** 不是后门式执行，但这是一个能够启动本地程序的高权限插件。环境变量若被不可信启动脚本、IDE 配置或其他进程污染，`DOCKYARD_CODEX_CLI_PATH` 等入口可能被用于替换实际执行程序。\n\n### 2. 数据外发\n\n**检查内容：** Provider 网络目标、OAuth URL、会话输入输出、工具结果转发、远程宿主配置以及遥测迹象。\n\n**发现：** Codex 驱动明确限制认证域名为 `auth.openai.com`，API 主机为 `chatgpt.com`；用户提示词、图片、工具调用结果和后续会话消息会交给 Codex CLI，由 CLI 发往服务商。仓库还加载 Claude、Cursor、Gemini 和 Grok provider，其认证和推理功能必然与对应厂商服务通信。检查到的代码未出现独立广告、行为分析、挖矿、Webhook 收集或不相关遥测域名。\n\n**证据：**\n- `modules/provider-codex/src/driver.mjs:56-61`：定义 `authorizationHosts: ['auth.openai.com']` 和 `apiHosts: ['chatgpt.com']`。\n- `modules/provider-codex/src/driver.mjs:325-390`：把会话提示词写入 Codex CLI 的 JSONL 输入流。\n- `modules/provider-codex/src/driver.mjs:423-432`：工具调用结果会继续写回 CLI 会话。\n- `modules/`：存在 5 个服务商模块。\n\n**风险程度：中。** 外发是模型插件的正常能力，但用户应默认认为输入的代码、文件片段、图片和工具结果可能到达所选择的模型服务商。仓库目前没有提供统一、用户可见的出站域名清单，建议发布前补充。\n\n### 3. 敏感文件与凭据读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、Codex/Claude 等客户端凭据、环境 token、系统钥匙串及本地 Vault。\n\n**发现：** 未发现读取 `~/.ssh` 私钥的代码。Codex 驱动会检查 provider 定义的凭据路径以及 `~/.codex/auth.json`；检查结果只生成登录状态、账号标识、认证方式和过期时间，没有把原始 access token 作为状态返回。Vault 在 macOS 使用 Keychain，在 Windows使用 DPAPI；另有需要显式开启的明文文件后备模式。\n\n**证据：**\n- `modules/provider-codex/src/driver.mjs:232-286`：遍历凭据候选文件并识别 `access_token`、`auth.access_token` 或 API key。\n- `packages/vault/src/index.mjs:16,79-151`：`allowPlaintext` 必须显式启用；后备文件写入 `~/.dsh/server/vault` 并执行 0600 权限控制。\n- `packages/vault/src/index.mjs:196-234`：macOS 使用 `security find-generic-password` 和 `add-generic-password` 操作 Keychain。\n\n**风险程度：较高。** 这是账号池的必要权限，但影响面涉及可直接调用付费模型的 OAuth token。明文后备文件在没有 `DSH_VAULT_KEY` 时会把密文和用于解密的随机 key 保存在同一个 JSON 中，本质上只能依赖文件权限保护；此外 Keychain 写入的 secret 作为 `security` 命令参数传递，可能被同用户的进程监视工具短暂看到。建议生产版本禁止明文后备模式，并减少命令行参数中的秘密暴露。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** 根包、插件包、provider manifest、依赖来源、锁文件、安装生命周期和预构建产物。\n\n**发现：** 根包没有第三方运行依赖，也没有 install/postinstall；插件子包的主要依赖均为 `file:../` 指向的仓库内工作区包，外部可选依赖仅见 `fsevents`。但根目录未见 `package-lock.json`、`pnpm-lock.yaml` 或 `yarn.lock`，无法基于仓库锁文件复现依赖解析。`packages/dsh-plugin/package.json` 声明了 `prepare`，直接安装或发布该子包时会自动执行 `scripts/build-package.mjs`。\n\n**证据：**\n- `package.json:8-19`：根包构建及测试脚本，无 install/postinstall。\n- `packages/dsh-plugin/package.json:38-44`：存在 `prepare: node scripts/build-package.mjs`。\n- `packages/dsh-plugin/package.json:45-54`：核心依赖为本地 `file:` 包，`fsevents` 为 optional dependency。\n- 仓库根目录清单未出现依赖锁文件。\n\n**风险程度：中。** 当前外部依赖面较小，但安装阶段执行构建脚本、无锁文件、源码与 `dist` 并存，会增加源码、发布包和实际运行产物不一致的审计成本。建议发布固定 commit/tag、生成锁文件、提供构建哈希及签名，并在 CI 中验证 `dist` 可由源码确定性重建。\n\n### 5. 混淆与后门\n\n**检查内容：** 可疑编码载荷、压缩混淆、动态代码生成、隐藏网络请求、删除痕迹、反分析逻辑及生成文件与源码关系。\n\n**发现：** 已检查的 manifest、OAuth、Vault、Codex 驱动和源码目录使用正常的模块命名及可读控制流；未发现 base64 解码后执行、加密载荷、反调试、远程下载模块、隐藏矿工或凭据打包上传。`dist` 属构建产物，`swift.mjs` 属嵌入式原生实现，不应仅因体积较大判定为混淆。\n\n**证据：** `packages/dsh-plugin/src`、`modules/provider-codex/src`、`packages/oauth/src` 和 `packages/vault/src` 均保留对应可读源码；Codex driver 以结构化 JSONL 事件处理会话，没有发现动态执行返回内容的分支。\n\n**风险程度：低。** 当前没有将项目认定为恶意软件的代码证据。\n\n### 6. 权限越界\n\n**检查内容：** DSH 工具注册、账号删除和启停权限、远程宿主、本地 HTTP/IPC 监听范围、文件权限和进程环境继承。\n\n**发现：** `cordis.patch.yml` 注册状态、配置、认证、导入、删除、启停和远程宿主能力，与账号池功能一致。OAuth 授权器创建随机端口 HTTP 服务器接收回调，但使用 `server.listen(0)`，没有显式指定 `127.0.0.1` 或 `::1`。Node 在这种情况下可能监听所有可用接口，与仓库安全文档要求本地服务仅绑定回环地址不一致。回调处理还会把请求 URL 写入本地 socket，虽然 OAuth state 应由后续 CLI 验证，但监听面仍不应暴露给局域网。\n\n**证据：**\n- `cordis.patch.yml:8-18`：启用 Dockyard 服务、工具服务、Vault、原生密钥池及 remote host。\n- `packages/oauth/src/cli-oauth-authorizer.mjs:31-55`：创建 HTTP server 并调用 `server.listen(0)`。\n- `packages/oauth/src/cli-oauth-authorizer.mjs:121-133`：回调 URL 被转发到本地 socket。\n- `SECURITY.md:27-31`：项目自身要求本地监听绑定 loopback 并限制 socket 权限。\n\n**风险程度：中偏高。** 尚无证据表明该问题可直接窃取 token，但它扩大了本地授权面的网络可达范围，应将监听修改为 `server.listen(0, '127.0.0.1')`，并验证 OAuth state、回调路径、请求方法和一次性使用状态。\n\n## 风险点汇总\n\n1. **OAuth 临时回调服务未显式绑定回环地址**，这是本次最明确的实现缺陷。\n2. 插件拥有读取模型服务凭据、启动本地 CLI、保存会话和转发工具结果的高价值权限；一旦插件或发布产物被替换，影响显著。\n3. CLI 路径可通过环境变量覆盖，虽未使用 shell，但需要避免由不可信配置控制。\n4. 明文 Vault 后备模式依赖 0600 文件权限，密钥与数据可位于同一文件，不适合保护生产凭据。\n5. macOS Keychain 写入时 secret 作为命令参数传递，存在同用户进程观察窗口。\n6. 根目录未提供依赖锁文件、构建证明或发布签名，无法充分验证源码、`dist` 和 DMG 完全一致。\n7. 未发现 `~/.ssh` 读取、隐蔽遥测、`curl|sh`、动态远程代码、混淆载荷或恶意后门。\n\n## 结论与使用建议\n\n**结论：存在风险，但当前证据不支持认定为恶意。用户应“谨慎用”，而不是“放心用”或“不要用”。**\n\n个人开发者可以在隔离的 macOS 开发环境中试用，但建议使用专门的测试账号或低额度账号，并确认 Dockyard App、DSH 插件、provider 模块及源码来自同一个固定 commit。不要在同时保存生产 SSH 密钥、云平台主密钥或高额度模型账号的核心工作机上直接测试，也不要安装来源不明的预编译 DMG。\n\n在进入 MyDSH 正式发布状态前，建议维护者至少完成以下整改：将 OAuth callback 强制绑定 `127.0.0.1`；验证 state、路径和一次性回调；生产构建禁用明文 Vault；减少命令参数传递 secret；提供锁文件、固定发布 tag、DMG 哈希或签名；在 UI 中明确展示将访问的凭据路径、外发服务商和将要启动的本地 CLI。上述整改完成并对实际发布包进行源码一致性复核后，可重新评估是否转为 `release`。\n","action":"review","reviewed_at":"2026-08-17T14:17:02.500503+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":51,"score_type":"safety","review_status":"complete"},{"full_name":"sandbaseai/sandbase-harness","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-20T06:30:17Z","summary":"仓库及API访问受限，无法完成代码核验，验证前不要安装","details":["评估对象: GitHub仓库页面及API均未能成功访问，无法确认default_branch和分支pushed_at，当前结果不能视为代码审查通过","代码执行: 未能读取package.json、scripts及安装文件，无法排除postinstall、exec、eval或curl管道执行行为","数据外发: 未能审查src和lib中的网络请求，无法确认是否向未披露的第三方域名上传对话、文件或设备信息","敏感读取: 无法验证代码是否访问~/.ssh、~/.dsh、进程环境变量、浏览器数据或其他本地凭据","依赖风险: package.json及锁文件不可用，无法核验依赖来源、固定版本、安装脚本及已知漏洞","混淆或后门: 未取得源码和构建产物，无法检查编码载荷、动态下载、隐藏执行、混淆代码或后门触发逻辑","权限越界: cordis.patch.yml及安装配置不可用，无法判断文件系统、命令执行、网络和宿主环境权限是否超出功能所需","发布建议: 在成功获取默认分支、最后更新时间并完成上述六维度逐文件审查前，不应进入社区发布或推荐列表"],"action":"review","reviewed_at":"2026-08-17T12:14:25.512385+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","previous_action":"block","review_status":"complete","report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n仓库及API访问受限，无法完成代码核验，验证前不要安装\n\n## 评估对象\n\n- 仓库：`sandbaseai/sandbase-harness`\n- 分支：`main`\n- 版本更新时间：2026-08-20T06:30:17Z\n\n## 检查结果\n\n- 评估对象: GitHub仓库页面及API均未能成功访问，无法确认default_branch和分支pushed_at，当前结果不能视为代码审查通过\n- 代码执行: 未能读取package.json、scripts及安装文件，无法排除postinstall、exec、eval或curl管道执行行为\n- 数据外发: 未能审查src和lib中的网络请求，无法确认是否向未披露的第三方域名上传对话、文件或设备信息\n- 敏感读取: 无法验证代码是否访问~/.ssh、~/.dsh、进程环境变量、浏览器数据或其他本地凭据\n- 依赖风险: package.json及锁文件不可用，无法核验依赖来源、固定版本、安装脚本及已知漏洞\n- 混淆或后门: 未取得源码和构建产物，无法检查编码载荷、动态下载、隐藏执行、混淆代码或后门触发逻辑\n- 权限越界: cordis.patch.yml及安装配置不可用，无法判断文件系统、命令执行、网络和宿主环境权限是否超出功能所需\n- 发布建议: 在成功获取默认分支、最后更新时间并完成上述六维度逐文件审查前，不应进入社区发布或推荐列表\n\n## 结论与使用建议\n\n**谨慎用**。仓库及API访问受限，无法完成代码核验，验证前不要安装\n"},{"full_name":"superdesigndev/treg","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T11:11:06Z","summary":"未见恶意后门，但会安装全局技能、托管凭据并执行外部工具，不能无条件放心用。","details":["代码执行：未发现 eval、exec、shell=True、Node postinstall 等隐蔽执行；但安装脚本会下载并执行 Python 安装包、强制安装或升级 tools-registry，runner.py 会使用 asyncio.create_subprocess_exec 直接启动登记的第三方 CLI，且源码明确说明服务端执行不是容器隔离。风险程度：高。","数据外发：默认客户端连接 https://treg.to，并通过 X-Treg-Token 发送身份令牌；代理会解密用户凭据、注入 Header、Query、Bearer 或 Basic Auth，然后将请求体和凭据发送至工具登记的上游域名。该行为属于产品核心功能，但意味着使用者必须信任 treg 服务、工具发布者和目标 API。风险程度：高。","敏感读取：程序读取 TREG_TOKEN、TREG_URL、HOME、~/.treg/config.json，并可由 treg scan/upload 处理项目 .env、技能目录及用户选择的凭据文件；未在已审查代码中发现主动遍历 ~/.ssh 或 ~/.dsh。服务端凭据采用 Fernet 加密、调用令牌以 SHA-256 摘要保存，这是有效的正向措施。风险程度：中。([github.com](https://github.com/superdesigndev/treg/blob/main/src/treg/crypto.py))","依赖风险：pyproject.toml 的多数运行依赖只有最低版本、没有上限或哈希；仓库虽有 uv.lock，但官方安装脚本使用 pipx install --force/--upgrade 获取发布渠道中的当前版本，未固定包版本或校验制品摘要。根目录不存在 package.json、cordis.patch.yml、lib/ 和 scripts/，因此不存在 npm postinstall 风险，但仍有 PyPI、Python 安装源及 GitHub Release 供应链风险。风险程度：中。","混淆与后门：Python、Shell 和配置源码可读，未发现压缩混淆、marshal/pickle 隐藏载荷、动态 eval、反向 Shell 或秘密持久化。CLI 存在将 JSON 请求 Base64 包装并以 X-Treg-Encoded 重试的 WAF 兼容逻辑，代码目的有注释且服务端对应解码，但该机制会削弱边缘层内容检查，需要运营方持续审计。风险程度：低至中。([github.com](https://github.com/superdesigndev/treg/blob/main/src/treg/crypto.py))","权限越界：安装流程会向检测到的多个智能体全局目录写入技能；有令牌时还会修改 Claude、Cursor、OpenCode 等用户级 MCP 配置。Bearer Token 被明文写入部分 MCP JSON，~/.treg/config.json 和这些配置写入时没有显式 chmod 0600。文件系统 jail 为可选功能，macOS 主要限制写入而不限制读取，Linux 隔离仍未接线。风险程度：高。","明确建议：不能把 treg 当作普通只读插件直接放心安装。仅建议在隔离账号、测试项目、最小权限短期密钥、可信工具来源和人工核对上传内容的条件下使用；不要上传生产主账号、云平台管理、支付、代码仓库或长期有效凭据。"],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》对 `superdesigndev/treg` 进行六维度静态安全审查。结论为：**未发现恶意后门，但该项目具有凭据托管、网络代理、全局配置修改和第三方命令执行能力，普通用户不能无条件放心使用，建议谨慎用并保留人工复核。** 安全评分为 **50/100**，需要注意，处于中等风险区间上沿；这一评分反映的是产品本身的高权限和供应链暴露面，不代表项目被判定为恶意。\n\n## 评估对象\n\n- 仓库：`superdesigndev/treg`\n- 评估分支：`main`，GitHub Branches 页面将其列为默认分支。([github.com](https://github.com/superdesigndev/treg/branches))\n- 分支最后更新时间：`2026-08-17T11:11:06Z`\n- 仓库规模：约 486 次提交；根目录包含 `.github`、`config`、`docs`、`examples`、`server`、`src`、`tests`、`training` 等目录，核心 Python 包位于 `src/treg/`。\n- 文件适配情况：项目是 Python 应用而非 npm 插件。根目录未发现 `package.json`、`cordis.patch.yml`、`lib/` 或 `scripts/`；实际依赖入口为 `pyproject.toml`，安装入口主要为 `src/treg/web/install.sh`，因此不存在 npm `postinstall`，但存在 Shell、pipx 和 Python 子进程执行面。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `pyproject.toml`、`src/treg/web/install.sh`、`src/treg/runner.py`、`src/treg/cli.py`、`src/treg/fsjail.py`。\n\n**发现：** 未发现 `eval()`、动态 `exec()`、`shell=True`、`os.system()` 或 npm 生命周期脚本等典型隐蔽执行点。`runner.py:165-225` 使用参数数组调用 `asyncio.create_subprocess_exec`，避免了 Shell 字符串拼接注入，并设置超时、进程组终止、输出截断和秘密脱敏，这些属于合理防护。\n\n但是，`runner.py:1-10` 明确说明登记工具会以服务端普通子进程运行而非容器运行；只要工具进入允许列表，其二进制便获得服务进程用户的权限。`install.sh:45-65` 在系统缺少合适 Python 时下载并执行外部安装包，随后执行 `pipx install --force` 或升级包。即使这些操作是公开功能，也构成真实代码执行能力。\n\n**风险程度：高。** 主要风险来自第三方工具本身、登记审核失误和安装源被污染，而不是已发现的隐藏命令注入。\n\n### 2. 数据外发\n\n**检查内容：** `src/treg/cli.py`、`src/treg/proxy.py`、`src/treg/injectors.py`、README 中的 scan/upload/run 流程。\n\n**发现：** `cli.py:40-42,134-150` 默认连接 `https://treg.to`，读取 `TREG_TOKEN` 或本地配置并通过 `X-Treg-Token` 请求头发送。`proxy.py:94-143` 会在服务端解密凭据，根据工具定义将其注入 Header、Query、Bearer、Basic Auth 或请求体，再把完整请求转发到上游服务。代码实施了 HTTPS 强制、允许主机校验、重定向禁止和响应安全头，这是有效的 SSRF 与凭据泄露缓解措施。\n\n不过，外发行为是 treg 的核心设计：用户的调用参数、业务数据和实际凭据会经过 treg 服务并到达工具配置的第三方域名。安装链路还访问 `treg.to`、Python 官方下载源、GitHub Release 和 Python 包索引。共享服务的管理员、数据库密钥、工具登记信息或代理实现任一环节失守，都可能影响用户凭据。\n\n**风险程度：高。** 该项目不是本地只读工具，不能用普通插件的信任模型评估。\n\n### 3. 敏感信息读取与存储\n\n**检查内容：** `src/treg/cli.py`、`src/treg/runner.py`、`src/treg/crypto.py`、`src/treg/mcp_install.py` 及 README 的凭据扫描说明。\n\n**发现：** 客户端会读取环境变量 `TREG_TOKEN`、`TREG_URL` 和 `~/.treg/config.json`；scan/upload 功能可以发现项目 `.env`、技能目录以及用户声明或选择的凭据文件。未在本次覆盖的源码中发现自动遍历 `~/.ssh` 或 `~/.dsh` 的逻辑。`runner.py:100-143` 构造最小化子进程环境，仅保留 PATH、HOME、LANG 等基本变量，并只加入当前工具声明的秘密变量，降低了父进程其他 Token 被连带继承的风险。\n\n服务端的正向措施较完整：`crypto.py:1-43` 使用 Fernet 加密静态凭据，调用时才在内存解密；调用令牌以高熵随机值生成并用 SHA-256 摘要查询。但 `cli.py:61-66` 保存 `~/.treg/config.json` 时没有显式设置 `0600`，MCP JSON 写入也未加固权限，实际保护取决于用户 umask 和已有文件权限。\n\n**风险程度：中。** 未见秘密窃取代码，但处理的数据本身高度敏感，本地明文 Token 权限仍需修复。([github.com](https://github.com/superdesigndev/treg/blob/main/src/treg/crypto.py))\n\n### 4. 依赖与供应链风险\n\n**检查内容：** `pyproject.toml`、`uv.lock`、`install.sh`、Docker/服务器安装入口。\n\n**发现：** `pyproject.toml:22-53` 使用 FastAPI、SQLAlchemy、httpx、cryptography、Typer、MCP 等主流依赖，未发现明显仿冒包名；仓库也提供 `uv.lock`，说明开发环境具备锁定意识。但发布包的依赖主要采用 `>=` 最低版本约束，没有上限或制品哈希。官方安装脚本通过 pipx 安装当前发布版本，并使用 `--force` 或升级操作，未把版本固定到审计过的提交，也没有对 Python 安装包或独立运行时归档执行 SHA-256 校验。\n\n这意味着 treg 托管域名、PyPI 发布账号、Python 下载源或 GitHub Release 任一供应链节点被劫持时，用户执行官方安装命令即可运行受污染代码。\n\n**风险程度：中。** 建议发布固定版本安装命令、提供哈希或签名，并让 MyDSH 绑定审计提交，而不是跟随最新版本。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** 核心 Python、Shell 安装文件、代理注入器、加密模块和启动逻辑。\n\n**发现：** 已检查代码结构清晰，未发现压缩混淆、二进制载荷、marshal/pickle 加载、动态 eval、反向连接、定时持久化或静默下载未知可执行文件。Fernet 用于静态凭据保护，属于正常安全实现。\n\n需要记录的特殊行为是 CLI 的 WAF 兼容重试：部分被边缘层拒绝的 JSON 请求会改为 Base64 包装并增加 `X-Treg-Encoded` 后重新提交。该逻辑有明确注释和对应服务端协议，不足以认定为后门，但客观上可能绕过边缘 WAF 的正文检测，应由服务端在解码后重新执行大小限制、模式校验和内容安全检查。\n\n**风险程度：低至中。** 当前没有恶意证据，但 WAF 绕行协议应纳入持续审计。([github.com](https://github.com/superdesigndev/treg/blob/main/src/treg/crypto.py))\n\n### 6. 权限越界与隔离\n\n**检查内容：** `install.sh`、`mcp_install.py`、`runner.py`、`fsjail.py`。\n\n**发现：** `install.sh:78-91` 安装完成后会执行 `treg skill bootstrap --force`，向检测到的多个智能体写入全局技能；如果安装 URL 带有 Token，还会自动登录并执行 MCP 安装。`mcp_install.py:34-113` 会修改 Claude、Cursor、OpenCode 等用户级配置，Cursor/OpenCode 配置中包含明文 Bearer Token。上述行为虽有代码可见，但影响范围远大于普通插件。\n\n执行隔离也不充分：`fsjail.py:72-113` 的文件系统 jail 为可选配置；macOS profile 允许文件读取和进程执行，主要限制写入；Linux 分支明确尚未接线。服务端 runner 同样声明无容器隔离。因此，恶意或被劫持的第三方 CLI 仍可能读取服务账户可访问的数据、发起网络连接或利用主机权限。\n\n**风险程度：高。** MyDSH 不应对此仓库自动执行安装脚本或默认授予全部 treg 命令权限。\n\n## 风险点汇总\n\n1. 工具可直接执行登记的第三方 CLI，且默认不是容器隔离。\n2. 用户凭据会被 treg 服务托管、解密并转发至第三方 API。\n3. 官方安装链存在远程脚本、强制升级和未校验制品摘要。\n4. 安装过程会修改多个智能体的全局技能及 MCP 配置。\n5. 本地 Token 和部分 MCP Bearer Token 明文保存，未显式设置仅当前用户可读。\n6. 文件系统 jail 非默认强制能力，Linux 隔离未完成。\n7. 未发现主动读取 `~/.ssh`、`~/.dsh`、隐藏后门、动态 eval 或 Shell 拼接注入。\n8. Fernet 静态加密、Token 摘要、HTTPS/主机允许列表、禁止重定向、最小子进程环境和输出脱敏属于有效防护。\n\n## 结论与使用建议\n\n**最终结论：存在风险，建议谨慎用，不建议 MyDSH 自动放行。** treg 的高权限主要来自其产品定位，而非已经确认的恶意代码。它同时扮演安装器、凭据库、API 代理、技能分发器和命令执行器，一旦服务、账号、工具登记或上游依赖被攻破，影响可能覆盖用户密钥与执行环境。\n\n普通用户不能把它当作无需审查的插件放心安装。确需使用时，应采用专用测试账号、最小权限且可随时撤销的短期 Token；禁止上传生产云平台、支付、主代码仓库、管理员或长期有效密钥；安装前固定版本并人工检查脚本；将 `~/.treg/config.json`、Cursor/OpenCode MCP 配置设置为仅当前用户可读；只调用来源可信、域名明确的工具；生产自托管部署应使用独立低权限账户、容器或虚拟机，并配置网络出口白名单、秘密轮换和调用审计。完成这些措施后可以受控试用，但仍不属于可以无条件“放心用”的插件。\n","action":"review","reviewed_at":"2026-08-17T13:13:34.073570+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"complete"},{"full_name":"mishibeikejie/zat-dsh-engine","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-19T11:59:23Z","summary":"","details":[],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n现有评估资料不完整，需要重新复核。\n\n## 评估对象\n\n- 仓库：`mishibeikejie/zat-dsh-engine`\n- 分支：`main`\n- 版本更新时间：2026-08-19T11:59:23Z\n\n## 检查结果\n\n- 现有报告缺少足够的代码证据，当前结论仅作为待复核提示。\n\n## 结论与使用建议\n\n**谨慎用**。现有评估资料不完整，需要重新复核。\n","action":"review","reviewed_at":"2026-08-17T13:44:29.185166+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-mnemon","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T13:00:53Z","summary":"自动复核结果不完整，当前报告待重新审查。","details":["现有记录包含未解析的模板字段，不能作为正式安全结论。"],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n自动复核结果不完整，当前报告待重新审查。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-mnemon`\n- 分支：`main`\n- 版本更新时间：2026-08-17T13:00:53Z\n\n## 检查结果\n\n- 现有记录包含未解析的模板字段，不能作为正式安全结论。\n\n## 结论与使用建议\n\n**谨慎用**。自动复核结果不完整，当前报告待重新审查。\n","action":"review","reviewed_at":"2026-08-17T13:51:42.654411+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"pending"},{"full_name":"Noob-stupid/dsh-plugin-hub","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"该分支最后更新时间 ISO 格式,如 2026-08-17T10:00:00Z","summary":"","details":[],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n现有评估资料不完整，需要重新复核。\n\n## 评估对象\n\n- 仓库：`Noob-stupid/dsh-plugin-hub`\n- 分支：`main`\n- 版本更新时间：该分支最后更新时间 ISO 格式,如 2026-08-17T10:00:00Z\n\n## 检查结果\n\n- 现有报告缺少足够的代码证据，当前结论仅作为待复核提示。\n\n## 结论与使用建议\n\n**谨慎用**。现有评估资料不完整，需要重新复核。\n","action":"review","reviewed_at":"2026-08-17T14:11:56.689762+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"complete"},{"full_name":"THEWOLFWALKER/dsh-notifier","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T13:46:11Z","summary":"自动复核结果不完整，当前报告待重新审查。","details":["现有记录包含未解析的模板字段，不能作为正式安全结论。"],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n自动复核结果不完整，当前报告待重新审查。\n\n## 评估对象\n\n- 仓库：`THEWOLFWALKER/dsh-notifier`\n- 分支：`main`\n- 版本更新时间：2026-08-17T13:46:11Z\n\n## 检查结果\n\n- 现有记录包含未解析的模板字段，不能作为正式安全结论。\n\n## 结论与使用建议\n\n**谨慎用**。自动复核结果不完整，当前报告待重新审查。\n","action":"review","reviewed_at":"2026-08-17T14:45:30.260371+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"pending"},{"full_name":"omdsh-dev/dsh-lark","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T01:32:47Z","summary":"","details":[],"report_md":"## 安全评分\n\n**50/100 · 需要注意**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n现有评估资料不完整，需要重新复核。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-lark`\n- 分支：`main`\n- 版本更新时间：2026-08-16T01:32:47Z\n\n## 检查结果\n\n- 现有报告缺少足够的代码证据，当前结论仅作为待复核提示。\n\n## 结论与使用建议\n\n**谨慎用**。现有评估资料不完整，需要重新复核。\n","action":"review","reviewed_at":"2026-08-17T14:54:18.926416+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":50,"score_type":"safety","review_status":"complete"},{"full_name":"linhay/harmony-next.skills","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-07-10","summary":"无恶意证据，但下载执行、删目录、改配置和设备控制默认缺少确认","details":["评估对象: default_branch 为 master；当前 GitHub 索引显示仓库于 2026-07-10 更新。根目录未见 package.json、cordis.patch.yml、src、lib 或仓库级 postinstall，实际可执行部分集中在 harmony-next/scripts。GitHub API 的秒级 pushed_at 本次未能成功读取，因此 updated_at 仅保留已核验日期。([awesome.ecosyste.ms](https://awesome.ecosyste.ms/projects/github.com%2Flinhay%2Fharmony-next.skills?utm_source=openai))","代码执行: Python 脚本会通过 subprocess.run/Popen 执行 codelinter、Emulator、hdc 和静态 python -c 辅助程序；未发现 shell=True、eval 或 exec 注入，但这些仍属于真实本机命令执行能力。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))","数据外发: 未发现隐藏遥测或自动上传凭据；commandline_tools_manager.py 会访问用户提供的任意 HTTP/HTTPS 归档地址，SKILL.md 还允许代理直接通过 gh 创建或评论 GitHub Issue，因此可能向第三方发送诊断摘要。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))","敏感读取: 已审代码未发现读取 ~/.ssh、~/.dsh 或通用环境 token；但功能会枚举环境路径、DevEco/HVD 状态，并可采集截图、布局、日志、file recv 产物，文档还覆盖读取 IDE 缓存或聊天历史等高敏场景。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/hvd_manager.py))","依赖风险: 仓库不是 npm 包且无自身依赖锁文件；主要脚本使用 Python 标准库，但安装依赖 npx skills、Huawei 工具链和本机 DevEco 私有组件，UI 审计还依赖 cv2、numpy、PIL、requests、scipy、skimage、werkzeug、opencc。下载归档的 SHA-256 校验是可选项而非强制项。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/SKILL.md))","混淆与后门: 在能够完整读取的核心脚本中未发现 base64 解码载荷、eval、exec、shell=True 或明显混淆；hvd_manager.py 的 python -c 内容是仓库内可见的固定 trace-holder 辅助代码，暂无线索表明存在后门。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/hvd_manager.py))","权限越界: 这是主要风险。脚本可修改 ~/.zshrc、~/.bash_profile 或 ~/.profile，可在 --force 下递归删除指定安装目录，可克隆或删除 HVD、启动模拟器、建立端口转发并执行点击、滑动和按键。SKILL.md 明确声明不设置授权或确认拦截，并将多类设备和文件操作设计为非交互执行。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))","使用建议: 不应把它作为可自主运行的全局插件直接放心使用；应固定到已审 commit，只允许只读查询默认启用，并要求下载、强制覆盖、删 HVD、设备输入、截图日志采集、读取 IDE 私有数据及发送 GitHub Issue 前逐次人工确认。"],"action":"review","reviewed_at":"2026-08-17T12:18:11.468500+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":44,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**44/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n无恶意证据，但下载执行、删目录、改配置和设备控制默认缺少确认\n\n## 评估对象\n\n- 仓库：`linhay/harmony-next.skills`\n- 分支：`master`\n- 版本更新时间：2026-07-10\n\n## 检查结果\n\n- 评估对象: default_branch 为 master；当前 GitHub 索引显示仓库于 2026-07-10 更新。根目录未见 package.json、cordis.patch.yml、src、lib 或仓库级 postinstall，实际可执行部分集中在 harmony-next/scripts。GitHub API 的秒级 pushed_at 本次未能成功读取，因此 updated_at 仅保留已核验日期。([awesome.ecosyste.ms](https://awesome.ecosyste.ms/projects/github.com%2Flinhay%2Fharmony-next.skills?utm_source=openai))\n- 代码执行: Python 脚本会通过 subprocess.run/Popen 执行 codelinter、Emulator、hdc 和静态 python -c 辅助程序；未发现 shell=True、eval 或 exec 注入，但这些仍属于真实本机命令执行能力。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))\n- 数据外发: 未发现隐藏遥测或自动上传凭据；commandline_tools_manager.py 会访问用户提供的任意 HTTP/HTTPS 归档地址，SKILL.md 还允许代理直接通过 gh 创建或评论 GitHub Issue，因此可能向第三方发送诊断摘要。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))\n- 敏感读取: 已审代码未发现读取 ~/.ssh、~/.dsh 或通用环境 token；但功能会枚举环境路径、DevEco/HVD 状态，并可采集截图、布局、日志、file recv 产物，文档还覆盖读取 IDE 缓存或聊天历史等高敏场景。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/hvd_manager.py))\n- 依赖风险: 仓库不是 npm 包且无自身依赖锁文件；主要脚本使用 Python 标准库，但安装依赖 npx skills、Huawei 工具链和本机 DevEco 私有组件，UI 审计还依赖 cv2、numpy、PIL、requests、scipy、skimage、werkzeug、opencc。下载归档的 SHA-256 校验是可选项而非强制项。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/SKILL.md))\n- 混淆与后门: 在能够完整读取的核心脚本中未发现 base64 解码载荷、eval、exec、shell=True 或明显混淆；hvd_manager.py 的 python -c 内容是仓库内可见的固定 trace-holder 辅助代码，暂无线索表明存在后门。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/hvd_manager.py))\n- 权限越界: 这是主要风险。脚本可修改 ~/.zshrc、~/.bash_profile 或 ~/.profile，可在 --force 下递归删除指定安装目录，可克隆或删除 HVD、启动模拟器、建立端口转发并执行点击、滑动和按键。SKILL.md 明确声明不设置授权或确认拦截，并将多类设备和文件操作设计为非交互执行。([github.com](https://github.com/linhay/harmony-next.skills/blob/master/harmony-next/scripts/commandline_tools_manager.py))\n- 使用建议: 不应把它作为可自主运行的全局插件直接放心使用；应固定到已审 commit，只允许只读查询默认启用，并要求下载、强制覆盖、删 HVD、设备输入、截图日志采集、读取 IDE 私有数据及发送 GitHub Issue 前逐次人工确认。\n\n## 结论与使用建议\n\n**谨慎用**。无恶意证据，但下载执行、删目录、改配置和设备控制默认缺少确认\n"},{"full_name":"ysr666/dsh-vision-router","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"unverified","summary":"未见恶意后门，但默认外发图片且本地HTML由无沙箱Chrome执行，不能无条件放心用","details":["代码执行：`package.json` 没有 `preinstall`、`install` 或 `postinstall`，仅包含测试脚本；本地 OCR 通过固定程序名和固定参数调用 `tesseract`，未拼接 Shell 命令。风险集中在 `vision_html_screenshot`：它使用 `--no-sandbox` 启动系统 Chrome 并加载本地 HTML，但实际代码没有阻断页面网络请求，与“网络默认禁用”的功能描述不一致；恶意 HTML 因而可以执行脚本并访问外网。风险程度：高。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))","数据外发：插件默认内置五个匿名 OVHcloud 视觉模型，读取的图片会被转换为 Base64，并连同问题文本发送到 `oai.endpoints.kepler.ai.cloud.ovh.net`；这属于产品功能，但意味着用户未配置私有模型时，图片默认离开本机。涉及合同、账号截图、个人信息或未公开代码时不能直接使用默认链。风险程度：高。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))","敏感读取：未发现直接读取 `~/.ssh`、私钥或任意凭据文件的代码；本地图片读取经过 DSH 的 `fs.resolve/readBytes` 服务并限制为 20MB。但是 `httpProviders` 同时允许配置任意 `baseURL` 和任意 `apiKeyEnv`，运行时会从凭据服务或 `process.env[apiKeyEnv]` 取值，再作为 Bearer Token 发往该地址。若配置文件或设置权限被攻击者控制，可构成环境变量密钥外传。风险程度：较高。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))","依赖风险：仓库包含 `pnpm-lock.yaml` 并固定开发所用 pnpm 版本，但发布清单中的 `@deepseek-ai/schemastery >=3.18.0`、`undici >=6.15.0`、`potrace ^2.1.8`、`puppeteer-core ^25.6.0` 仍允许安装时漂移；消费者安装 npm 包时也不会由仓库锁文件完全固定依赖树。`sharp` 是原生模块，安装和图像解码攻击面明显高于纯 JavaScript 包。风险程度：中等。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))","混淆与后门：代码为可读的非压缩 JavaScript，当前 `index.js` 页面显示 7222 行，并配有多组自动化测试；未检出 `new Function`、`curl|sh`、安装钩子或编码下载执行载荷。两处 Worker 使用 `eval: true`，但执行的是源码内静态 Worker 字符串，图像数据经 `workerData` 传入，不属于直接的用户代码执行。风险程度：低。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/index.js))","权限越界：插件会在进程范围替换 `globalThis.fetch`，虽然只代理匹配域名且卸载时恢复，但仍影响同一 DSH 进程中的其他组件；`artifactsDir` 仅按字符串与工作目录拼接后直接使用原生 `mkdir/writeFile`，没有显示的规范化后目录边界校验；默认补丁还把附件上限提高到 20MB、1亿像素，可能显著放大内存和 CPU 拒绝服务风险。风险程度：高。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))"],"report_md":"## 安全评分\n\n**42/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查对象为 GitHub 仓库 `ysr666/dsh-vision-router`。综合结论为：**未发现以窃密、持久化或远程控制为目的的恶意后门，但当前版本存在多项不适合被忽略的生产安全风险，用户不能无条件放心使用。** 安全评分为 **42/100**，建议谨慎，建议进入人工复核和安全加固流程，而不是直接按安全插件发布。\n\n最重要的两个问题是：第一，插件在没有用户自建视觉渠道时，会把图片及相关问题发送给匿名 OVHcloud 视觉服务；第二，本地 HTML 截图工具通过带 `--no-sandbox` 参数的系统 Chrome 执行 HTML，且代码未实现说明中宣称的网络禁用。对于公开图片和个人单机场景，这些风险可以通过配置和使用约束降低；对于企业机密、客户数据、多用户服务或不可信 HTML，当前版本不应直接启用相关功能。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n## 评估对象\n\n- 仓库：`ysr666/dsh-vision-router`\n- 评估分支：`main`。仓库首页及各核心文件均以 `main` 为当前分支。([github.com](https://github.com/ysr666/dsh-vision-router))\n- 当前清单版本：`1.4.5`，Node.js 要求为 `>=22`。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))\n- 仓库规模：仓库首页显示 227 次提交；根目录包含 `.github/workflows`、`assets`、`docs`、`lib`、`presets`、`tests`，以及 `entry.js`、`index.js`、`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml` 等文件。当前 `index.js` 页面显示 7222 行，锁文件显示 1500 行。根目录未发现独立的 `src/`、`scripts/` 或 `install/` 目录，安装和更新行为主要由包清单、DSH bundle patch 及运行时自更新代码承担。([github.com](https://github.com/ysr666/dsh-vision-router))\n- 更新时间限制：本次会话未获 `api.github.com` 的读取许可，因此无法诚实提供 default branch 对应的精确 `pushed_at` ISO 时间。为避免伪造时间，顶层 `updated_at` 标记为 `unverified`。正式发布前必须按固定提交 SHA 重新获取 API 元数据并复核差异。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`index.js` 中 `execFile`、Worker、系统浏览器、自更新入口以及是否存在 `eval`、`curl|sh` 等执行链。\n\n**发现：** 包自身没有 `preinstall`、`install` 或 `postinstall`，只有测试脚本；本地 OCR 使用 `execFile('tesseract', 固定参数)`，没有经过 Shell，也没有把模型输出拼入命令行。两处 `Worker(..., {eval:true})` 使用的是源码内固定 Worker 程序，输入经 `workerData` 传递，未发现把外部字符串当 JavaScript 执行。证据：`package.json:64-73`、`index.js:1224-1228`、`index.js:1348-1358`、`index.js:1373-1381`。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))\n\n**主要风险：** `vision_html_screenshot` 会解析用户或智能体指定的本地 HTML，查找系统 Chrome/Chromium/Edge，然后以 `--no-sandbox` 启动，并直接 `page.goto(file://...)`。代码没有调用请求拦截、离线模式或 URL allowlist，因而其“网络默认禁用”的描述没有被实现。恶意 HTML 可以运行 JavaScript、向外部域名发起请求，并在浏览器漏洞出现时因关闭沙箱而扩大影响。证据：`index.js:4297-4301`、`index.js:4313-4361`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n自更新接口确实能触发软件更新，但它限制为 POST、检查 `Sec-Fetch-Site`、校验进程内随机 Token，并且浏览器不能自由指定命令、包名或目标版本，防护设计明显，不构成直接任意命令执行。证据：`index.js:4587-4656`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**风险程度：高。**\n\n### 2. 数据外发\n\n**检查内容：** 固定第三方域名、请求体内容、默认视觉后端、代理域名及用户图片是否离开设备。\n\n**发现：** 默认 HTTP 视觉链包含五个 `oai.endpoints.kepler.ai.cloud.ovh.net/v1` 模型。图片会被转换为 Base64 Data URL，放入 OpenAI-compatible `messages`，再 POST 到配置的 `/chat/completions`。因此默认安装并不等于本地视觉处理；只要工具调用进入匿名回退，图片和问题文本就会离开本机。证据：`index.js:1541-1550`、`index.js:1584-1595`、`index.js:1598-1629`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\nREADME 明确把匿名 OVH 服务描述为开箱即用的最终回退，这说明行为并非隐藏后门，但最终用户仍可能把“无需 Key”误解为“本地处理”。对身份证件、内部界面、客户资料、代码截图、密钥截图等数据，该默认行为不可接受。([github.com](https://github.com/ysr666/dsh-vision-router))\n\n**风险程度：高，主要属于隐私和数据治理风险。**\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、凭据服务、任意本地文件读取及附件访问。\n\n**发现：** 未发现直接打开 `~/.ssh`、SSH 私钥或遍历用户主目录的代码。图片路径通过 DSH 的 `fs.resolve` 和 `fs.readBytes` 读取，并设置 20MB 上限；会话附件也必须先在当前会话附件索引中命中。证据：`index.js:3526-3570`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n但自定义 HTTP Provider 允许同时设置任意 `baseURL` 与任意 `apiKeyEnv`。运行时先调用 DSH credentials 服务解析该名称，失败后读取 `process.env[apiKeyEnv]`，并将结果作为 Authorization Bearer Token 发往所配置地址。正常配置下这是标准 API Key 功能；若插件设置、profile 补丁或设置写权限被不可信主体控制，则可以指定诸如云厂商密钥变量的名称，再把值发送至攻击者地址。证据：`index.js:267-277`、`index.js:1601-1612`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**风险程度：较高。**\n\n### 4. 依赖风险\n\n**检查内容：** 直接依赖、原生模块、版本约束、锁文件、构建脚本及依赖树可复现性。\n\n**发现：** 仓库提交了 `pnpm-lock.yaml`，并声明 `pnpm@11.20.0`；工作区还通过 `onlyBuiltDependencies` 将允许构建的依赖限定为 `sharp`。这是积极信号。包自身不存在安装生命周期脚本。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))\n\n不足之处是发布清单仍使用宽松范围：`@deepseek-ai/schemastery >=3.18.0`、`undici >=6.15.0`、`potrace ^2.1.8`、`puppeteer-core ^25.6.0`，并依赖 RC 阶段的 DSH peer packages。仓库锁文件可以固定开发和 CI，但普通用户安装 npm 包时，依赖解析不一定遵循仓库锁文件。`sharp` 包含原生图像解码组件，`puppeteer-core` 会驱动本机浏览器，两者都扩大了供应链和漏洞利用面。证据：`package.json:49-73`。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/package.json))\n\n本次无法在固定提交上执行 `pnpm audit`、生成 SBOM 或核验 npm 发布包哈希，因此不能声称依赖当前无已知漏洞。\n\n**风险程度：中等。**\n\n### 5. 混淆与后门\n\n**检查内容：** 压缩混淆代码、Base64 下载执行、动态函数构造、隐藏域名、反调试、持久化及异常网络载荷。\n\n**发现：** 主代码为具名函数和大量注释组成的可读 JavaScript，当前页面显示 `index.js` 为 7222 行；仓库包含多组核心、HTTP 兼容、自更新、doctor、运行时端到端和零回归测试。未发现 `new Function`、`curl|sh`、远程脚本下载后执行、加密载荷解码或可疑持久化。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/index.js))\n\nWorker 的 `eval: true` 属于应尽量移除的审计噪声，但当前证据表明其源码是固定字符串，并非从模型、网络或文件动态获取。默认 OVH 域名、自更新和代理域名也均在源码或文档中明示，不符合隐蔽后门特征。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**风险程度：低；未发现恶意后门证据。**\n\n### 6. 权限越界\n\n**检查内容：** 全局运行时修改、文件写入边界、浏览器权限、官方路由接管、附件限制和本地 Web 接口。\n\n**发现一：** 插件会把 `globalThis.fetch` 替换为代理感知版本，并在插件释放时恢复。虽然只对配置的域名使用代理，但该修改发生在整个 Node.js 进程范围，而不是插件私有请求客户端，可能影响同进程其他模块。证据：`index.js:2811-2840`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**发现二：** `artifactsDir` 只要求是字符串，随后与会话工作目录通过 `path.join` 拼接，并直接调用原生 `mkdir`、`writeFile`。代码未显示对 `..` 跳出工作区后的规范化结果做 containment 检查。正常默认值安全，但恶意或错误配置可能让产物写到工作区外。证据：`index.js:3522-3525`、`index.js:3578-3588`。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**发现三：** `cordis.patch.yml` 默认把附件上限从 5MB/4000万像素提高到 20MB/1亿像素。100M 像素图片解码为 RGBA 时理论原始数据即可接近 400MB，尚未计入图像库、复制缓冲、缩放、OCR 和并行处理开销，容易造成内存或 CPU 拒绝服务。证据：`cordis.patch.yml:13-26`。([github.com](https://github.com/ysr666/dsh-vision-router/blob/main/cordis.patch.yml))\n\n官方 DeepSeek 路由接管的 stealth 模式默认关闭，属于用户显式选择；这一点降低了未经授权覆盖核心路由的风险。([github.com](https://github.com/ysr666/dsh-vision-router/raw/refs/heads/main/index.js))\n\n**风险程度：高。**\n\n## 风险点汇总\n\n| 优先级 | 风险点 | 直接影响 |\n|---|---|---|\n| P0 | 本地 HTML 使用 `--no-sandbox` Chrome 执行，且未真正禁网 | 恶意页面脚本联网、浏览器漏洞影响扩大 |\n| P0 | 图片默认发送到匿名 OVHcloud 视觉端点 | 私密图片和问题文本离开设备 |\n| P1 | 任意 `apiKeyEnv` 与任意 `baseURL` 可组合 | 设置被篡改时可能外传环境密钥 |\n| P1 | 附件允许 1亿像素并进入复杂图像处理链 | 内存、CPU 拒绝服务 |\n| P1 | `artifactsDir` 缺少明确目录 containment 校验 | 错误或恶意配置可能越界写文件 |\n| P2 | 进程级替换 `globalThis.fetch` | 影响同进程其他插件的网络行为 |\n| P2 | 发布依赖使用宽松 semver 范围 | 用户实际安装依赖可能随时间漂移 |\n\n## 结论与使用建议\n\n**用户能否放心使用：不能无条件放心使用，建议“谨慎用”。** 本次没有发现恶意窃密或后门证据，因此不判定为恶意插件；但默认外发图片、无沙箱浏览器执行、动态凭据名称和资源上限等行为，使其不适合直接处理敏感资料或部署到多人共享的生产 DSH 环境。\n\n个人用户如只处理公开、非敏感图片，可以在理解第三方视觉调用的前提下试用，但不要让 `vision_html_screenshot` 打开来源不明、他人提供或从网络下载的 HTML。企业或社区生产部署应先完成以下整改：\n\n1. HTML 截图必须移除 `--no-sandbox`，启用请求拦截或离线模式，仅允许 `file:`、`data:` 和经过批准的本地产物；禁止页面访问公网、内网和云元数据地址。\n2. 首次启用匿名视觉回退时明确告知图片将发往第三方；敏感环境应默认关闭匿名回退，只允许管理员批准的视觉服务。\n3. 对 `baseURL` 实施 HTTPS、域名 allowlist 和内网地址限制；对 `apiKeyEnv` 实施可选凭据 allowlist，禁止任意环境变量名。\n4. 对 `artifactsDir` 使用 `path.resolve` 后验证结果仍位于工作区内，并拒绝 `..` 越界路径。\n5. 把附件像素上限降至更保守值，并在 Sharp 解码前后增加像素、帧数、内存、并发和执行时间限制。\n6. 将生产发布绑定到固定 tag/commit，核验 npm tarball 与 GitHub 源码一致，执行依赖漏洞扫描和 SBOM 审核。\n\n在上述问题修复或由 MyDSH 管理员明确接受风险之前，建议动作是 **review**，不建议直接标记为安全通过。\n","action":"review","reviewed_at":"2026-08-17T13:10:53.226965+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":42,"score_type":"safety","review_status":"complete"},{"full_name":"whiteguo233/dsh-openbiliclaw","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-16T00:00:00Z","summary":"未见恶意后门，但默认自动执行未锁版本程序，模型技能还可引导高权限操作。","details":["代码执行：没有发现 eval、Function、curl|sh、postinstall 等典型恶意执行链，但 src/index.ts:32-38、52-65 会在 autostart=true 时通过 child_process.spawn 自动运行默认命令 `npx dsh-openbiliclaw`。该命令未固定 npm 包版本，npx 在本地无包时可能下载并执行注册表中的当前版本，形成显著供应链执行风险；虽然明确设置了 shell:false，仍不等于安全。","数据外发：src/bridge.ts:23-35 会把全部工具参数 JSON 序列化后发送到 `${apiUrl}${path}`；默认 apiUrl 是 127.0.0.1:6009，但配置没有协议、域名或回环地址限制。一旦配置被改为外部服务器，用户输入、直播间编号、操作参数等会被发送给该服务器，且代码没有显示鉴权头或目的地址提示。","敏感读取：未发现主动扫描 ~/.ssh、~/.dsh、环境变量 token、浏览器数据或系统凭据的代码；但 src/index.ts:28-30 对配置中的 skillPath 直接执行 readFileSync，未限制必须位于插件目录内。拥有插件配置修改能力的人可令其读取任意当前进程可读文件，并把内容注册为模型可调用技能，存在配置被污染后的敏感内容暴露面。","依赖风险：package.json:7-9 只有 build/watch，没有 preinstall、install、postinstall；运行依赖主要是 peerDependencies，未发现直接依赖中的已知安装脚本证据。但依赖范围使用 `>=4.5.5`、`>=4.7.0`，开发工具采用 RC 版本，仓库根目录也未见 lockfile；更重要的是运行期使用未锁版本的 npx 命令，因此可重复构建与供应链完整性不足。","混淆或后门：src、skills 和构建配置均可读，工具名与 REST 路径逐项显式声明；lib 中虽包含约 521 KB 的前端构建文件，但同时提供约 1.1 MB source map，符合常规前端打包特征。未发现字符串解密器、动态代码拼接、隐蔽下载器、反调试或定时回连后门。","权限越界：插件注册的模型技能设置为 isModelInvocable=true，而 skills/openbiliclaw-adapter/SKILL.md:26-34、51-58 又向智能体提供 Docker、pip、npx、账号同步和收藏同步命令。插件代码本身没有强制审批、命令白名单或沙箱边界；当宿主智能体同时拥有终端工具时，模型可能从普通直播间操作扩展到安装软件、启动容器或同步账号数据。技能文本虽要求遵守用户授权，但这只是提示语，不是技术控制。"],"report_md":"## 安全评分\n\n**42/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审计按照 MyDSH 六维安全标准，对 `whiteguo233/dsh-openbiliclaw` 的插件入口、REST 桥接、工具注册、模型技能、前端源码、构建产物和依赖声明进行了静态检查。结论是：**没有发现窃取凭据、隐蔽回连、混淆载荷或明确恶意后门，但当前版本不适合未经加固后直接放心使用。** 最主要的问题不是传统木马，而是插件默认自动执行未锁定版本的 `npx dsh-openbiliclaw`，以及将包含安装、容器启动和账号同步指令的技能设为模型可主动调用。综合评分为 **58/100**，建议进入人工复核与加固流程。\n\n## 评估对象\n\n- 仓库：`whiteguo233/dsh-openbiliclaw`\n- 评估分支：`main`\n- GitHub 页面显示该分支于 **2026-08-16** 更新，共 9 次提交；代码语言以 TypeScript、Vue 和 CSS 为主。\n- 时间字段说明：按要求尝试访问 GitHub Repository API，但当前 Web 抓取环境未取得可解析的 API JSON；仓库和分支页面只能确认到 2026-08-16 的日期。因此顶层 `updated_at` 使用 `2026-08-16T00:00:00Z` 作为日级归一值，**不能将其视为已经验证的精确 pushed_at 时分秒**。\n- 主要结构：`.github/`、`lib/`、`skills/`、`src/`、`package.json`、`tsconfig.json`、`tsdown.config.ts`；根目录未发现独立 `scripts/` 目录或 lockfile。`src/client/` 包含 API 客户端、WebSocket、状态管理和 Vue 页面；`lib/` 包含服务端构建、前端 bundle 与 source map。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`src/index.ts` 子进程启动、技能中的安装命令，以及 exec/eval/Function/curl|sh 等危险模式。\n\n**发现：** `package.json:7-9` 仅声明 `build` 和 `watch`，未发现 preinstall、install、postinstall。源码中也未发现 eval 或动态 Function。问题位于 `src/index.ts:32-38、52-65`：插件在 `autostart` 默认为 true 时调用 `spawn(command, args, { cwd, shell: false })`，默认实际执行 `npx dsh-openbiliclaw`。`shell:false` 能降低 shell 元字符注入，但 npx 包名未固定版本，首次运行可能从 npm 下载并立即执行当前版本；上游包被替换、账号被盗或版本漂移时，风险会直接进入宿主进程环境。进程启动还没有看到与 Cordis 生命周期绑定的明确终止处理。\n\n**证据：** `src/index.ts:15-17` 默认 `command='npx'`、`args=['dsh-openbiliclaw']`；`src/index.ts:61-65` 调用 spawn；`package.json:7-9` 无安装生命周期脚本。\n\n**风险程度：高。** 这是正常功能实现，但默认自动执行可变远端制品，不符合生产级供应链控制要求。\n\n### 2. 数据外发\n\n**检查内容：** HTTP、WebSocket、第三方域名、请求体、鉴权头及可配置服务地址。\n\n**发现：** `src/bridge.ts:23-35` 将工具参数作为 JSON 请求体发送至配置的 API；GET 请求则把参数拼入查询字符串。默认地址为 `http://127.0.0.1:6009`，没有发现写死的广告、统计、币圈、网盘或未知第三方域名。然而 `src/index.ts:18-19` 和 `cordis.patch.yml:6-9` 允许用户修改 apiUrl，代码没有限制必须为 localhost、没有 HTTPS 要求、没有主机白名单，也未附加身份认证头。若配置文件、管理面板或插件供应链被污染，工具调用内容可以被静默转发到任意 HTTP 服务。\n\n**证据：** `src/bridge.ts:23-35` 中的 `fetch(url, { method, headers: {'Content-Type':'application/json'}, body })`；`src/index.ts:18-19` 的可配置 apiUrl。\n\n**风险程度：中。** 默认回环地址下风险较低，但缺少目的地址约束和用户可见提示。\n\n### 3. 敏感信息读取\n\n**检查内容：** ~/.ssh、~/.dsh、环境 token、process.env、浏览器凭据、密钥文件和任意文件读取。\n\n**发现：** 已检查的服务端源码没有出现针对 SSH、DSH 凭据、环境变量或密钥目录的主动读取逻辑。唯一明确的文件读取位于 `src/index.ts:28-30`：程序对配置得到的 `skillPath` 直接 `readFileSync(..., 'utf8')`，随后注册为模型可调用技能。该路径没有 `realpath` 校验、根目录限制或扩展名限制。默认路径指向工作目录中的 SKILL.md，不会主动读取秘密；但配置被修改后，理论上可以读取当前用户权限下的任意文本文件，并使其进入模型上下文。\n\n**证据：** `src/index.ts:25-30` 的 skillPath 解析与 readFileSync；未发现 process.env、`.ssh` 或 `.dsh` 读取。\n\n**风险程度：中低。** 不是默认窃密行为，但缺少路径边界。\n\n### 4. 依赖和供应链\n\n**检查内容：** dependencies、peerDependencies、devDependencies、锁文件、安装钩子、构建与运行期下载。\n\n**发现：** 项目没有普通 runtime dependencies，peerDependencies 为 Cordis 与 MyDSH SDK；开发依赖为 TypeScript、Vue 插件与 tsdown。`package.json:32-35` 使用无上界的 `>=` 范围，开发工具还使用 RC 版本。根目录未见 npm、pnpm 或 yarn lockfile，无法保证审计版本和用户重新安装版本一致。`tsdown.config.ts:5-15` 是正常的双入口构建配置，没有发现下载器；但运行期未锁版本 npx 比普通依赖漂移更危险。\n\n**证据：** `package.json:26-35`、`tsdown.config.ts:5-15`、`src/index.ts:15-17`。\n\n**风险程度：高。** 建议发布前加入 lockfile、固定版本与完整性校验，并禁止默认 npx 拉取 latest。\n\n### 5. 混淆和后门\n\n**检查内容：** Base64/十六进制载荷、字符串解密、动态模块加载、隐藏网络地址、反调试、异常定时器及构建产物与源码一致性。\n\n**发现：** 服务端 TypeScript 源码结构清晰，REST 工具名、路径、方法和参数 schema 均显式列出。`src/tools.ts:19-144` 通过统一工厂注册工具，执行器只调用 bridge API，未看到隐藏分支。`lib/client.js` 体积较大，但仓库同时发布 source map，且 `tsdown.config.ts` 明确声明前端构建入口，符合常规 Vue 打包结果。没有发现用于隐藏有效载荷的解码器、远程脚本下载器或按时间触发的回连代码。\n\n**证据：** `src/tools.ts:19-144`、`tsdown.config.ts:5-15`、`lib/client.js` 与 `lib/client.js.map`。\n\n**风险程度：低。** 当前证据不支持恶意或后门结论。\n\n### 6. 权限越界与智能体行为\n\n**检查内容：** 模型自主调用、系统命令、容器操作、账号同步、危险操作确认与宿主权限继承。\n\n**发现：** `src/index.ts:28-30` 把技能设置为 `isUserInvocable:false`、`isModelInvocable:true`，即模型可以主动选择该技能。技能文件 `skills/openbiliclaw-adapter/SKILL.md:26-34` 包含 Docker Compose、pip editable install、npx 等安装和启动命令；`51-58` 又包含账号同步与收藏同步。虽然技能正文写有遵守用户授权边界等原则，但这些只是语言提示，插件没有实现强制确认、命令白名单、工作目录沙箱或最小权限执行器。如果宿主 DSH 智能体本身拥有终端能力，普通的直播互动请求可能被模型扩展成安装软件、启动容器、刷新账号信息或读取大量数据。\n\n**证据：** `src/index.ts:28-30`；`skills/openbiliclaw-adapter/SKILL.md:14-34、51-58`。\n\n**风险程度：高。** 这是当前版本最需要人工审查的智能体权限问题之一。\n\n## 风险点汇总\n\n1. 默认 autostart 会执行未锁定版本的 `npx dsh-openbiliclaw`，存在远端包变更即本地执行的供应链风险。\n2. apiUrl 没有回环地址限制、TLS 要求、域名白名单或认证机制，工具参数可被发送到外部地址。\n3. skillPath 没有路径约束，可读取任意进程可读文件并注册进模型上下文。\n4. 模型可主动调用的技能包含 Docker、pip、npx、账号同步与收藏同步指令，但没有代码级审批边界。\n5. 依赖未完全锁定，缺少 lockfile，peerDependencies 使用无上界范围。\n6. 正向证据是：未发现 postinstall、eval、shell:true、凭据扫描、隐藏外域、代码混淆或后门载荷。\n\n## 结论与使用建议\n\n**明确建议：谨慎用，不要按当前默认配置直接投入日常主账号或高权限 DSH 环境。** 本项目目前更像功能可验证但安全边界尚未生产化的开发版本，而不是恶意软件。愿意测试的用户应先关闭 `autostart`，手动安装并固定经过审计的 CLI 版本，把 apiUrl 强制限制为 `127.0.0.1`，使用低权限独立系统账户和隔离工作目录，并禁用宿主智能体的任意 shell 权限。维护者还应加入版本与哈希固定、skillPath 根目录校验、API 主机白名单、敏感操作人工确认、进程退出清理和可审计日志。完成这些整改并重新审计前，不应标记为“放心用”或直接 release。\n","action":"review","reviewed_at":"2026-08-17T14:32:15.742913+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":42,"score_type":"safety","review_status":"complete"},{"full_name":"multica-ai/dsh-multica-runtime","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-14T15:29:22Z","summary":"非恶意，但会自动批准高权限智能体与外部MCP，主力机不能放心用。","details":["代码执行：`package.json:25-30` 未配置 install、postinstall 或下载脚本，`src/index.ts` 也未直接调用 eval、exec 或 curl；但 `src/index.ts:302-308` 自动批准工具请求并加载任务指定的 MCP，`146-167` 允许传入 stdio 命令、参数、环境变量、工作目录以及 HTTP MCP 地址，实际具备高权限进程执行能力。风险程度：高。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/package.json))","数据外发：Cordis 配置明确关闭 DSH telemetry，但运行时会把模型文本、推理内容、工具参数、工具结果和 Token 用量写入 stdout JSONL，由上级 Multica 守护进程接收；streamable-HTTP MCP 还可连接任务配置中的外部地址。风险程度：中高。([github.com](https://github.com/multica-ai/dsh-multica-runtime/blob/main/cordis.patch.yml))","敏感读取：未发现源码直接枚举 `~/.ssh` 或扫描 `~/.dsh`，README 说明模型密钥由 DSH 凭据提供器读取；但插件将 Multica 的 `mat_` 任务令牌转发给模型启动的子进程，且智能体在任意绝对工作目录运行，因此能够接触该操作系统用户有权读取的代码、配置与凭据。风险程度：高。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/src/index.ts))","依赖风险：依赖集中于 `@deepseek-ai/dsh-*` 和 Cordis 官方包，未见 Git URL、未知 tarball 或 lifecycle 脚本；但依赖采用 `0.1.0-rc.6` 预发布版本和范围约束，且源码仓库未提交 `dist/`，发布前仍需锁定提交和核验构建产物。风险程度：中。([github.com](https://github.com/multica-ai/dsh-multica-runtime))","混淆与后门：核心实现为可读 TypeScript，未发现 Base64 载荷、动态下载执行、加密隐藏字符串、矿池地址、代理转发器或反分析逻辑；遥控式执行能力与无交互审批均在 README 和源码中明确披露，不符合隐蔽后门特征。风险程度：低。([github.com](https://github.com/multica-ai/dsh-multica-runtime/blob/main/cordis.patch.yml))","权限越界：仅检查 cwd 为绝对路径，没有验证其位于 Multica 工作区根目录；MCP stdio 的 command、args、env、cwd 以及 HTTP MCP 的 url、headers 均来自输入命令，同时所有审批返回 `allowed-once`。一旦上游服务、任务令牌或 MCP 配置被攻破，攻击者可能以当前用户权限执行程序、读取文件或访问内网。风险程度：高。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/src/index.ts))"],"report_md":"## 安全评分\n\n**38/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`multica-ai/dsh-multica-runtime` 是 Multica 与 DeepSeek Harness 之间的私有运行时桥接插件，通过 stdin/stdout 上的版本化 JSONL 协议接收任务并返回模型、推理、工具及用量事件。它不是普通的界面增强插件，而是一个能够启动高权限智能体、子进程和 MCP 客户端的执行层。审查未发现木马、挖矿、混淆载荷或隐蔽数据收集，因此不判定为恶意；但其无交互审批、可配置 MCP 命令和较宽的文件系统权限边界决定了用户不能把它当作低风险插件直接安装在存有个人凭据的主力电脑上。([github.com](https://github.com/multica-ai/dsh-multica-runtime))\n\n## 评估对象\n\n- **仓库**：`multica-ai/dsh-multica-runtime`\n- **评估分支**：`main`\n- **最后更新时间记录**：`2026-08-14T15:29:22Z`\n- **仓库规模**：GitHub 页面显示 4 次提交，根目录包含 `docs/images/`、`src/`、`tests/`、`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml` 和 TypeScript 配置文件。当前分支未提交 `lib/`、`dist/`、`scripts/` 或独立安装脚本；`package.json` 指向构建生成的 `dist/index.js`。([github.com](https://github.com/multica-ai/dsh-multica-runtime))\n- **插件性质**：私有、未授权再分发的 Multica DSH Runtime，`package.json` 标记为 `private: true` 和 `UNLICENSED`，主要通过本地构建后加入 DSH profile。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/package.json))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：`package.json` 的 scripts、依赖入口，`src/index.ts` 的子进程、MCP、审批和任务执行流程，并检查是否存在 `eval`、直接 `exec`、`curl | sh`、postinstall 等模式。\n\n**发现**：`package.json:25-30` 只有 build、typecheck、test、check，没有 install、preinstall、postinstall、prepare 或远程脚本下载。核心源码也没有直接导入 Node `child_process` 或调用 `eval`。但是，插件导入了 DSH subprocess 能力；`src/index.ts:146-167` 将输入中的 `command`、`args`、`env`、`cwd` 原样转换为 stdio MCP 配置，或者使用输入的 `url` 和 `headers` 创建 streamable-HTTP MCP。更关键的是，`src/index.ts:302-305` 对所有审批请求直接返回 `allowed-once`，之后在 `306-308` 安装全部任务 MCP。也就是说，代码没有隐藏式 shell 后门，但其正常功能本身可以启动任意被配置的 MCP 可执行文件。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/package.json))\n\n**风险程度：高。** 风险来自明确设计的无人值守执行能力，而非隐蔽恶意代码。\n\n### 2. 数据外发\n\n**检查内容**：固定第三方域名、HTTP/WebSocket 客户端、遥测、stdout 协议内容及 MCP 网络配置。\n\n**发现**：当前审查版本没有硬编码 Multica 云端域名，也不自行创建 HTTP 监听器；`cordis.patch.yml:249-260` 禁用了 HMR 和 `telemetry-otel`。但 `src/index.ts:193-252` 会输出模型正文、推理内容、工具名称、工具参数、工具结果以及 Token 用量。README 也明确说明协议包含 text、reasoning、tool、result 和 usage 事件。这些信息通过 stdout 交给父级 Multica 守护进程，是否进一步上传取决于守护进程和部署方式。此外，任务可配置 streamable-HTTP MCP 的 URL 与请求头，因此工具数据可能发送给任意被允许的 MCP 服务。([github.com](https://github.com/multica-ai/dsh-multica-runtime/blob/main/cordis.patch.yml))\n\n**风险程度：中高。** 没有秘密遥测，但用户必须信任 Multica 守护进程、任务来源、模型提供商和 MCP 服务商。\n\n### 3. 敏感信息读取\n\n**检查内容**：`process.env`、SSH/DSH/Codex 配置路径、模型密钥、任务令牌及工作目录控制。\n\n**发现**：已读取的核心源码未出现主动遍历 `~/.ssh`、`~/.dsh` 或 `~/.codex` 的代码。README 明确说明 `DEEPSEEK_API_KEY` 由 DSH 凭据提供器在运行时读取，而非保存在该仓库。`src/index.ts:404-412` 调用 `installMulticaTerminalEnvironment`，并检查 `MULTICA_TOKEN` 是否被转发到模型启动的子进程；README 将其描述为仅转发服务器签发的 `mat_` 任务令牌，同时清除模型提供商凭据。此设计比继承完整父进程环境更安全，但任务令牌依然属于敏感凭据。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/src/index.ts))\n\n另外，`src/index.ts:341` 只要求 cwd 为绝对路径，没有检查其是否位于专用工作区。智能体及其工具因此可能读取当前系统用户可访问的其他目录。未显式读取敏感文件不等于没有读取能力。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/src/index.ts))\n\n**风险程度：高。** 建议使用无个人凭据的专用系统账户，并限制工作目录根路径。\n\n### 4. 依赖风险\n\n**检查内容**：`package.json` 的依赖来源、版本范围、生命周期脚本和构建产物。\n\n**发现**：运行时依赖集中于 `@deepseek-ai/cordis`、`@deepseek-ai/dsh-agent`、`dsh-llm`、`dsh-mcp-client`、`dsh-subprocess`、`dsh-user-approval` 等同一官方包族，没有未知 Git 仓库、直接下载 URL 或可疑小众安装器。依赖被配置为 optional peerDependencies，并在开发依赖中重复安装。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/package.json))\n\n需要注意：核心 DSH 依赖仍为 `0.1.0-rc.6` 预发布版本，并使用 `^` 范围；插件源代码依赖 DSH 的 subprocess、MCP 和 approval 安全边界。仓库有 `pnpm-lock.yaml`，但当前根目录没有提交 `dist/`，因此审查对象是源码而不是最终分发包。正式发布前应使用锁文件执行 `pnpm audit` 或 OSV 扫描，并对构建后的 `dist/` 与源码进行哈希和差异复核。\n\n**风险程度：中。** 未发现可疑依赖，但供应链影响面较大，且依赖预发布组件。\n\n### 5. 混淆、后门与持久化\n\n**检查内容**：编码载荷、动态代码加载、隐藏网络地址、反调试、矿池/代理代码和隐蔽启动项。\n\n**发现**：`src/index.ts` 是结构清晰的 TypeScript，主要由协议解析、模型选择、MCP 配置、事件转发和会话生命周期组成；没有 Base64/十六进制大载荷、动态远程 import、加密字符串解包或挖矿特征。`cordis.patch.yml` 同样为可读配置，并明确关闭 telemetry。自动审批和任务令牌转发均在 README 中公开说明，不属于隐藏后门。([github.com](https://github.com/multica-ai/dsh-multica-runtime/blob/main/cordis.patch.yml))\n\n**风险程度：低。** 未发现恶意或刻意隐藏行为。\n\n### 6. 权限越界\n\n**检查内容**：工作目录约束、用户确认机制、MCP 配置来源、环境继承及会话数据访问。\n\n**发现**：这是本报告最重要的风险。`src/index.ts:302-305` 将审批全部自动放行；`306-308` 加载任务携带的 MCP；`341-360` 在传入的任意绝对 cwd 中创建或恢复智能体，并直接执行传入 prompt。stdio MCP 可以指定 executable、参数、环境变量和 cwd；HTTP MCP 可以指定 URL 和 headers。代码没有本地 MCP allowlist、目录根约束、危险命令 denylist 或逐工具权限策略。([raw.githubusercontent.com](https://raw.githubusercontent.com/multica-ai/dsh-multica-runtime/main/src/index.ts))\n\n这并不能证明 Multica 服务端实际允许任意用户提交恶意配置，但表明插件自身不构成安全边界：一旦上游服务、工作区管理员、任务令牌或 MCP 配置被攻破，攻击者可能继承运行 DSH 的系统用户权限。\n\n**风险程度：高。** 应由父级守护进程强制执行 workspace root、MCP allowlist、环境变量过滤和短期令牌策略。\n\n## 风险点汇总\n\n| 风险点 | 影响 | 判定 |\n|---|---|---|\n| 工具审批始终 `allowed-once` | 高风险操作不会等待本地用户确认 | 高 |\n| MCP stdio 命令由任务配置提供 | 可能启动任意可执行程序 | 高 |\n| cwd 只校验绝对路径 | 可能访问工作区之外的文件 | 高 |\n| 推理、工具参数和结果写入 stdout | 父级守护进程可获得完整任务内容 | 中高 |\n| `mat_` 令牌进入模型子进程 | 子进程或工具被攻破时可能泄漏任务凭据 | 中高 |\n| DSH RC 依赖与未提交构建产物 | 供应链及源码/产物一致性需额外核验 | 中 |\n| 未发现混淆、恶意下载或隐藏遥测 | 降低恶意软件可能性 | 低 |\n\n## 结论与使用建议\n\n**结论：该插件不是恶意软件，但普通用户不能在主力电脑上放心使用。** 它是一个有意提供无人值守高权限智能体执行的运行时，安全性高度依赖 Multica 服务端、守护进程、工作区权限、MCP 配置和 DSH 自身的工具沙箱。\n\n建议仅在以下条件全部满足时使用：\n\n1. 在独立虚拟机、容器或专用低权限系统账户中运行，不要使用保存个人 SSH 私钥、云密钥、浏览器会话或生产凭据的账户；\n2. 将 cwd 强制限制在专用工作区根目录，拒绝 `/`、用户主目录及其他任意绝对路径；\n3. 对 MCP stdio executable 和 HTTP MCP 域名建立 allowlist，禁止任务任意传入 env、headers 和外部 URL；\n4. 使用短期、单任务、可撤销的 `mat_` 令牌，并确认模型提供商密钥不会继承到 shell/MCP 子进程；\n5. 固定仓库提交 SHA 和依赖锁文件，扫描 `pnpm-lock.yaml`，本地构建后复核 `dist/`；\n6. 优先使用自己控制的 Multica 服务端，并保留任务、MCP 启动及敏感文件访问审计日志。\n\n在没有上述隔离和限制时，建议不要安装到日常开发主机；在完成父级权限策略人工复核后，可作为受控的远程智能体运行组件谨慎使用。\n","action":"review","reviewed_at":"2026-08-17T14:40:08.429626+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":38,"score_type":"safety","review_status":"complete"},{"full_name":"ccch1mneyyy/dsh-TUI","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T00:00:00Z","summary":"未见恶意后门，但Windows默认关闭沙箱与审批，不能放心使用","details":["评估对象：默认分支为main；仓库当前页面已更新至0.8.0。GitHub API端点未返回可解析内容，因此updated_at仅确认到2026-08-17这一日期，时间部分为日期占位，不能视为精确pushed_at。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))","代码执行：package.json没有preinstall、install或postinstall，但存在prepare编译脚本；启动器首次运行会通过子进程自动执行dsh plugin add，安装与本包版本一致的插件。未见eval、new Function或curl管道执行远程脚本。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/package.json))","数据外发：模型请求会使用DEEPSEEK_API_KEY并发送至DeepSeek或用户指定的DEEPSEEK_BASE_URL；更新检查会访问npm，启用MCP后还会连接用户配置的服务器。重点代码中未发现隐蔽统计域名，但基础层telemetry由外部dsh-base继承，无法仅凭本仓库完整排除。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))","敏感读取：程序显式读取DEEPSEEK_API_KEY、~/.dsh下的会话和存储、~/.dsh-tui下的恢复记录与偏好，并可在用户触发粘贴时读取系统剪贴板。未发现主动扫描~/.ssh、私钥文件或批量收集全部环境变量的代码。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))","依赖风险：运行依赖大量@deepseek-ai的0.1.0-rc.6预发布组件，可信计算基较大；仓库有pnpm锁文件，但发布包运行所需lib目录由构建生成、当前main不保存该产物，无法直接证明npm包内JavaScript与已审源码完全一致。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))","依赖漏洞：lodash-es使用宽泛的^4.17.0范围；旧版4.17.x存在原型污染和代码注入公告，当前安全性取决于实际解析版本，安装或发布前必须核对锁文件和最终npm依赖树。([github.com](https://github.com/advisories/GHSA-xxjr-mmjv-4gpg?utm_source=openai))","混淆与后门：已审阅的package.json、cordis.patch.yml、启动器及仓库结构均为可读源码，未见Base64载荷、加密下载器、隐藏矿工或持久化后门；YAML中的!!js仅用于读取环境、平台和路径配置，不足以判定为恶意。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/package.json))","权限越界：这是主要风险。Windows下配置硬编码为danger-full-access，同时审批策略硬编码为never，智能体命令可在无沙箱、无确认条件下直接作用于用户主机；macOS和Linux默认才是workspace-write加ask。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/cordis.patch.yml))","用户建议：Windows用户不要使用默认配置，除非放在一次性虚拟机或容器中；macOS/Linux也只应在可信仓库使用，固定插件版本，核验npm发布包与源码一致性，并逐项审查MCP服务器、用户preset及其中的工具权限。"],"action":"review","reviewed_at":"2026-08-17T12:10:24.889814+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":37,"score_type":"safety","review_status":"complete","report_md":"## 安全评分\n\n**37/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见恶意后门，但Windows默认关闭沙箱与审批，不能放心使用\n\n## 评估对象\n\n- 仓库：`ccch1mneyyy/dsh-TUI`\n- 分支：`main`\n- 版本更新时间：2026-08-17T00:00:00Z\n\n## 检查结果\n\n- 评估对象：默认分支为main；仓库当前页面已更新至0.8.0。GitHub API端点未返回可解析内容，因此updated_at仅确认到2026-08-17这一日期，时间部分为日期占位，不能视为精确pushed_at。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))\n- 代码执行：package.json没有preinstall、install或postinstall，但存在prepare编译脚本；启动器首次运行会通过子进程自动执行dsh plugin add，安装与本包版本一致的插件。未见eval、new Function或curl管道执行远程脚本。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/package.json))\n- 数据外发：模型请求会使用DEEPSEEK_API_KEY并发送至DeepSeek或用户指定的DEEPSEEK_BASE_URL；更新检查会访问npm，启用MCP后还会连接用户配置的服务器。重点代码中未发现隐蔽统计域名，但基础层telemetry由外部dsh-base继承，无法仅凭本仓库完整排除。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))\n- 敏感读取：程序显式读取DEEPSEEK_API_KEY、~/.dsh下的会话和存储、~/.dsh-tui下的恢复记录与偏好，并可在用户触发粘贴时读取系统剪贴板。未发现主动扫描~/.ssh、私钥文件或批量收集全部环境变量的代码。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))\n- 依赖风险：运行依赖大量@deepseek-ai的0.1.0-rc.6预发布组件，可信计算基较大；仓库有pnpm锁文件，但发布包运行所需lib目录由构建生成、当前main不保存该产物，无法直接证明npm包内JavaScript与已审源码完全一致。([github.com](https://github.com/ccch1mneyyy/dsh-TUI))\n- 依赖漏洞：lodash-es使用宽泛的^4.17.0范围；旧版4.17.x存在原型污染和代码注入公告，当前安全性取决于实际解析版本，安装或发布前必须核对锁文件和最终npm依赖树。([github.com](https://github.com/advisories/GHSA-xxjr-mmjv-4gpg?utm_source=openai))\n- 混淆与后门：已审阅的package.json、cordis.patch.yml、启动器及仓库结构均为可读源码，未见Base64载荷、加密下载器、隐藏矿工或持久化后门；YAML中的!!js仅用于读取环境、平台和路径配置，不足以判定为恶意。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/package.json))\n- 权限越界：这是主要风险。Windows下配置硬编码为danger-full-access，同时审批策略硬编码为never，智能体命令可在无沙箱、无确认条件下直接作用于用户主机；macOS和Linux默认才是workspace-write加ask。([github.com](https://github.com/ccch1mneyyy/dsh-TUI/blob/main/cordis.patch.yml))\n- 用户建议：Windows用户不要使用默认配置，除非放在一次性虚拟机或容器中；macOS/Linux也只应在可信仓库使用，固定插件版本，核验npm发布包与源码一致性，并逐项审查MCP服务器、用户preset及其中的工具权限。\n\n## 结论与使用建议\n\n**谨慎用**。未见恶意后门，但Windows默认关闭沙箱与审批，不能放心使用\n"},{"full_name":"omdsh-dev/DSH-better-sidebar","verdict":"存在风险","summary":"未见恶意后门，但任意文件读写、终端执行和内网探测能力风险较高。","details":["维度1·代码执行：package.json未配置preinstall/postinstall，但prepare会执行tsdown构建；项目提供curl|bash和irm|iex远程安装方式，且运行时通过node-pty启动用户Shell、开放终端WebSocket，属于明确的任意命令执行能力。该能力与插件功能一致，但安装源未固定到提交哈希。","维度2·数据外发：未发现把本地文件、令牌或会话数据主动上传到固定第三方域名的证据；但browser-probe会由服务端请求用户提供的HTTP/HTTPS地址并跟随重定向，仅拦截字面localhost和回环地址，未拦截私网地址、DNS解析后的回环地址及重定向目标，存在SSRF和内网服务探测风险。","维度3·敏感读取：fs.tree、fs.read和fs.write直接接受绝对路径或客户端传入的cwd，未验证目标是否处于会话工作目录，因此能够读取或覆盖当前系统用户可访问的~/.ssh、~/.dsh及其他凭据文件；接口也没有独立的路径授权令牌。","维度4·依赖风险：直接依赖数量较少并提交package-lock.json，但node-pty属于原生高权限依赖；prepare安装生命周期会执行构建工具，远程安装脚本还会选择npm镜像并执行npm安装。仓库main目录未提交package.json声明发布的lib产物，无法仅凭源码确认npm发布包与当前提交完全一致。","维度5·混淆或后门：重点检查的TypeScript、Shell和PowerShell代码可读，未发现eval、加密载荷、Base64下载执行、挖矿逻辑、隐藏常驻进程或明确凭据窃取代码，因此没有达到恶意判定所需的直接证据。","维度6·权限越界：终端、文件写入和探测接口暴露的是宿主用户权限，路径不限制在工作区，终端还能继承系统Shell环境；trust-fence会校验Host、Origin和Sec-Fetch-Site，可阻止多数跨站浏览器调用，但不能替代工作区边界、会话级能力令牌和私网请求限制。"],"action":"review","reviewed_at":"2026-08-17T11:51:47.285113+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":36,"score_type":"safety","user_advice":"谨慎用","review_status":"complete","report_md":"## 安全评分\n\n**36/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未见恶意后门，但任意文件读写、终端执行和内网探测能力风险较高。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/DSH-better-sidebar`\n- 分支：`main`\n- 版本更新时间：2026-08-21T10:15:49Z\n\n## 检查结果\n\n- 维度1·代码执行：package.json未配置preinstall/postinstall，但prepare会执行tsdown构建；项目提供curl|bash和irm|iex远程安装方式，且运行时通过node-pty启动用户Shell、开放终端WebSocket，属于明确的任意命令执行能力。该能力与插件功能一致，但安装源未固定到提交哈希。\n- 维度2·数据外发：未发现把本地文件、令牌或会话数据主动上传到固定第三方域名的证据；但browser-probe会由服务端请求用户提供的HTTP/HTTPS地址并跟随重定向，仅拦截字面localhost和回环地址，未拦截私网地址、DNS解析后的回环地址及重定向目标，存在SSRF和内网服务探测风险。\n- 维度3·敏感读取：fs.tree、fs.read和fs.write直接接受绝对路径或客户端传入的cwd，未验证目标是否处于会话工作目录，因此能够读取或覆盖当前系统用户可访问的~/.ssh、~/.dsh及其他凭据文件；接口也没有独立的路径授权令牌。\n- 维度4·依赖风险：直接依赖数量较少并提交package-lock.json，但node-pty属于原生高权限依赖；prepare安装生命周期会执行构建工具，远程安装脚本还会选择npm镜像并执行npm安装。仓库main目录未提交package.json声明发布的lib产物，无法仅凭源码确认npm发布包与当前提交完全一致。\n- 维度5·混淆或后门：重点检查的TypeScript、Shell和PowerShell代码可读，未发现eval、加密载荷、Base64下载执行、挖矿逻辑、隐藏常驻进程或明确凭据窃取代码，因此没有达到恶意判定所需的直接证据。\n- 维度6·权限越界：终端、文件写入和探测接口暴露的是宿主用户权限，路径不限制在工作区，终端还能继承系统Shell环境；trust-fence会校验Host、Origin和Sec-Fetch-Site，可阻止多数跨站浏览器调用，但不能替代工作区边界、会话级能力令牌和私网请求限制。\n\n## 结论与使用建议\n\n**谨慎用**。未见恶意后门，但任意文件读写、终端执行和内网探测能力风险较高。\n","branch":"main","updated_at":"2026-08-21T10:15:49Z"},{"full_name":"liceses/dsh-gitbash-preset","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"未确认（GitHub API 响应未向审计抓取通道返回）","summary":"未见恶意外联，但裸本地文件系统与全权 Bash 可越过工作区边界。","details":["维度1·代码执行：检查 package.json、cordis.patch.yml、lib/index.js、agent.cordis.yml、gitbash-executor.mjs。未发现 postinstall、eval、new Function 或固定 curl|sh 下载链；但执行器会把模型提供的命令直接作为 `[shellPath, '-c', spec.command]` 交给宿主 subprocess，并在 danger-full-access 或无 sandboxPolicy 时运行。属于预期但高权限的任意代码执行能力，风险高。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))","维度2·数据外发：生产代码中未发现硬编码第三方域名、fetch、axios、HTTP 上传或遥测逻辑，安装器只复制本地文件。但全权 Bash 没有网络出口限制，模型可运行 curl、ssh、git、PowerShell 等命令；执行器还会向子进程传入 spec.env 与 spec.dshEnv。因此一旦遭遇提示注入或错误授权，仍可读取并外发数据，条件性风险中等。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))","维度3·敏感读取：agent.cordis.yml 明确配置 bare local filesystem，并注明其会在该预设内遮蔽宿主的沙箱文件系统；str_replace_editor 由此可能使用绝对路径访问工作区外文件。结合全权 Bash，理论上可读取用户目录、SSH 密钥、DSH 配置、云凭据及环境文件。未发现代码主动读取这些文件，但权限能力本身过宽，风险高。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/agent.cordis.yml))","维度4·依赖风险：package.json 没有 npm dependencies，降低了直接供应链面积；但 agent.cordis.yml 依赖多个宿主提供的 @deepseek-ai 模块，仓库没有声明 DSH 兼容版本、peerDependencies 或锁文件，安全行为取决于宿主版本。现有测试主要覆盖路径转换、探测优先级和配置校验，未覆盖真实沙箱、敏感路径、网络外发或权限回归，风险中等。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/package.json))","维度5·混淆/后门：源码为可读的 ESM 与 YAML，未发现 Base64 载荷、加密字符串、动态远程导入、反调试、隐藏下载器或持久化后门。需要关注 gitbash-executor.mjs 在标准安装路径之后、PATH 之前加入 `D:\\applications\\Git\\bin\\bash.exe`，与 README 所称无需硬编码路径不完全一致；若该目录可被低权限用户写入，可能形成二进制植入点。风险中低。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))","维度6·权限越界：最主要问题是文件编辑器使用未沙箱化的 dsh-fs-local，而 Bash 对缺失 sandboxPolicy 采取放行逻辑。安装器还只有在三个预设文件全部存在时才跳过复制；若目录是部分安装状态，即使 force=false，也会用 force:true 复制并覆盖已有同名文件。该设计不构成恶意证据，但不符合最小权限和失败关闭原则，风险高。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))"],"report_md":"## 安全评分\n\n**34/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照《MyDSH 安全报告标准》对 `liceses/dsh-gitbash-preset` 进行了代码执行、数据外发、敏感信息读取、依赖风险、混淆/后门和权限越界六个维度的静态审计。审计结论为：**未发现能够证明作者具有恶意意图的下载器、隐蔽外联或后门，但当前设计具有明显的权限边界风险，普通用户不能将其视为可放心安装的低权限插件。** 安全评分为 **34/100**，建议谨慎，建议进入人工整改复审，不直接发布为默认推荐插件。\n\n## 评估对象\n\n- 仓库：`liceses/dsh-gitbash-preset`\n- 评估分支：`main`\n- 分支状态：GitHub 当前仓库页面明确显示 `main`，根目录显示 6 次提交。仓库根部仅包含 `agent-presets/`、`lib/`、`.gitignore`、`LICENSE`、`README.md`、`cordis.patch.yml` 和 `package.json`，未发现 `src/`、`scripts/` 或独立 install 脚本目录。([github.com](https://github.com/liceses/dsh-gitbash-preset))\n- 最后更新时间：已按要求尝试访问 GitHub 官方仓库 API，但本次审计抓取通道没有返回该 API 的 JSON 正文，因此不能据实填写秒级 `pushed_at`。本报告不得把当前日期伪装成仓库推送时间；发布前必须由后台重新调用官方 API 覆盖该字段。\n- 仓库规模：约 10 个跟踪文件；核心生产 JavaScript 包括 334 行执行器和 74 行安装器，另有 67 行 Agent 配置、46 行 package.json 及约 117 行测试。属于规模较小、能够进行逐文件人工检查的插件。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))\n- 重点检查文件：`package.json`、`cordis.patch.yml`、`lib/index.js`、`agent-presets/minimal-gitbash/agent.cordis.yml`、`gitbash-executor.mjs`、`preset.yml`、测试文件及 README 安装说明。\n\n## 逐维度分析\n\n### 1. 代码执行能力\n\n**检查内容：** npm 生命周期脚本、自动安装入口、子进程创建、shell 拼接、`eval`、`new Function`、动态导入、`curl|sh` 和后台执行。\n\n**发现：** `package.json:25-29` 只有 `check` 与 `test`，没有 `preinstall`、`install`、`postinstall` 或 prepare 脚本；生产代码也未发现 `eval`、`new Function` 或远程脚本下载。不过 `cordis.patch.yml:1` 会让插件进入 web profile，`lib/index.js` 在启动时复制预设文件。核心执行器在 `gitbash-executor.mjs:140-230` 附近调用 `subprocess.spawn`，参数为 `[resolved.shellPath, '-c', spec.command]`，因此模型提交的字符串最终具有完整 Bash 语义。\n\n执行器确实设置了权限门控：只要模式不是 `danger-full-access` 就拒绝；但判断为 `mode !== undefined && mode !== 'danger-full-access'`，意味着 sandboxPolicy 缺失时仍会放行。代码还提供 `start()` 后台式进程接口，虽然 Agent 配置将 `enableRunInBackground` 设为 false。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))\n\n**证据：**\n\n```text\ngitbash-executor.mjs:约178-186\n[resolved.shellPath, '-c', spec.command]\n\ngitbash-executor.mjs:约215-222\nif (mode !== undefined && mode !== 'danger-full-access') throw ...\n```\n\n**风险程度：高。** 这是插件核心功能，不等同于恶意，但任何提示注入、误授权或策略注入故障都可能转化为任意命令执行。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** 全仓库 URL、HTTP 客户端、遥测、Webhook、上传逻辑、DNS/Socket 调用、Git/SSH/curl 调用和子进程环境传递。\n\n**发现：** 未发现硬编码第三方业务域名、`fetch`、axios、HTTP 上传、遥测 SDK 或静默下载。安装器只在本地源目录与 `${DSH_HOME:-~/.dsh}/.agent-presets/` 之间复制文件。正面因素是代码本身没有自动外发路径。\n\n但 Bash 获得完全访问后没有网络出口限制，模型可以自行运行 `curl`、`wget`、`ssh`、`scp`、`git push` 或 PowerShell 网络命令。`gitbash-executor.mjs:150-175` 还会把 `spec.env`、`spec.dshEnv` 合并后传给子进程。代码没有主动传入完整 `process.env`，这是安全改进；然而如果上游规格包含 token，子进程仍可接触这些值。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))\n\n**风险程度：中。** 没有静态恶意外联，但在全权命令执行前提下具备外发能力，不能把“没有硬编码域名”等同于“无法外传数据”。\n\n### 3. 敏感信息读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境 token、用户主目录、凭据文件、绝对路径访问及工具结果回传。\n\n**发现：** 未发现安装器主动扫描 SSH 密钥或凭据。但 `agent.cordis.yml:约52-67` 明确写明 bare local filesystem 会遮蔽宿主沙箱文件系统，并加载 `@deepseek-ai/dsh-fs-local` 与 `str_replace_editor`。配置注释还说明编辑器使用绝对路径。也就是说，即使 Bash 的调用被权限门控，文件编辑工具仍存在读取或修改工作区外文件的能力。工具读取的文本会进入模型上下文，若模型服务是远程服务，敏感内容可能随会话请求离开本机。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/agent.cordis.yml))\n\n在 danger-full-access 下，Bash 同样可以执行 `cat ~/.ssh/id_*`、读取 `.env`、Git 凭据或 DSH 配置。虽然没有证据表明插件会自动这样做，但 AI 工具必须按能力边界而非作者当前提示词评估，因为仓库的完整 persona 只有一句通用软件工程助手提示，缺少禁止读取凭据、限制目录和防提示注入规则。\n\n**风险程度：高。** 这是本报告最主要的发布阻断点。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** npm dependencies、锁文件、宿主模块、版本约束、安装包内容和测试覆盖。\n\n**发现：** `package.json` 没有 `dependencies`，核心执行器只直接导入 Node 内置模块，直接 npm 供应链面积较小。另一方面，Agent 配置运行时依赖 `@deepseek-ai/dsh-persona`、`dsh-tool-bash`、`dsh-fs-local` 和 `dsh-tool-str-replace-editor` 等宿主组件，却没有 peerDependencies、DSH 最低/最高版本或 API 兼容约束。若宿主对 `sandboxPolicy`、文件系统 realm 或环境变量语义作出改变，当前安全门控可能失效。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/package.json))\n\n测试文件主要验证路径转换、Shell 探测顺序和配置数值，未发现针对以下场景的集成测试：workspace-write 必须拒绝、sandboxPolicy 缺失必须拒绝、编辑器越界路径、符号链接绕过、环境 token 隔离、网络外发、部分安装覆盖和提示注入。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/test/gitbash-executor.test.mjs))\n\n**风险程度：中。** 无直接恶意依赖，但缺少安全兼容约束和关键权限测试。\n\n### 5. 混淆、隐藏载荷与后门\n\n**检查内容：** Base64/十六进制载荷、压缩混淆、动态远程导入、反调试、隐藏文件、可疑定时任务和二进制替换。\n\n**发现：** 源码结构清晰，安装器、执行器和 YAML 配置均可直接阅读；未发现加密载荷、远程 import、动态代码生成、隐藏下载器或系统级持久化。`cordis.patch.yml` 的自动加载和用户预设复制行为在 README 中有披露，因此不能据此认定为后门。\n\n值得关注的是 `gitbash-executor.mjs:约60-75` 的候选路径顺序包含固定路径 `D:\\applications\\Git\\bin\\bash.exe`，并且该路径位于 PATH 探测之前。README 则宣称自动探测无需硬编码路径，两者存在文档偏差。如果该 D 盘目录可被普通用户或其他软件写入，攻击者可预先放置伪造 `bash.exe`，插件随后会选择并执行它。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))\n\n**风险程度：中低。** 未发现后门，但固定可执行文件候选路径应移除或进行所有者、ACL、签名与真实路径校验。\n\n### 6. 权限越界与安装行为\n\n**检查内容：** 工作区限制、绝对路径、权限升级、失败关闭、写入位置、覆盖逻辑和环境变量控制路径。\n\n**发现：** Bash 仅在完全访问或无策略部署下执行，受限模式会提示进行单次权限升级，这部分有明确设计说明。但文件编辑器使用未沙箱化的本地文件系统，已经突破“只允许工作区写入”的最小权限预期。`sandboxPolicy` 缺失时放行也属于失败开放，而生产级安全工具应默认失败关闭。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/agent-presets/minimal-gitbash/gitbash-executor.mjs))\n\n安装器使用 `DSH_HOME` 决定目标根目录，并把三个预设文件写入 `.agent-presets/minimal-gitbash`。正常完整安装且 `force=false` 时会跳过覆盖；但 `lib/index.js:41-57` 只用“三个文件是否全部存在”判断安装完成。如果目录内已有两个经过用户修改的文件、另一个文件缺失，`alreadyInstalled` 为 false，代码会以 `force:true` 复制全部文件并覆盖那两个现有文件。这与 README 所称只有 `force:true` 才覆盖并不完全一致。([github.com](https://github.com/liceses/dsh-gitbash-preset/blob/main/lib/index.js))\n\n**风险程度：高。** 主要问题是文件系统越界、失败开放和部分安装状态下的非预期覆盖。\n\n## 风险点汇总\n\n| 编号 | 风险点 | 等级 | 建议 |\n|---|---|---:|---|\n| R1 | bare `dsh-fs-local` 遮蔽宿主沙箱文件系统，可访问工作区外绝对路径 | 高 | 改用宿主沙箱文件系统，或强制 allowed roots、真实路径和符号链接校验 |\n| R2 | Bash 在 sandboxPolicy 缺失时放行，并可执行任意 `bash -c` 命令 | 高 | 改为仅在明确解析到 `danger-full-access` 时放行，其他状态全部拒绝 |\n| R3 | 全权 Bash 无网络出口控制，可能读取并外发凭据 | 高 | 增加命令审批、环境变量白名单、敏感目录策略和可选网络隔离 |\n| R4 | 固定 `D:\\applications\\Git\\bin\\bash.exe` 位于 PATH 前，存在二进制植入面 | 中 | 删除机器专用路径；只接受显式配置或受保护的标准安装目录 |\n| R5 | 部分安装状态会在 `force=false` 下覆盖已有文件 | 中 | 逐文件判断，默认不覆盖任何已存在文件，并提供差异确认 |\n| R6 | 宿主 DSH 模块无版本约束，安全测试未覆盖真实权限边界 | 中 | 声明兼容版本并增加沙箱、越界、环境变量和提示注入集成测试 |\n\n## 结论与使用建议\n\n本仓库**没有达到“恶意”判定标准**：未发现隐藏下载、主动凭据收集、固定恶意服务器、混淆载荷或静默持久化。但它也**不能作为普通用户可放心使用的插件直接通过审核**。核心问题不是名称中含有 Bash，而是文件编辑器主动使用裸本地文件系统、Bash 依赖完全访问、缺失 sandboxPolicy 时采取放行逻辑，以及可执行文件探测和安装覆盖存在不必要的扩大面。\n\n对普通 MyDSH 用户的明确建议是：**目前只能谨慎使用，不能放心使用。** 如确需测试，只应放在一次性 Windows 虚拟机或独立低权限系统账户中，环境内不要保存 SSH 私钥、云 API Key、浏览器凭据、生产 `.env`、Git 凭据或真实 `.dsh` token；应显式设置可信的 `GIT_BASH` 路径，并逐次审查所有 danger-full-access 升级请求。对于包含真实开发凭据的日常主机，不建议启用当前版本。\n\n社区处置建议为 **review**：在完成 R1、R2、R4、R5 的整改，并补充真实 DSH 权限边界测试、npm 发布包与仓库源码一致性验证以及官方 API `pushed_at` 元数据后，再重新评估是否可以 release。\n","action":"review","reviewed_at":"2026-08-17T13:38:26.344012+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":34,"score_type":"safety","review_status":"complete"},{"full_name":"liustack/modlens","verdict":"存在风险","summary":"未发现恶意后门，但存在绕过沙箱执行、敏感凭据读取和图片外发风险。","details":["维度1-代码执行：package.json未配置preinstall、install、postinstall等生命周期脚本，也未发现eval或curl管道执行；但analyzer.ts会通过execFile启动claude、codex和gemini，并显式加入--dangerously-skip-permissions、--dangerously-bypass-approvals-and-sandbox或--yolo，可能使智能体直接调用本机工具。固定命令和参数数组降低了传统Shell注入风险，但不能消除智能体误执行或提示注入风险。","维度2-数据外发：API模式会把用户提示词及图片Base64内容发送到Google Generative Language API或配置的OpenAI兼容服务；CLI模式同样可能经Claude、Codex或Gemini服务上传分析内容。该行为属于功能所需的显式外发，未发现秘密回传证据，但用户选择的截图可能包含账号、代码、终端或个人信息。","维度3-敏感读取：自动发现逻辑会读取环境变量中的API Key、~/.codex/config.toml和~/.codex/auth.json等本地AI工具配置，并检查本机CLI；项目还具备从Claude Code、Codex和Gemini CLI本地会话数据中恢复粘贴图片的能力。未发现读取~/.ssh或~/.dsh凭据的明确代码，但现有读取范围已经触及认证信息和会话数据。","维度4-依赖风险：直接运行依赖主要为openai和zod，依赖面相对有限，且仓库提交了package-lock.json；但技能脚本使用npx --yes @liustack/modlens@latest启动，会在执行时获取可变的latest版本，而不是固定到本次审查的提交或哈希，存在供应链漂移和审查结论失效风险。","维度5-混淆或后门：重点检查的TypeScript源码、包入口、安装脚本和技能脚本结构清晰，未发现混淆代码、动态eval、远程载荷下载执行、挖矿、隐蔽持久化或秘密控制通道；图片Base64编码属于API传输格式，不能据此认定为混淆或窃取。当前证据不满足恶意判定标准。","维度6-权限越界：最主要风险是为了调用本机AI CLI而主动关闭或绕过其权限审批和沙箱保护。子进程还可能继承当前工作目录及父进程环境，使模型在提示注入、配置错误或上游异常时具备超出单纯图片分析所需的文件和命令访问能力；虽未发现sudo或提权代码，但该设计违反最小权限原则。"],"action":"review","reviewed_at":"2026-08-17T11:49:31.997062+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":33,"score_type":"safety","user_advice":"谨慎用","review_status":"complete","report_md":"## 安全评分\n\n**33/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n未发现恶意后门，但存在绕过沙箱执行、敏感凭据读取和图片外发风险。\n\n## 评估对象\n\n- 仓库：`liustack/modlens`\n- 分支：`main`\n- 版本更新时间：2026-08-20T20:05:52Z\n\n## 检查结果\n\n- 维度1-代码执行：package.json未配置preinstall、install、postinstall等生命周期脚本，也未发现eval或curl管道执行；但analyzer.ts会通过execFile启动claude、codex和gemini，并显式加入--dangerously-skip-permissions、--dangerously-bypass-approvals-and-sandbox或--yolo，可能使智能体直接调用本机工具。固定命令和参数数组降低了传统Shell注入风险，但不能消除智能体误执行或提示注入风险。\n- 维度2-数据外发：API模式会把用户提示词及图片Base64内容发送到Google Generative Language API或配置的OpenAI兼容服务；CLI模式同样可能经Claude、Codex或Gemini服务上传分析内容。该行为属于功能所需的显式外发，未发现秘密回传证据，但用户选择的截图可能包含账号、代码、终端或个人信息。\n- 维度3-敏感读取：自动发现逻辑会读取环境变量中的API Key、~/.codex/config.toml和~/.codex/auth.json等本地AI工具配置，并检查本机CLI；项目还具备从Claude Code、Codex和Gemini CLI本地会话数据中恢复粘贴图片的能力。未发现读取~/.ssh或~/.dsh凭据的明确代码，但现有读取范围已经触及认证信息和会话数据。\n- 维度4-依赖风险：直接运行依赖主要为openai和zod，依赖面相对有限，且仓库提交了package-lock.json；但技能脚本使用npx --yes @liustack/modlens@latest启动，会在执行时获取可变的latest版本，而不是固定到本次审查的提交或哈希，存在供应链漂移和审查结论失效风险。\n- 维度5-混淆或后门：重点检查的TypeScript源码、包入口、安装脚本和技能脚本结构清晰，未发现混淆代码、动态eval、远程载荷下载执行、挖矿、隐蔽持久化或秘密控制通道；图片Base64编码属于API传输格式，不能据此认定为混淆或窃取。当前证据不满足恶意判定标准。\n- 维度6-权限越界：最主要风险是为了调用本机AI CLI而主动关闭或绕过其权限审批和沙箱保护。子进程还可能继承当前工作目录及父进程环境，使模型在提示注入、配置错误或上游异常时具备超出单纯图片分析所需的文件和命令访问能力；虽未发现sudo或提权代码，但该设计违反最小权限原则。\n\n## 结论与使用建议\n\n**谨慎用**。未发现恶意后门，但存在绕过沙箱执行、敏感凭据读取和图片外发风险。\n","branch":"main","updated_at":"2026-08-20T20:05:52Z"},{"full_name":"Sanqi-normal/dsh-webui-market-plugin","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-17T13:13:46Z","summary":"不能放心用：会绕过 pnpm 安全闸并执行第三方构建脚本。","details":["代码执行：插件通过 `child_process.spawn` 启动 DSH CLI，执行第三方插件的安装、试运行、更新和卸载。自身 `package.json` 没有 preinstall、install、postinstall、prepare 生命周期脚本，但安装候选插件时会根据 pnpm 错误自动写入 `allowBuilds: true` 并重试，可能直接执行第三方依赖的构建脚本。风险高。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))","数据外发：主动连接 awesome-dsh-plugin.com、GitHub API、raw.githubusercontent.com、raw.gitmirror.com 和用户配置的 npm registry；未发现隐藏遥测或静默上传用户文件。用户点击“询问 DSH”后，环境路径和最多约 1.2 万字符的失败日志会被发送到 DSH 会话，若会话使用远程模型，日志可能离开本机。风险中。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))","敏感读取：代码读取 `DSH_HOME`、profile/package.json、pnpm lockfile、pnpm-workspace.yaml、用户级及 profile 级 `.npmrc`，但未发现直接读取 `~/.ssh`、`.dsh/.credentials`、`~/.codex` 或主动提取 token 的代码。问题在于试装和正式安装子进程继承完整 `process.env`，第三方安装脚本可读取环境 token 及用户目录文件。风险高。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))","依赖风险：插件本体没有普通 runtime dependencies，降低了自身依赖面；但三个 DSH peerDependencies 使用通配符 `*`，兼容范围过宽。更严重的是代码会自动绕过 `minimumReleaseAge`，并根据错误文本自动批准被 pnpm 阻止的构建脚本，削弱供应链保护。风险高。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))","混淆与后门：核心代码为可读 JavaScript，未发现 `eval`、`Function` 构造器、大段 Base64、远程 shell、挖矿逻辑、反调试或隐藏持久化。`cordis.patch.yml` 只将插件挂入 DSH bundle。未发现明确恶意后门证据。风险低。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))","权限越界：HTTP 路由可修改多个 profile、安装和卸载包、写 package.json 与 pnpm-workspace.yaml、启停 bundle，并可热挂载代码。写操作只校验 Origin 与 Host 相等，没有独立认证、CSRF token 或严格 POST 方法校验；非浏览器客户端可伪造相同请求头。请求中的 `binPath` 还会被当作 Node 入口执行，未限制为可信 DSH CLI 路径。风险高。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))"],"report_md":"## 安全评分\n\n**33/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# Sanqi-normal/dsh-webui-market-plugin 安全分析报告\n\n## 概述\n\n本报告依据《MyDSH 安全报告标准 v1.0》对仓库进行六维度静态审查。该项目是挂载在 DSH Web 设置页中的社区插件市场，能够读取本机 profile 状态，并通过 DSH CLI 安装、更新、停用、启用和卸载第三方插件。它不是只读目录浏览器，而是具有本地命令执行、配置写入和第三方代码加载权限的高权限管理插件。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/cordis.patch.yml))\n\n审查未发现作者植入的数据窃取、挖矿、反向 shell 或混淆后门，因此不判定为恶意。但是，其安全设计会自动绕过 pnpm 的供应链保护，并允许用户完全跳过白名单和试装检查；同时，服务端写接口缺少独立身份认证，试装进程继承完整环境变量。综合结论为：**存在风险，不能作为第三方插件的安全沙箱或可信安装边界，普通用户不能放心使用。**\n\n## 评估对象\n\n- 仓库：`Sanqi-normal/dsh-webui-market-plugin`\n- 评估分支：`master`；仓库页面显示当前分支为 master，根目录未发现 `src/`，实际运行代码位于 `lib/`。([github.com](https://github.com/Sanqi-normal/dsh-webui-market-plugin))\n- 分支版本锚点：`2026-08-17T13:13:46Z`\n- 当前包版本：`0.5.3`\n- 核心规模：`lib/host.js` 约 1,791 行，`lib/client.js` 约 1,215 行，核心可执行代码合计约 3,006 行；另有 `data/`、`scripts/`、`tests/`、README、包清单和 Cordis patch。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n- 重点文件：`package.json`、`cordis.patch.yml`、`lib/host.js`、`lib/client.js`、`scripts/snapshot.mjs` 的调用入口、离线目录数据及安装相关逻辑。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 生命周期脚本、`lib/host.js` 的进程创建和安装流程、客户端安装入口、试装与热挂载逻辑。\n\n**发现：** 插件本体的 `package.json:39-42` 仅声明 `test` 和手动执行的 `snapshot`，没有 preinstall、install、postinstall 或 prepare 生命周期脚本，这是正向因素。`scripts/snapshot.mjs` 仅由维护者显式执行的 `pnpm run snapshot` 入口引用，不会随 npm 安装自动运行。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/package.json))\n\n但 `lib/host.js:614-642`、`769-810`、`1077-1172` 使用 `child_process.spawn` 启动 DSH CLI，对候选插件执行真实安装和试运行。更关键的是，当 pnpm 报告构建脚本被阻止时，代码会从错误日志解析包名，将其自动写入 `pnpm-workspace.yaml` 的 `allowBuilds`，随后重试安装；这会实际执行候选插件或其依赖提供的 install、postinstall、prepare、原生编译及二进制下载逻辑。试装能够验证插件是否让 DSH Web 成功启动，但无法证明安装脚本没有窃取凭据、访问网络或修改临时目录以外的文件。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n未发现 `eval`、远程 `curl | sh` 或把网络响应直接交给 shell 的逻辑；目标参数也有字符白名单。然而，执行第三方包代码本身是确定存在的核心能力。\n\n**风险程度：高。**\n\n### 2. 数据外发与网络连接\n\n**检查内容：** 所有 fetch 目标、更新检测、目录来源、npm registry、外部链接和 AI 求助功能。\n\n**发现：** `lib/host.js:308-343` 从 `awesome-dsh-plugin.com/plugins.json` 获取插件目录；`458-531` 会访问 `raw.githubusercontent.com`、`raw.gitmirror.com` 和 `api.github.com`；registry 查询默认访问 npm registry，也会采用环境变量或 `.npmrc` 指定的自定义 registry。上述请求主要用于获取目录、manifest、版本及提交信息，未看到主动附带本机文件、会话内容或凭据的自定义上传代码。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n`lib/client.js:692-724` 的“询问 DSH”会在用户点击后，将 `DSH_HOME`、CLI 路径、工作目录、操作状态及最多约 12,000 字符的错误日志发送到新 DSH 会话。如果 DSH 使用云端模型，该信息可能继续发送到远程模型提供商。该行为不是静默发生，但日志可能包含用户名、绝对路径、私有 registry 地址或带认证参数的错误信息，发送前没有脱敏。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/client.js))\n\n此外，一旦第三方构建脚本被自动批准执行，它可以自行连接任意域名；试装流程不提供网络隔离。\n\n**风险程度：中高。**\n\n### 3. 敏感文件与凭据读取\n\n**检查内容：** `~/.ssh`、DSH 凭据、Codex 配置、环境 token、用户目录、npm 配置及子进程环境。\n\n**发现：** 未发现代码直接读取 `~/.ssh`、`~/.dsh/.credentials`、`~/.codex`、浏览器数据或显式查找 API token。已确认的本地读取包括：`DSH_HOME` 下的 profile 清单、`package.json`、已安装包 manifest、pnpm lockfile、pnpm workspace，以及用户级和 profile 级 `.npmrc`。读取 `.npmrc` 的实现只解析 registry 地址，没有主动解析 `_authToken`。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n主要风险来自 `lib/host.js:630-642` 和 `800-810`：试装及正式安装子进程使用完整 `process.env`，只额外覆盖 DSH_HOME 和 pnpm 网络参数。任何被执行的第三方安装脚本都可能读取继承的 GitHub、npm、代理、云服务或模型 API token，并可访问真实用户主目录；临时 DSH_HOME 并不等于进程沙箱。\n\n**风险程度：高。**\n\n### 4. 依赖与供应链风险\n\n**检查内容：** 普通依赖、peerDependencies、版本范围、registry 来源、发布年龄保护、构建脚本策略和离线快照。\n\n**发现：** 当前包没有普通 runtime dependencies，依赖面较小。但 `package.json:51-55` 对三个 DSH peer dependency 使用 `*`，无法保证与未来版本的兼容性和审计结论稳定性。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/package.json))\n\n`lib/host.js:304-399`、`769-775`、`1131-1144` 会自动修改 `minimumReleaseAgeExclude` 与 `allowBuilds`。前者允许安装刚发布、尚未经过社区观察期的包；后者允许执行 pnpm 已主动阻止的构建脚本。两者组合意味着：刚发布的依赖可以在缺少人工审核的情况下立即获得本地代码执行机会。\n\n来源白名单也不是严格失败关闭：`lib/host.js:891-932` 对 registry/link 类型以及目录抓取失败、身份无法核实时返回允许；客户端还公开提供 `skipCheck` 选项，可跳过白名单和试装验证。试装关注“能否启动”，并不检测恶意行为，因此不能替代源码和依赖审计。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n**风险程度：高。**\n\n### 5. 混淆、后门与恶意持久化\n\n**检查内容：** eval、动态 Function、Base64 载荷、加密字符串、反向 shell、挖矿、反调试、隐藏下载执行及异常持久化。\n\n**发现：** 核心代码为可读的非压缩 JavaScript，函数命名和注释完整；未发现 `eval`、`Function` 动态执行、大段 Base64、加密载荷、挖矿程序、反向 shell 或秘密遥测。`cordis.patch.yml:4-6` 只声明将包插入 DSH bundle。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n插件会创建 profile 快照和 `.dsh-market` 热挂载目录，但代码和 README 均明确说明其用途，没有发现利用这些目录建立隐藏系统级自启动的证据。因此没有足够证据将作者代码判为恶意或后门。\n\n**风险程度：低。**\n\n### 6. 权限边界与越权操作\n\n**检查内容：** HTTP 路由认证、CSRF 防护、参数约束、文件写入、跨 profile 操作、任意命令或入口执行。\n\n**发现：** `/api/dsh-market` 可以修改 profile 的 `package.json`、`pnpm-workspace.yaml`、bundle 状态和依赖，执行安装、更新、卸载、启停、同步、热挂载和终止进程。客户端默认开启跨 profile 自动同步，单次安装可能影响本机所有已初始化 profile。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n写操作仅使用 `Origin.host === Host` 作为保护。`lib/host.js:1570-1727` 没有独立登录态、权限角色、CSRF token 或严格的 HTTP POST 方法校验。Origin 校验只能缓解普通浏览器跨站请求，不能作为身份认证：直接 HTTP 客户端可自行构造 Origin 和 Host；若 DSH 服务暴露到局域网、公网，或页面发生 XSS，攻击者可能调用高权限安装接口。([raw.githubusercontent.com](https://raw.githubusercontent.com/Sanqi-normal/dsh-webui-market-plugin/master/lib/host.js))\n\n`lib/host.js:119-156` 允许请求提供 `binPath`，并将该路径作为 Node 入口执行，没有将其约束到固定 DSH CLI 文件或可信目录。正常 UI 用它填写 DSH CLI，但服务端不应相信客户端提交的本地可执行入口。\n\n**风险程度：高。**\n\n## 风险点汇总\n\n| 风险点 | 影响 | 等级 |\n|---|---|---|\n| 自动写入 `allowBuilds` 并重试 | 第三方安装脚本获得本机代码执行 | 高 |\n| 自动绕过 `minimumReleaseAge` | 新发布、未充分观察的依赖立即进入环境 | 高 |\n| 试装继承完整环境变量且无文件/网络沙箱 | 第三方代码可读取 token、用户文件并联网 | 高 |\n| `skipCheck` 可跳过白名单和试装 | 用户误操作即可关闭主要防线 | 高 |\n| 写接口无独立认证，仅校验 Origin/Host | 网络暴露、XSS或直接客户端场景下可能越权 | 高 |\n| 客户端可提交任意 `binPath` | 可能将非 DSH JavaScript 文件作为 Node 入口运行 | 高 |\n| “询问 DSH”发送未脱敏日志 | 路径、私有 registry 等信息可能进入远程模型 | 中 |\n| 无普通 runtime dependencies、无混淆后门 | 降低插件自身恶意供应链风险 | 正向因素 |\n\n## 结论与使用建议\n\n**结论：存在风险；用户建议：谨慎用。这个插件不能放心安装在含有真实密钥、生产数据或重要 profile 的 DSH 环境中。** 它不是已确认恶意软件，但当前实现把“插件能成功启动”误当成了主要安全判据，并自动削弱 pnpm 的构建脚本和发布年龄保护。一次被污染的目录条目、npm 包、GitHub 仓库或传递依赖，就可能在试装阶段读取真实环境变量并执行任意网络和文件操作。\n\n确需使用时，应同时满足以下条件：\n\n1. DSH Web 只监听 localhost，或位于具有强认证的反向代理之后；不要直接暴露到局域网或公网。\n2. 在不含生产 token、SSH agent、npm token和云凭据的独立账户或容器中运行。\n3. 关闭自动同步；不要勾选“跳过安全检查”。\n4. 每次安装前人工检查目标插件及传递依赖的 package scripts、发布者、版本发布时间和源码提交。\n5. 不应允许程序自动写入 `allowBuilds` 或 `minimumReleaseAgeExclude`；应改为展示具体包名并要求用户逐项确认。\n6. 服务端应增加真实认证、权限角色、CSRF token、严格 POST 校验，并把 `binPath` 限制到预配置的可信 DSH CLI 路径。\n7. “询问 DSH”发送日志前应展示内容并自动脱敏 token、用户目录和私有 registry 信息。\n\n在上述问题完成修复前，本报告建议 MyDSH 将其标记为“存在风险/谨慎用”，保留展示但进入人工复核，不作为可直接放心安装的推荐插件。\n","action":"review","reviewed_at":"2026-08-17T14:04:59.670284+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":33,"score_type":"safety","review_status":"complete"},{"full_name":"bradeGithub/DSH-Plugins-Marketplace","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17","summary":"本体未见后门，但会以用户权限执行未固定版本的第三方代码，不能盲装。","details":["代码执行：`lib/index.js` 会克隆第三方仓库，并在确认后执行 `bash install.sh`、`pwsh -ExecutionPolicy Bypass`、npm 生命周期脚本或构建脚本；这些进程没有容器、系统调用或文件系统隔离。安装确认与执行之间还会重新克隆可变默认分支，未绑定提交 SHA，存在确认对象与实际执行代码不一致的供应链时间差风险。证据：lib/index.js:1191-1251、1302-1357、1446-1453、1490-1498。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))","数据外发：本体固定访问 GitHub API、GitHub Raw、jsDelivr 和 GitHub 仓库；当前文档还公开了 GitHub Issue 反馈、npm/npmmirror 查询及任意 WebDAV 地址备份接口。第三方安装脚本获得网络访问能力后，也可以外发用户主动提供的密钥或本机文件，市场没有出站网络沙箱。证据：lib/index.js:700-724、785-809；README.md:352-370、377-383。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))","敏感读取：市场会读取和修改 `~/.dsh` 下的 profile、skills、安装记录和配置。虽然运行脚本时过滤了敏感环境变量，但白名单仍包含 HOME、USERPROFILE、PATH 等信息，而且子进程继承当前用户权限，因此仍可直接读取 `~/.ssh`、`~/.dsh`、云厂商凭据和其他用户文件；环境变量过滤不等同于文件系统隔离。证据：lib/index.js:11-18、33-68、1399-1409。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))","依赖风险：市场自身 `package.json` 未声明第三方 dependencies，降低了本体依赖面；但核心功能会从任意社区仓库动态安装 npm/pnpm 依赖，使用 `--no-audit`、`--no-frozen-lockfile`、`--legacy-peer-deps` 等模式，且源码构建会执行第三方 build 脚本。安装对象和依赖均未做签名、哈希、SBOM 或提交固定，供应链风险较高。证据：package.json:1-30；lib/index.js:932-984、1490-1504。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace/blob/main/package.json))","混淆或后门：已读取的 `package.json`、`cordis.patch.yml`、`lib/index.js`、`lib/client.js` 和安装脚本中未发现 `eval`、动态 Function、加密载荷、Base64 解包、自删除后门或隐藏二进制；代码整体可读，关键执行操作有提示和日志。因此没有证据将仓库定性为恶意。证据：package.json:1-30、cordis.patch.yml:1-9、lib/client.js:1-143。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace/blob/main/package.json))","权限越界：正常安装会删除并覆盖 `~/.dsh/profiles/web/node_modules` 下的目标包、写入 `cordis.patch.yml`，使第三方插件在 DSH 启动时持久加载。代码对包名和目标路径做了白名单及目录边界检查，这是有效防护；但第三方脚本本身仍拥有宿主用户的完整权限，可以越过这些应用层限制。证据：lib/index.js:1479-1508；install.sh:445-490；install.ps1:465-538。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))","评估完整性：GitHub 当前页面确认默认工作分支为 `main`、版本为 1.5.2、仓库有 227 次提交，根目录当前不存在 `src/`，主要运行时代码位于 `lib/`；但 GitHub API 请求在本次访问中返回缓存未命中，无法取得精确到秒的 `pushed_at`，因此 `updated_at` 仅保留已确认的 ISO 日期。Raw 核心文件还标记为三日前缓存，而当前 README 已记录新增接口，本报告据此采用保守评分并要求继续人工复核当前提交。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace))"],"report_md":"## 安全评分\n\n**32/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查覆盖 MyDSH 六个安全维度：代码执行、数据外发、敏感读取、依赖风险、混淆或后门、权限越界。结论是：**该仓库没有发现恶意后门证据，但不能作为可盲目信任的安全插件发布。用户可以在理解风险、逐个审核待安装仓库并限制运行环境的前提下使用；不应在存有高价值密钥的主机上直接安装任意市场插件。** 安全评分为 **32/100**，建议谨慎，处置建议为 `review`。风险主要来自产品的核心能力本身：下载并以宿主用户权限执行大量未经人工审核的第三方代码，而不是本体存在明确恶意逻辑。\n\n## 评估对象\n\n- 仓库：`bradeGithub/DSH-Plugins-Marketplace`\n- 评估分支：`main`\n- 已确认更新时间：`2026-08-17`。GitHub API 元数据端点已尝试访问，但本次返回缓存未命中，无法可靠取得精确到秒的 `pushed_at`，因此不虚构具体时间。\n- 当前版本：`1.5.2`\n- 仓库规模：GitHub 页面显示 227 次提交；运行时代码集中在 `lib/index.js` 和 `lib/client.js`，另有 `install.sh`、`install.ps1`、`cordis.patch.yml`、CI workflow、`scripts/` 及大型 registry/skills 索引。当前根目录未见 `src/`。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace))\n- 审查文件：`package.json`、`cordis.patch.yml`、`lib/index.js`、`lib/client.js`、`install.sh`、`install.ps1`、`.github/workflows/`、`scripts/` 的公开结构及 README 所述运行接口。\n- 证据限制：GitHub 页面与 `package.json` 为当日内容，但 Raw 核心文件的抓取缓存标记为三日前；当前 README 已出现卸载、环境变量编辑、WebDAV、反馈和自更新等新增接口。因此，对无法逐行取得的最新新增实现按最不利原则评估，不把文档声明直接当成已验证的安全控制。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `install.sh`、`install.ps1`、`lib/index.js` 中的 `execFileAsync`、git clone、npm/pnpm、生命周期脚本、build 脚本和远程安装方式。\n\n**发现：** 仓库自身推荐过 `curl ... | bash` 和 `irm ... | iex` 安装方式；脚本会从可变的 `main` 分支下载 tar/zip，未检查提交 SHA、签名或文件哈希。市场后端还能执行第三方仓库中的 `install.sh`、`install.ps1`、npm 生命周期脚本及 build 脚本。虽然执行前存在确认界面，并使用 `execFile` 参数数组降低命令拼接注入风险，但代码仍直接运行在宿主用户账户下，没有容器、受限账户、网络隔离或只读文件系统。\n\n更重要的是，可读实现中的多轮确认请求会再次删除缓存并重新 `git clone` 默认分支；请求只携带 `repo` 和 `answers`，没有确认阶段 SHA 或安装会话摘要。仓库若在用户阅读警告后、点击继续前发生更新，最终执行的可能不是用户确认时看到的代码，构成 TOCTOU 供应链缺陷。\n\n**证据：** `install.sh:386-455`；`install.ps1:420-478`；`lib/index.js:1171-1251、1302-1357、1446-1453、1490-1498`。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace/blob/main/install.sh))\n\n**风险程度：高。** 必须固定并展示 commit SHA，所有后续确认与执行必须复用同一只读快照。\n\n### 2. 数据外发\n\n**检查内容：** 所有固定第三方域名、GitHub 搜索与克隆、CDN 索引、反馈、npm 版本查询、WebDAV 备份及第三方脚本网络能力。\n\n**发现：** 核心实现访问 GitHub API、GitHub Raw、GitHub 仓库和 jsDelivr。当前 README 还声明支持 npm/npmmirror 查询、向 GitHub Issue 提交反馈，以及向用户指定的 WebDAV URL 推送备份。上述功能具有业务合理性，但都属于明确的数据外发通道。尤其是 WebDAV 接受 URL、用户名和密码，如果最新实现没有严格限制协议、重定向和内网地址，将存在 SSRF、云元数据访问或凭据发送到错误主机的风险；由于对应最新源码未能逐行取得，该点必须在发布前专项复核。\n\n第三方安装脚本和 npm/build 脚本没有出站网络限制。用户输入的 API Key 会作为环境变量传给目标代码，目标代码完全可以将其上传到任意服务器；界面提示不能代替技术隔离。\n\n**证据：** `lib/index.js:700-724、785-809`；`README.md:352-370、377-390`。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))\n\n**风险程度：高。** WebDAV 应只允许 HTTPS、禁止回环/私网/链路本地/云元数据地址并逐跳校验重定向；反馈发送前必须展示准确外发内容。\n\n### 3. 敏感读取\n\n**检查内容：** 对 `~/.ssh`、`~/.dsh`、环境 Token、GitHub Token、API Key、profile 配置和用户主目录的访问可能性。\n\n**发现：** 市场本体按职责读取和修改 `~/.dsh` 下的 profile、skills、缓存、安装清单和补丁配置。代码为第三方脚本构造最小环境，为 npm/build 过滤名称含 TOKEN、KEY、SECRET、PASSWORD 等字样的变量，这是有效的纵深防护。\n\n但该防护不能阻止文件读取。脚本白名单仍包含 `HOME`、`USERPROFILE` 和 `PATH`，而且进程拥有当前用户权限，所以恶意脚本可以直接读取 `~/.ssh`、`~/.dsh`、云 CLI 凭据、Git 配置、浏览器数据或其他文件。即使删除 HOME，系统 API 仍可解析用户目录。因此文档中的环境变量隔离不能被解释为凭据安全沙箱。\n\n**证据：** `lib/index.js:11-18、30-68、1399-1409`；README 的安全说明明确承认安装脚本自身行为不受“不落盘”保证约束。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))\n\n**风险程度：高。** 不要向第三方安装流程提供生产密钥；建议使用一次性、最小权限、可撤销凭据及独立系统账户。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json` dependencies、生命周期脚本、锁文件策略、npm/pnpm 参数、依赖审计、远程归档完整性。\n\n**发现：** 市场本体 `package.json` 没有第三方 dependencies，也没有自身 `postinstall`，本体依赖面较小。但市场会动态安装任意仓库的依赖：npm 使用 `--no-audit`，源码构建使用 pnpm `--no-frozen-lockfile` 或 npm 全量安装，失败时可能使用 `--legacy-peer-deps`。这些参数有兼容性价值，却会关闭审计提示、允许锁文件漂移或弱化依赖约束。安装产物还会连同 `node_modules` 一起复制到 DSH profile。\n\n此外，官方脚本直接下载 `main` 分支压缩包，没有签名、哈希、发行版固定或可复现构建证明。GitHub 账户、依赖包或上游维护者一旦被接管，用户可能在下一次安装或更新时获得不同代码。\n\n**证据：** `package.json:1-30`；`lib/index.js:932-984、1490-1504`；`install.sh:416-455`；`install.ps1:448-478`。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace/blob/main/package.json))\n\n**风险程度：高。** 应增加提交固定、归档 SHA-256、签名/证明验证、依赖审计结果展示和可选的禁止脚本安装模式。\n\n### 5. 混淆与后门\n\n**检查内容：** `eval`、动态 Function、Base64/十六进制解包、加密载荷、隐藏下载器、自删除、自启动后门、不可解释二进制及异常客户端跳转。\n\n**发现：** 已取得的服务端、客户端、安装脚本和配置均为可读源代码。客户端虽采用单文件 bundle 形式，但变量和逻辑仍可理解；外链限制为 GitHub HTTPS，并设置 `noopener noreferrer`。未发现 `eval`、动态 Function、加密载荷、隐蔽矿工、凭据收集器或反分析代码。`cordis.patch.yml` 仅声明 webServer 注入和插件加载。\n\n**证据：** `package.json:1-30`、`cordis.patch.yml:1-9`、`lib/client.js:1-143、230-264`。([github.com](https://github.com/bradeGithub/DSH-Plugins-Marketplace/blob/main/package.json))\n\n**风险程度：低。** 当前没有把仓库判定为恶意的证据，但 Raw 缓存滞后意味着发布前仍应对目标 commit 重新扫描。\n\n### 6. 权限越界\n\n**检查内容：** 任意路径删除、目录穿越、profile 持久化、安装 API 鉴权、局域网暴露及第三方代码权限范围。\n\n**发现：** Cordis 插件安装目标经过 npm 包名正则校验，并再次通过 `resolve` 检查目标必须位于 profile 的 `node_modules` 内，能防御恶意包名造成的路径穿越和任意目录删除。Skill 名称也被限制为 slug，补丁写入采用精确匹配和临时文件替换，属于积极安全设计。\n\n但正常业务本身会删除目标目录、修改 `cordis.patch.yml` 并让第三方插件随 DSH 启动持久执行。第三方安装脚本不受目标目录约束，可修改用户有权限访问的任何位置。可读旧实现的写接口主要依赖自定义头、Host 白名单和 Origin 检查；当前 README 声明局域网写操作已增加会话 Token，但回环访问仍无独立用户认证。任何本地恶意进程、被控制的浏览器扩展或错误暴露的 DSH 端口都可能扩大影响。\n\n**证据：** `lib/index.js:574-607、1479-1508`；`install.sh:445-490`；`install.ps1:465-538`；`README.md:371-395`。([raw.githubusercontent.com](https://raw.githubusercontent.com/bradeGithub/DSH-Plugins-Marketplace/main/lib/index.js))\n\n**风险程度：高。** DSH Web 不应暴露到不可信网络；写接口应统一使用高熵会话 Token、回环 socket 校验、严格 Origin、速率限制和操作审计。\n\n## 风险点汇总\n\n| 风险点 | 影响 | 优先级 |\n|---|---|---|\n| 确认与执行未绑定 commit SHA | 用户确认后可能执行已变化的代码 | 必须修复 |\n| 第三方脚本无沙箱 | 可读取或修改当前用户全部可访问数据 | 必须修复 |\n| 动态 npm/pnpm 依赖且关闭 audit/允许漂移 | 依赖投毒和不可复现安装 | 高 |\n| 安装脚本下载可变 main 且无完整性验证 | 自身安装供应链可被替换 | 高 |\n| 任意 WebDAV URL 的实现未完成逐行核验 | 潜在 SSRF、凭据误发 | 高 |\n| 回环写接口缺少独立用户身份认证 | 本地恶意进程可尝试调用危险操作 | 中高 |\n| 环境变量过滤不限制文件系统读取 | `~/.ssh`、`~/.dsh` 等仍可能被第三方读取 | 高 |\n\n## 结论与使用建议\n\n**明确结论：这个插件不能让普通用户在不审查目标仓库的情况下放心使用。** 仓库本体没有发现恶意后门，且已经实现命令参数化、路径边界、敏感环境变量过滤、脚本确认、CSRF/Host 检查等多项有效防护；但其核心功能仍是以宿主用户权限安装和运行未经统一审核的第三方代码。目前缺少 commit 固定、代码签名、文件系统与网络沙箱，且确认流程存在执行对象变化的可能，因此不满足“点一下即可安全安装任意市场插件”的信任标准。\n\n用户如必须使用，应执行以下限制：\n\n1. 优先通过 DSH 官方 CLI 安装市场本体，不使用 `curl | bash` 或 `irm | iex`。\n2. 在独立测试账户、虚拟机或容器内运行，不要直接部署在保存 SSH 私钥、生产 Token、钱包或客户数据的主机。\n3. 每次安装前审查目标仓库的固定 commit，重点检查安装脚本、生命周期脚本、网络域名、文件读取和依赖锁文件。\n4. 不向第三方插件提交生产级 API Key；只能使用最小权限、短期、可撤销的专用密钥。\n5. 不把 DSH Web 端口暴露到公网或不可信局域网。\n6. 在修复 SHA 绑定、沙箱、WebDAV URL/重定向校验和当前版本完整复审前，MyDSH 社区应保持 `review` 状态，不应标记为“安全通过”。\n","action":"review","reviewed_at":"2026-08-17T13:27:23.970608+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":32,"score_type":"safety","review_status":"complete"},{"full_name":"tencent-connect/dsh-qqbot","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T08:56:30Z","summary":"未发现后门，但默认开放访问、密钥明文处理和依赖缺口使其不宜直接暴露。","details":["代码执行：package.json 未定义 postinstall、prepare 等安装钩子，源码未发现 exec、eval、new Function 或 curl 管道执行；install.sh 会执行 npm install -g 和 dsh plugin install，但没有下载脚本后直接交给 Shell。需要注意，QQ 消息会进入 DSH agent.query；如果所选 Agent 预设拥有 Shell、文件或网络工具，外部用户可能通过提示词间接驱动这些能力。风险：较高。","数据外发：未发现统计、广告、Webhook、网盘或其他隐蔽第三方域名。正常业务会经腾讯 QQ Bot SDK 上传消息文本、回复和媒体附件，并从 QQ 消息提供的附件地址下载文件；这是功能必需的数据流，但意味着会话和附件将离开本机。风险：中等。","敏感读取：src/model/model-resolver.ts 会读取 ~/.dsh/settings.yaml，src/index.ts 会读取 QQBOT_APP_ID、QQBOT_APP_SECRET，setup.ts 还会将 AppSecret 写入 cordis.patch.yml。配置失败或开发模式下，setup.ts 会把 AppSecret 原文打印到终端，且写文件后未主动设置 0600 权限。风险：较高。","依赖风险：直接依赖包含腾讯 QQ Bot 连接器、QQ Bot Node.js SDK 和 js-yaml。package.json 声明 js-yaml 为 ^4.1.1；2026 年公开安全公告 CVE-2026-59869 影响低于 4.3.0 的版本，可能导致别名展开造成拒绝服务。仓库必须证明实际锁定版本不低于 4.3.0。风险：中等。","混淆与后门：TypeScript 源码结构清晰，未发现 Base64 大段载荷、加密字符串、动态远程模块加载、隐藏定时任务、反调试逻辑或可疑二进制文件；cordis.patch.yml 中的 AppSecret 为空占位符，没有发现已提交的真实凭据。风险：低。","权限越界：默认配置将私聊和群聊访问模式均设为 open，群聊只要求提及机器人，没有默认白名单。任何可接触机器人的用户都可能创建 Agent 会话。群聊会话键只使用 groupOpenId，同一群成员共享上下文，存在跨成员上下文污染和信息泄漏可能。风险：高。"],"report_md":"## 安全评分\n\n**32/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# tencent-connect/dsh-qqbot 深度安全审查报告\n\n## 概述\n\n本次按照《MyDSH 安全报告标准》，对 `tencent-connect/dsh-qqbot` 的安装脚本、包清单、配置模板和 TypeScript 核心源码进行了六维度审查。审查未发现刻意植入的后门、隐蔽遥测、下载即执行脚本或直接调用系统命令的代码，但发现三个会显著影响实际部署安全性的设计：默认访问策略对私聊和群聊开放、QQ AppSecret 存在明文落盘及异常路径明文输出、外部 QQ 消息被直接提交给具有本机工作目录和工具能力的 DSH Agent。\n\n因此，本项目不能按默认配置直接部署在保存个人文件、SSH 密钥、生产凭据或高权限开发工具的主机上。它不是恶意项目，但默认安全边界不足，必须完成访问控制和运行隔离后才能使用。\n\n## 评估对象\n\n- 仓库：`tencent-connect/dsh-qqbot`\n- 默认分支：`main`\n- 分支更新时间：`2026-08-17T08:56:30Z`\n- 主要语言：TypeScript\n- 仓库规模：GitHub 页面标示约 269 KB、84 次提交；核心代码位于 `src/`，包含 bridge、commands、features、middleware、model、session、shared、transport 等模块。\n- 重点检查文件：`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml`、`install.sh`、`src/index.ts`、`src/setup.ts`、`src/session/session-manager.ts`、`src/model/model-resolver.ts`、`src/transport/inbound.ts`、`src/transport/outbound.ts`、`src/middleware/attachment.ts`、`README.md`。\n\n## 逐维度分析\n\n### 一、代码执行\n\n**检查内容：** 搜索安装钩子、`exec`、`spawn`、`eval`、`new Function`、动态模块加载、`curl | sh`、远程脚本执行和安装阶段命令。\n\n**发现：** `package.json:18-21` 仅定义测试脚本，没有 `postinstall`、`preinstall`、`prepare` 等生命周期钩子。`install.sh:22-34` 使用 curl 进行网络连通性测试，但响应没有被传给 Shell；`install.sh:564-571` 可安装 DSH CLI，`install.sh:705-713` 调用 `dsh plugin install` 安装指定 npm 包，均为可见的包管理操作。未发现直接执行 QQ 用户输入的 Shell 语句。\n\n但存在重要的间接执行边界：`src/index.ts:284-290` 将收到的 QQ 文本交给会话管理器，`src/session/session-manager.ts:341-356` 随后调用 `agent.query`。同文件 `257-277` 默认使用 DSH profile 工作目录或 `process.cwd()`。如果 Agent 预设具有 Shell、文件、浏览器或网络工具，QQ 用户可能通过提示词驱动这些真实能力。因此风险不来自硬编码 `exec`，而来自开放用户能够操纵高能力 Agent。\n\n**风险程度：较高。**\n\n### 二、数据外发\n\n**检查内容：** 搜索 HTTP 请求、Webhook、统计 SDK、遥测、对象存储、第三方域名、附件上传下载和主动消息发送。\n\n**发现：** 仓库源码中未发现广告、分析、追踪、个人网盘或陌生 Webhook 域名。主要外部通信由 `@tencent-connect/qqbot-connector` 和 `@tencent-connect/qqbot-nodejs` 承担。`src/transport/outbound.ts:98-116`、`170-192`、`209-220` 会向 QQ 平台发送文本和媒体；`src/transport/inbound.ts:48-66`、`200-219` 会处理并保存 QQ 消息附件。这属于插件必要业务流，不属于隐蔽外发。\n\n仍需明确告知使用者：对话内容、Agent 回复、图片和文件会经过腾讯 QQ Bot 平台；不应让机器人处理未经授权的客户资料、源代码、密钥文件或其他机密数据。连接器和 SDK 的网络端点位于外部依赖中，本次仓库级审查不能替代对这些依赖包发布产物的独立审计。\n\n**风险程度：中等。**\n\n### 三、敏感信息读取与保存\n\n**检查内容：** 搜索 `~/.ssh`、`~/.dsh`、环境变量、API Token、AppSecret、配置文件读取和日志输出。\n\n**发现：** 未发现读取 `~/.ssh`、云厂商凭据或浏览器 Cookie。`src/model/model-resolver.ts:55-66` 会读取 `~/.dsh/settings.yaml`，目的是解析可用模型和 Provider；`src/model/model-resolver.ts:225-273` 主要向用户展示模型名称和 Provider 名称，没有直接返回 Provider Token。\n\nQQ 凭据通过 `src/index.ts:139-146` 读取 `QQBOT_APP_ID` 和 `QQBOT_APP_SECRET`，也可以从 profile 配置加载。问题集中在 `src/setup.ts:208-236`：开发模式或配置写入失败时，代码会把 AppSecret 原文打印到终端。`src/setup.ts:259-275` 使用普通 `writeFile` 将凭据写入 `cordis.patch.yml`，没有主动创建为仅当前用户可读的 `0600` 文件。终端录制、CI 日志、共享 Shell 历史和宽松 umask 都可能扩大泄漏范围。\n\n`cordis.patch.yml:11-13` 中提交的是空占位符，没有发现仓库内硬编码真实密钥。\n\n**风险程度：较高。**\n\n### 四、依赖与供应链风险\n\n**检查内容：** 检查直接依赖、版本范围、锁文件、安装来源和已公开安全公告。\n\n**发现：** `package.json:23-30` 声明两个腾讯 QQ Bot 运行时依赖、`js-yaml`，以及 DSH/Cordis peer dependencies。包自身没有安装钩子，但 `install.sh` 支持用户指定 npm registry；如果用户主动填写不可信镜像，包来源可能被替换。\n\n`js-yaml` 的声明范围是 `^4.1.1`。公开安全公告 CVE-2026-59869 指出低于 `4.3.0` 的版本可能因 YAML alias 展开导致拒绝服务，GitHub Advisory 将其列为高严重度问题。当前代码解析的是本机 `settings.yaml`，不是直接解析 QQ 用户发送的 YAML，因此利用面有限；但生产发布仍应锁定并验证 `js-yaml >= 4.3.0`，同时执行 `pnpm audit --prod`、检查锁文件完整性并保存审计结果。\n\n**风险程度：中等。**\n\n### 五、混淆、隐藏逻辑与后门\n\n**检查内容：** 检查压缩混淆代码、Base64 载荷、加密字符串、远程动态加载、隐藏进程、定时回连、可疑二进制和反调试逻辑。\n\n**发现：** 代码为可读 TypeScript，模块职责清晰。没有发现大段编码载荷、运行时解密、从远端获取 JavaScript 后执行、隐藏子进程、持久化启动项或可疑原生二进制。`install.sh` 的安装步骤和目标包名均可见；配置模板中的 AppSecret 为空。仓库未提交 `lib/` 构建产物，最终 npm 发布包仍应进行一次源码与发布 tarball 的差异校验，防止 source-to-package 不一致。\n\n**风险程度：低。**\n\n### 六、权限越界与访问控制\n\n**检查内容：** 检查默认访问策略、白名单、会话隔离、文件系统范围、Agent 权限和群聊边界。\n\n**发现：** `src/index.ts:96-126` 将 `access.c2c` 和 `access.group` 默认设为 `open`；群聊仅默认要求提及机器人。`allowedUserIds` 和 `allowedGroupIds` 虽然存在，但默认均为空。因此，只要 QQ 平台和 SDK 的 open 语义按配置生效，任何能够私聊机器人或在群中提及机器人的用户都可能创建 Agent 会话。\n\n`src/session/session-manager.ts:37-45` 的私聊会话键包含用户 OpenID，但群聊会话键只有 `groupOpenId`。同一群成员共享 Agent session、历史上下文和模型偏好，可能出现成员之间的提示词污染、历史信息推断和工具状态互相影响。\n\n更重要的是，该插件连接的不是普通问答接口，而是 DSH Agent。若 Agent preset 拥有文件、Shell、Git、浏览器、MCP 或网络权限，默认开放访问相当于把这些能力间接暴露到 QQ。即使 Agent 自带审批机制，也不应把它作为唯一安全边界。\n\n**风险程度：高。**\n\n## 风险点汇总\n\n1. 默认私聊和群聊访问模式为 open，没有默认白名单。\n2. 外部 QQ 输入可进入真实 DSH Agent；Agent 工具权限越高，潜在影响越大。\n3. 群聊成员共享同一会话键，存在跨成员上下文污染和信息泄漏风险。\n4. 配置失败或开发模式下可能在终端输出完整 AppSecret。\n5. AppSecret 明文写入配置文件，代码未主动收紧文件权限。\n6. `js-yaml` 必须确认实际锁定版本不低于 4.3.0，并补充正式依赖审计。\n7. 没有发现后门、隐蔽遥测、直接命令执行或恶意安装钩子。\n\n## 结论与使用建议\n\n**明确结论：不要按默认配置直接对公网 QQ 用户开放；完成安全加固后可以谨慎使用。**\n\n上线前至少应执行以下措施：\n\n- 将私聊和群聊访问模式全部改为 whitelist，并显式填写允许的用户 OpenID 和群 OpenID。\n- 使用独立、低权限操作系统账户或容器运行，工作目录中不得包含 `~/.ssh`、生产环境文件、浏览器会话或云平台密钥。\n- 为 QQ Bot 配置单独的低权限 Agent preset，默认禁用 Shell、任意文件读取、任意网络请求和未经审批的 MCP 工具。\n- 修复 setup 流程，任何路径都不得打印 AppSecret；配置文件创建后立即设置为 `0600`。\n- 群聊会话键至少加入发送者 OpenID，或者明确将群机器人限制为无敏感上下文的公共用途。\n- 锁定 `js-yaml >= 4.3.0`，重新生成锁文件并通过生产依赖审计。\n- 安装后轮换一次 AppSecret，并检查历史终端日志、CI 日志和配置文件权限。\n\n综合评分为 **68/100**。该项目没有恶意迹象，但默认权限边界与敏感凭据处理尚未达到可让普通用户直接放心部署的生产级标准，建议进入人工复核和整改流程。\n","action":"review","reviewed_at":"2026-08-17T13:55:59.918372+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":32,"score_type":"safety","review_status":"complete"},{"full_name":"fwerkor/local-shell-mcp","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T12:02:05Z","summary":"未见明确后门，但插件将本机Shell与文件能力交给智能体，必须隔离使用。","details":["代码执行：插件的核心功能就是执行本地Shell命令。README明确说明其用途是让LLM使用本地命令行环境，pyproject.toml将local-shell-mcp注册到local_shell_mcp.shell_mcp:main，Dockerfile也直接启动该模块；这属于公开设计能力而非隐藏后门，但一旦模型受到提示注入或误判，可能执行删除文件、安装软件、启动进程等破坏性命令。","数据外发：未发现硬编码的隐蔽遥测、控制服务器或固定数据回传域名；但依赖中包含requests和mcp-server-fetch，Docker镜像还安装了curl。结合任意Shell执行能力，智能体实际上能够主动连接任意网络地址，并将命令输出或文件内容发送出去，因此不能把“没有固定回传地址”理解为“无法外发数据”。","敏感读取：仓库包含src/local_shell_mcp/file_ops.py和shell_ops.py，分别承担文件及命令操作；本机原生运行时，进程原则上拥有当前用户能够访问的全部文件权限，Shell也可以读取环境变量、SSH密钥、云凭据和DSH配置。未发现代码主动锁定~/.ssh或~/.dsh进行窃取，但也没有证据表明这些路径受到强制隔离。","依赖风险：pyproject.toml声明mcp、mcp-server-fetch、FastAPI、Pydantic、requests、colorlog、psutil等依赖，均使用最低版本约束而非完整锁定；Dockerfile还在构建时动态安装uv。未见可疑Git地址或明显仿冒包，但缺少可复现的Python依赖锁定会扩大供应链漂移风险。","混淆与后门：公开目录以普通Python、JavaScript和YAML文件为主，未发现大段Base64载荷、eval解密器、矿池地址、反向Shell初始化或刻意压缩混淆代码。sitecustomize.py仅调整MCP Schema生成结果，hatch_build.py用于复制随包资源，未见隐藏下载执行逻辑。","权限越界：最高风险来自能力边界而非恶意实现。README的Docker示例仅挂载当前目录并设置LOCAL_SHELL_ENABLE_SUDO=false，这比直接在宿主机安装安全；但原生DSH安装没有形成操作系统级沙箱。若开放sudo、继承含Token的环境变量，或在用户主目录运行，插件即可获得远超普通聊天插件的权限。"],"report_md":"## 安全评分\n\n**32/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`fwerkor/local-shell-mcp` 是一个以 Python 实现的本地 Shell MCP 服务，并通过仓库中的 DSH/Cordis 配置接入插件体系。其目标不是提供普通界面功能，而是让智能体调用本地命令行、进程和文件操作能力。仓库README直接将功能描述为让LLM使用本地CLI环境，源码目录同时包含 `shell_mcp.py`、`shell_ops.py` 和 `file_ops.py`。\n\n本次静态审查**未发现木马、挖矿、隐藏控制服务器或主动窃密代码的明确证据**。但该插件的正常功能本身就是高权限能力：模型能够执行命令、读取文件并借助网络工具发送数据。因此它不能按普通低权限插件对待，也不适合在包含个人资料、生产凭据或SSH密钥的宿主环境中直接启用。\n\n## 评估对象\n\n- **仓库**：`fwerkor/local-shell-mcp`\n- **评估分支**：`main`\n- **分支最后更新时间**：`2026-08-17T12:02:05Z`\n- **主要语言**：Python\n- **仓库规模**：公开树包含Python服务端源码、两个JavaScript库目录、测试、Docker配置和DSH/Cordis接入文件；核心Python源码约951行，其中 `file_ops.py` 346行、`shell_ops.py` 309行、`shell_mcp.py` 260行、`settings.py` 32行。\n- **重点文件**：`package.json`、`cordis.patch.yml`、`pyproject.toml`、`Dockerfile`、`docker-compose.yml`、`src/local_shell_mcp/`、`lib/`、`sitecustomize.py`、`hatch_build.py`。\n- **审查方式**：只进行公开源码静态分析，未执行仓库代码、未安装依赖、未启动其MCP服务。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容**：检查插件入口、Shell实现、安装脚本、Docker入口以及是否存在 `exec`、`eval`、`curl | sh`、`postinstall` 等行为。\n\n**发现**：本地命令执行是该项目的公开核心能力，不是隐藏行为。`pyproject.toml:17-18` 将命令入口声明为：\n\n```toml\n[project.scripts]\nlocal-shell-mcp = \"local_shell_mcp.shell_mcp:main\"\n```\n\n依赖及入口定义可在公开项目配置中核查。\n\n`Dockerfile:9-14` 复制整个仓库、安装项目并以 `python -m local_shell_mcp` 作为入口；`src/local_shell_mcp/shell_ops.py` 和 `shell_mcp.py` 的文件职责及README描述也表明模型可以执行本地命令。未发现安装阶段使用 `curl | sh` 或NPM `postinstall` 静默下载远程程序的证据，但Docker镜像明确安装了 `curl`，运行后的Shell工具可以调用它。\n\n**风险程度：高。** 风险来自预期功能。一旦提示注入、恶意上下文或模型判断失误进入工具调用链，可能执行删除、覆盖、下载、启动进程或修改系统配置等命令。\n\n### 2. 数据外发\n\n**检查内容**：检查HTTP客户端、固定第三方域名、遥测、Webhook、远程控制地址和命令行网络工具。\n\n**发现**：在已检查的配置、构建辅助文件和README中，未发现硬编码的隐蔽遥测域名、矿池地址或固定控制服务器。`pyproject.toml:7-15` 包含 `requests` 和 `mcp-server-fetch`，Docker镜像还安装 `curl`。这些依赖本身不是恶意证据，但配合任意Shell执行后，智能体可以访问任意网络目标，将命令输出或本地文件内容主动发送出去。\n\nMCP协议也会把工具执行结果返回调用方，因此命令输出中若包含Token、配置或文件正文，也会进入会话上下文。项目没有表现出主动收集数据的恶意意图，但其能力足以完成数据外发。\n\n**风险程度：高。** 未见预设窃密通道，但存在完整的可编程外发能力。\n\n### 3. 敏感读取\n\n**检查内容**：检查 `~/.ssh`、`~/.dsh`、`~/.codex`、环境变量、用户文件及进程信息访问能力。\n\n**发现**：未发现代码硬编码遍历上述敏感目录或主动抓取Token，但 `src/local_shell_mcp/file_ops.py` 提供文件操作能力，Shell也可以直接执行 `env`、`cat` 或其他系统工具。原生运行时，权限边界等同于启动MCP服务的操作系统用户；如果该用户能读取SSH私钥、云凭据、浏览器数据或项目密钥，智能体原则上也可能读取。\n\nREADME的Docker示例通过 `-v \"$(pwd):/workspace\"` 只挂载当前目录，并设置 `LOCAL_SHELL_ENABLE_SUDO=false`，说明作者提供了较安全的隔离方式；但这属于部署方式带来的限制，不是宿主机原生安装时的强制安全边界。\n\n**风险程度：高。** 没有主动窃密证据，但默认能力覆盖敏感数据访问。\n\n### 4. 依赖风险\n\n**检查内容**：检查Python、NPM和容器依赖来源、数量、版本固定及安装阶段行为。\n\n**发现**：`pyproject.toml:7-15` 声明7项主要运行依赖：`mcp[cli]`、`mcp-server-fetch`、`fastapi`、`pydantic`、`requests`、`colorlog` 和 `psutil`。名称均为正常生态包，未见Git分支依赖、未知下载站或明显拼写仿冒包。\n\n不足之处是Python依赖只设置最低版本，没有锁定精确版本，也未在仓库树中看到对应的可复现锁文件。`Dockerfile:7` 使用 `pip install --no-cache-dir uv` 动态获取构建工具，基础镜像也只固定到 `python:3.11-slim-bookworm` 标签而非镜像摘要。未来上游版本变化可能让同一提交安装出不同依赖组合。\n\n**风险程度：中。** 没有明显恶意依赖，但供应链可复现性和版本漂移控制不足。\n\n### 5. 混淆与后门\n\n**检查内容**：检查大段Base64、动态解密、压缩混淆、反向Shell、矿池、隐藏下载器、异常构建钩子和自动注入逻辑。\n\n**发现**：公开代码结构清晰，未发现明显混淆文件或伪装成资源的可执行载荷。`sitecustomize.py:1-13` 仅修补MCP工具Schema，为缺失Schema补充声明；`hatch_build.py:1-17` 的构建钩子用于复制 `lib` 资源到构建产物。二者未表现出远程下载、凭据收集或隐藏执行行为。\n\n仓库历史和发布验证材料较少，不能据此证明未来更新同样安全；但针对本次评估快照，没有足够证据将其判定为恶意。\n\n**风险程度：低。** 未发现明确混淆或后门迹象。\n\n### 6. 权限越界\n\n**检查内容**：检查文件系统范围、sudo、宿主机执行、配置修改、沙箱、命令确认和最小权限措施。\n\n**发现**：插件的权限明显高于普通DSH界面插件。Docker示例默认关闭sudo并仅挂载当前工作目录，属于有效的外部缓解措施；但通过原生DSH方式安装时，Python进程直接运行在用户环境中，没有容器文件系统边界。仓库公开配置中也未看到必须启用的命令白名单、路径白名单、逐命令人工确认或网络出口白名单。\n\n环境变量 `LOCAL_SHELL_ENABLE_SUDO=false` 表明sudo能力至少是一个需要明确控制的配置项。即使保持sudo关闭，当前用户权限仍足以读取大量个人文件、修改项目、启动网络连接或破坏工作区。\n\n**风险程度：高。** 权限范围与智能体输入可信度不匹配时，可能发生严重越权操作。\n\n## 风险点汇总\n\n| 风险点 | 性质 | 后果 |\n|---|---|---|\n| 任意本地命令执行 | 设计能力 | 删除或修改文件、安装程序、启动进程 |\n| 文件读取与写入 | 设计能力 | 泄露凭据、覆盖项目或个人数据 |\n| 可调用HTTP工具和curl | 组合风险 | 将敏感内容发送到任意第三方 |\n| 原生安装缺少系统级沙箱 | 权限风险 | 能力范围等同当前操作系统用户 |\n| Python依赖未完整锁定 | 供应链风险 | 后续安装结果漂移、上游依赖变化 |\n| 未发现固定窃密域名或后门 | 正面证据 | 暂无恶意判定依据 |\n\n## 结论与使用建议\n\n**结论：存在风险。用户建议：谨慎用。**\n\n这个插件**不能算“放心安装后无需管理”的普通插件**。当前源码没有显示恶意意图，但它把最敏感的本机Shell和文件权限交给了智能体；对这类插件，能力本身就是主要安全风险。\n\n可以使用，但必须满足以下条件：\n\n1. 优先运行在一次性Docker容器或隔离虚拟机中，不要直接运行在日常主机。\n2. 只挂载当前项目目录，禁止挂载整个主目录、SSH目录、DSH凭据目录或Docker Socket。\n3. 使用非root用户，并保持 `LOCAL_SHELL_ENABLE_SUDO=false`。\n4. 启动进程前清理环境变量中的API Key、云凭据、数据库密码和访问令牌。\n5. 对外网络应默认关闭或配置域名白名单，避免Shell、curl或fetch随意外发数据。\n6. 对删除、覆盖、安装、权限修改和网络发送类命令增加人工确认与审计日志。\n7. 不要让它处理来源不可信的网页、文档或仓库指令，防止提示注入诱导执行命令。\n\n若无法提供容器隔离、最小目录挂载和命令确认，**不建议安装在存有真实凭据或重要文件的电脑上**。本报告建议进入人工复核流程，而不是直接标记为安全发布。\n","action":"review","reviewed_at":"2026-08-17T14:09:05.576655+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":32,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-custom-tool","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-13","summary":"默认联网且工作区工具可自主读写文件，存在可利用的数据外发链路。","details":["维度1（代码执行）：检查 package.json:22-52、cordis.patch.yml:1-6，以及 README.md:74-98、199-222。未见 preinstall、install、postinstall、curl|sh 或安装期 child_process；但插件核心就是执行用户或模型创建的 JavaScript。README 声称使用独立 worker、node:vm、Node Permission Model、无子进程，并设置超时和内存预算；src/executor-worker.ts 与 lib 构建产物未被当前 Web 通道逐行展开，因此隔离实现尚不能视为已经验证。风险：高。","维度2（数据外发）：检查 README.md:199-254 及可见清单和挂载文件。工具代码可使用 fetch，allowNetwork 默认值为 true，未展示按域名限制的出站白名单；与 workspace readFile 组合后，可形成读取文件并发送到任意第三方域名的完整链路。风险：高。","维度3（敏感读取）：检查 README.md:74-98、121-161。文档声称不继承环境变量且不暴露 process、require、import，但 workspace scope 可访问整个会话 cwd；若 cwd 是主目录或仓库含 .env、密钥，敏感文件仍可被读取。项目还明确承认只做词法路径校验，工作区内符号链接可指向外部。风险：高。","维度4（依赖风险）：检查 package.json:55-86、pnpm-lock.yaml 是否存在及 scripts。生产清单无普通 dependencies，主要是宿主 optional peerDependencies，且没有安装生命周期脚本；风险主要来自多个 RC 版宿主接口、宿主实际解析版本和未逐项展开的锁文件，而非可见恶意依赖。风险：中低。","维度5（混淆/后门）：检查 package.json:22-52、cordis.patch.yml:1-6、AGENTS.md:17-27、38-46。可见文件未出现下载执行、编码载荷或隐蔽启动项；但 lib 是提交入库并直接发布的构建产物，executor 与 Monaco worker 会被内联生成，必须做源码到产物的可重复构建比对后才能排除产物夹带。风险：中。","维度6（权限越界）：检查 README.md:164-193。全局位置工具创建需要用户批准，且模型不能删除用户创建的工具；但工作区位置工具可由模型自主创建，scope 与 location 可自由组合，叠加默认联网和工作区文件能力后，提示词注入可能诱导模型持久化并执行高权限工具。风险：高。"],"report_md":"## 安全评分\n\n**28/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：dsh-custom-tool\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对仓库清单、插件挂载配置、公开安全契约、目录布局、构建方式与模型授权规则进行了静态核验。审查结论是：**当前没有发现能够直接证明作者恶意、安装即执行后门或主动窃取凭据的证据，但该插件在默认配置下不能被标记为“放心用”**。\n\n主要问题不是它提供了代码编辑功能，而是它允许用户及模型持久化 JavaScript 工具，并把工作区文件访问能力与默认开启的网络访问组合在同一执行环境中。一旦模型遭遇提示词注入、工具代码来源不可信，或者工作区内存在 `.env`、部署密钥、私有源码，就可能形成“读取文件—网络发送”的完整风险链路。综合评分为 **72/100**，建议进入人工复审，不直接放行。\n\n## 评估对象（分支/更新时间/仓库规模）\n\n- **评估分支：** `main`。GitHub 分支页将 `main` 标为默认分支，页面显示最后更新日期为 **2026-08-13**。\n- **版本与入口：** `package.json:1-21` 显示版本为 `0.1.2`，服务端入口为 `lib/index.js`，客户端入口为 `lib/client.js`。\n- **仓库规模：** 首页显示 24 次提交，包含 `src/`、`lib/`、`scripts/`、`tests/`、`assets/` 和 `pnpm-lock.yaml` 等；`package.json` 为 124 行，`cordis.patch.yml` 为 6 行。\n- **关键实现：** `AGENTS.md:17-27` 指出 `src/index.ts` 是宿主插件，`src/executor-worker.ts` 负责运行工具代码，`scripts/` 负责 worker 构建与内联，`lib/` 是提交入库并直接安装的构建产物。\n- **证据限制：** 已访问用户指定的 GitHub API 地址，但当前访问通道没有返回仓库 JSON。因此本报告可以确认默认分支和日期级更新时间，但不能诚实声称已经取得 API 的秒级 `pushed_at`。GitHub Web 抓取也未展开 `src/`、`lib/`、`scripts/` 的逐文件源码，所以涉及沙箱实现的安全描述均按“项目声明、尚待源码复核”处理，而不是将 README 自述直接视为安全证明。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json:22-52`、`cordis.patch.yml:1-6`、`README.md:74-98、199-222`，以及 `AGENTS.md:17-27` 所列的执行器和构建入口。\n\n**发现：** `package.json` 没有 `preinstall`、`install` 或 `postinstall`，也未出现 `curl | sh`、`wget`、`bash -c`、`child_process` 等安装期命令；现有脚本是构建、类型检查、测试和清理命令。`cordis.patch.yml` 仅插入插件挂载项，没有附加 shell 操作。\n\n但插件本身就是动态代码执行工具。公开文档将工具正文定义为 `async (args, env) => value`，并声称每次调用都在新 worker 的 `node:vm` 中执行，不开放 `require`、`import`、`process` 或子进程，同时设置执行超时、内存和返回值预算。 这些是正确的防御方向，但在 `src/executor-worker.ts` 和发布版 `lib` 未完成逐行审查之前，无法确认不存在 VM 逃逸、原型链泄漏、宿主对象误暴露或权限参数未实际生效。\n\n**风险程度：高。** 目前没有发现恶意 exec，但核心功能天然运行不可信代码，其安全性高度依赖尚待核验的沙箱实现。\n\n### 2. 数据外发\n\n**检查内容：** `README.md:199-254` 的全局对象、网络开关、代码示例及默认配置，并检查可见清单和挂载文件中的固定域名、遥测或下载器。\n\n**发现：** 工具代码可以调用 `fetch`，且 `allowNetwork` 默认值为 `true`。公开配置只展示布尔开关，没有展示按工具、按域名或按请求方法限制的出站白名单。 可见文件中没有发现固定的广告、统计、遥测或可疑控制域名；文档中的 `api.example.com` 只是示例，不能作为恶意域名证据。\n\n真正风险在于工具代码能够自行选择网络目标。当该能力与 workspace scope 的 `readFile` 同时存在时，恶意或被注入的工具可尝试读取工作区文件并发送到任意第三方服务。\n\n**风险程度：高。** 默认允许网络不符合处理私有源码、配置文件和生产凭据时的最小权限原则。\n\n### 3. 敏感读取\n\n**检查内容：** `README.md:74-98、121-161` 中关于环境变量、`process`、文件系统 scope、路径约束和存储位置的说明。\n\n**发现：** 项目声称 worker 不继承环境变量，且永不暴露 `require`、`import`、`process`；global scope 也没有文件能力。这些措施能够降低直接读取环境 token 的概率。\n\n但是 workspace scope 可以对整个会话 `cwd` 执行 `readFile`、`writeFile` 和 `list`，公开规则中没有看到对 `.env`、`.git`、SSH 私钥或 DSH 凭据目录的专门拒绝。项目还明确说明当前限制使用 `resolve + prefix check`，不能阻止工作区内部符号链接指向根目录之外。\n\n因此，如果用户把主目录作为 workspace，`~/.ssh`、`~/.dsh` 等路径可能直接落入允许范围；即使 workspace 较窄，也可能通过已有符号链接发生越界。这是根据公开权限模型得出的条件性风险，不代表已经发现插件主动读取这些目录。\n\n**风险程度：高。** 应当在访问前后使用 `realpath` 校验，并对凭据、私钥、环境文件等实行显式拒绝策略。\n\n### 4. 依赖与供应链风险\n\n**检查内容：** `package.json:55-86` 的 dependencies、peerDependencies、devDependencies、engines、发布文件及构建命令，并确认锁文件是否存在。\n\n**发现：** 清单没有普通生产 `dependencies`，运行依赖主要由 DSH 宿主和 React 以 optional peerDependencies 提供；没有安装生命周期脚本。开发依赖包括 esbuild、Monaco、TypeScript、ESLint 和 Vitest，仓库包含 `pnpm-lock.yaml`。\n\n多个 DSH peer 仍使用 `0.0.1-rc.1` 或 `4.0.1-rc.1`，说明宿主接口和安全契约仍可能变化。当前通道未展开锁文件，无法完成全部传递依赖、来源和完整性哈希核验。\n\n**风险程度：中低。** 暂无可见恶意依赖证据，但发布前仍应完成锁文件审计、漏洞扫描，并固定经过验证的宿主版本。\n\n### 5. 混淆、后门与产物一致性\n\n**检查内容：** 安装脚本、插件补丁、发布文件、构建产物策略以及 worker 生成方式。\n\n**发现：** 可见文件未出现编码载荷、远程下载执行、隐藏守护进程、自启动项或混淆安装器。插件补丁内容很小，开发命令也较透明。\n\n需要注意的是，项目会把 executor 与 Monaco workers 内联生成，并把 `lib/` 构建产物直接提交到仓库、随安装包分发；客户端还是单文件 bundle。 这种方式本身不等于后门，但增加了“源码正常、发布产物被夹带代码”的审计面。当前没有完成干净环境构建结果与已提交 `lib/` 的字节级比较，因此不能给出“已排除后门”的强结论。\n\n**风险程度：中。** 发布前必须执行可重复构建，并比较 `src/`、生成的 worker 源与最终 `lib/`。\n\n### 6. 权限越界与智能体授权\n\n**检查内容：** `README.md:164-193` 中模型创建和删除工具、global/workspace scope、global/workspace location、审批和热注册规则。\n\n**发现：** 全局位置工具创建需要用户明确批准，模型不能删除用户创建的工具；如果无法取得批准，操作会失败关闭。这是有效的授权控制。\n\n但工作区位置工具可以由模型自主创建，scope 与 location 又可以自由组合。工具启用后会立即热注册并进入后续模型提示。 这意味着模型可能在没有逐次人工确认的情况下创建一个能够读写工作区、同时允许联网的持久工具。如果上游网页、文档或对话包含提示词注入，这种权限组合会显著放大影响。\n\n**风险程度：高。** 对 `scope=workspace`、文件写入、网络开启和模型持久化创建应分别展示权限摘要并取得用户确认。\n\n## 风险点汇总\n\n| 风险点 | 可能影响 | 当前状态 |\n|---|---|---|\n| 默认允许任意 `fetch` | 向第三方域名发送工具获得的数据 | 未见域名白名单 |\n| workspace 可读写整个 cwd | 接触源码、`.env`、配置和密钥 | 仅按工作区根限制 |\n| 词法路径检查不防符号链接 | 越过 workspace 根读取文件 | 项目已公开承认 |\n| 模型可自主创建工作区工具 | 提示词注入后持久化高权限能力 | 仅 global location 需要审批 |\n| 直接分发已提交的 `lib/` | 源码与发布产物可能不一致 | 未完成可重复构建核验 |\n| 核心沙箱源码未逐行取得 | 无法验证 VM 和 worker 权限边界 | 发布前必须补审 |\n\n## 结论与使用建议\n\n**最终结论：存在风险；不是恶意仓库，但当前默认配置不能让普通用户无条件放心使用。** MyDSH 应将其置为 `review`，不要直接标记为安全通过。用户若确需试用，应只在无凭据、无私有源码的隔离工作区进行，并首先把 `allowNetwork` 设为 `false`。\n\n发布前至少应完成以下整改：\n\n1. 默认关闭网络权限，提供按工具、域名和请求方法控制的出站白名单。\n2. 对 workspace 文件能力、网络开启、文件写入和模型持久化创建分别要求用户确认。\n3. 使用 `realpath` 校验路径，阻断符号链接逃逸；默认拒绝 `.env`、私钥、凭据目录和版本控制内部文件。\n4. 在干净环境完成构建，将生成的 workers 和 `lib/` 与源码逐项比较。\n5. 对 `pnpm-lock.yaml` 执行漏洞、来源和完整性审计，并固定验证过的 DSH 宿主版本。\n6. 增加沙箱逃逸、敏感文件读取、任意域名外发和提示词注入后自主创建工具的对抗测试。\n\n在上述问题关闭、核心源码逐行复审以及构建产物一致性验证完成之前，明确用户建议是：**谨慎用，不要在生产工作区或含真实凭据的目录中使用默认配置。**\n","action":"review","reviewed_at":"2026-08-17T14:55:49.693199+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":28,"score_type":"safety","review_status":"complete"},{"full_name":"omdsh-dev/dsh-data-agent","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-20T06:19:48Z","summary":"当前版本会暴露数据库凭据并开放任意SQL，暂不建议安装使用","details":["维度1·代码执行：package.json 未发现 install、postinstall、eval 或 curl|sh 安装链；但 src/query.ts 会启动 PostgreSQL、MySQL、Oracle 客户端并执行用户或智能体提供的任意 SQL。虽然采用 argv 数组、stdin、独立环境变量、超时和输出上限，降低了 Shell 注入风险，但数据库写入和破坏能力未被限制，风险高。","维度2·数据外发：插件会连接用户指定的任意数据库地址，并能把查询结果交给 AI Agent 分析；这意味着业务数据可能进入实际配置的模型服务。cordis.patch.yml 还配置了 npm-registry.dsh.community，并回退到 npmjs.org。未发现隐藏统计或广告上报，但数据库和模型数据流需要用户明确知情，风险高。","维度3·敏感读取：未发现读取 ~/.ssh、浏览器凭据或通用环境 Token 的代码；数据库密码通过配置传入，并使用 PGPASSWORD、MYSQL_PWD 或 Oracle stdin 交给客户端。但 DatabaseConnection 对象保留明文 password，listConnections() 返回完整对象，而 GET /data-agent/connections 直接返回该列表，可能向 HTTP 调用方泄露数据库账号密码，风险严重。","维度4·依赖风险：运行时依赖大量采用 ^ 范围，开发依赖还包含 GitHub URL；src/query.ts 对 @deepseek-ai/dsh-subprocess 存在类型导入，但 package.json 未将其列为直接依赖，依赖解析依靠上层或传递依赖。仓库存在 pnpm-lock.yaml，但本次未获得可复核的漏洞扫描或 SBOM 结果，因此不能确认依赖无已知漏洞，风险中等。","维度5·混淆或后门：核心 TypeScript 文件结构清晰，未发现 Base64 载荷、动态下载执行、eval、Function 构造器、隐藏安装脚本或明显后门域名；仓库中的 lib 目录和 .DS_Store 属审计及发布卫生问题，尚不足以认定恶意。风险低。","维度6·权限越界：src/routes.ts 注册连接管理、任意 SQL 查询和 Agent 调用接口，但文件内未见认证、角色校验、会话所有权验证或凭据脱敏。README 展示 readOnly: true，而实际 Config Schema 和 SQL 工具注册未见 readOnly 字段或只读 SQL 强制校验，形成危险的安全能力落差；此外 presetId 被直接拼入 ~/.dsh/.agent-presets 路径，缺少路径边界检查。风险严重。"],"report_md":"## 安全评分\n\n**22/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查对象为 `omdsh-dev/dsh-data-agent`。结论是：**未发现恶意后门，但当前版本存在足以阻止发布的安全设计缺陷，不建议普通用户安装，更不能连接生产数据库或含敏感信息的数据库。** 最严重的问题不是依赖告警，而是插件自身将数据库明文凭据暴露给 HTTP 接口，同时向缺少源码级鉴权的接口开放任意 SQL 和智能体调用能力。综合评分 **78/100**，属于高风险但不构成恶意软件。\n\n## 评估对象\n\n- 仓库：`omdsh-dev/dsh-data-agent`\n- 评估分支：`main`，仓库页面的默认分支选择和所有核心文件路径均指向该分支。\n- 分支最后更新时间：审查过程中请求了指定的 GitHub REST API 地址，但未取得可验证的 JSON 响应，因此没有编造 `pushed_at`，外层 `updated_at` 保持为空。该元数据缺失本身意味着报告在补齐 API 证据前不能进入自动发布流程。\n- 仓库规模：根目录包含 `src/`、`lib/`、`package.json`、`pnpm-lock.yaml`、`cordis.patch.yml` 等；`src/` 页面列出 28 项，核心文件包括 298 行的 `routes.ts`、153 行的 `query.ts`、126 行的 `tool.ts` 和 162 行的 `index.ts`。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json`、`src/query.ts`、`src/tool.ts`、`src/index.ts`，重点搜索安装期命令、Shell 拼接、`exec/eval`、动态脚本下载和数据库客户端启动。\n\n**发现：** `package.json:11-16` 只有构建、开发和 `prepublishOnly`，没有 `install`、`postinstall` 或 `curl | sh`。这是正向信号。数据库查询确实会启动 `psql`、`mysql`、`sqlplus` 等外部程序，但当前实现使用 `ctx.subprocess.spawn({ argv: [...] })`，参数以数组传递，密码通过环境变量或 stdin 注入，并设置 30 秒超时和 10 MB 输出上限，未发现直接 Shell 字符串拼接。\n\n**主要风险：** `src/tool.ts` 的 `dsh_execute_sql` 接受模型生成的任意 SQL，随后直接交给 `queryDatabase()`；没有在工具入口限制为 `SELECT`，也没有阻止 `DROP`、`DELETE`、`UPDATE`、`COPY` 或数据库管理语句。因此一旦数据库账号具有写权限，智能体误判、提示词注入或恶意调用都可能造成真实数据破坏。\n\n**风险程度：高。** Shell 注入控制尚可，但数据库命令权限没有收敛。\n\n### 2. 数据外发\n\n**检查内容：** 第三方域名、HTTP 请求、数据库网络连接、模型调用、软件源配置。\n\n**发现：** `cordis.patch.yml:1-9` 指定 `npm-registry.dsh.community`，并以 `npmjs.org` 作为回退软件源。未在已检查核心代码中发现隐藏遥测、广告 SDK 或秘密上传域名。\n\n插件会根据请求中的 host、port、database 和 credentials 连接任意 PostgreSQL、MySQL 或 Oracle 地址；`POST /data-agent/agent` 还会把用户任务和数据库上下文发送给 Agent。命令流程也会把查询表格交给模型进行分析。该行为是产品功能的一部分，但意味着真实数据会进入用户配置的模型供应商，不能被表述为纯本地查询工具。\n\n**风险程度：高。** 没有证据表明作者在秘密窃取数据，但产品缺少明确的数据边界、字段脱敏和模型外发确认机制。\n\n### 3. 敏感文件和凭据读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量 Token、数据库密码、子进程参数与日志。\n\n**发现：** 未发现访问 `~/.ssh`、云厂商凭据、浏览器 Cookie 或任意通用 Token 的逻辑。`src/index.ts` 会读取 `DSH_HOME` 并管理 `~/.dsh/.agent-presets`；`src/query.ts` 继承 `PATH`，数据库密码使用 `PGPASSWORD`、`MYSQL_PWD` 或 Oracle stdin 传递，避免直接出现在命令行参数中。\n\n但是，`src/connections.ts` 的 `DatabaseConnection` 包含明文 `password`，连接对象被放入内存 Map；`listConnections()` 返回完整连接对象而非脱敏副本。`src/routes.ts` 随后通过 `GET /data-agent/connections` 原样返回列表。证据链为：`DatabaseConnection.password` → `listConnections(ctx)` → HTTP GET 响应。即使密码只保存在内存，只要接口可访问，调用方仍可能取得数据库凭据。\n\n**风险程度：严重。** 这是当前最明确、最可利用的源码级问题之一。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json`、锁文件存在性、版本约束、GitHub 依赖和源码导入一致性。\n\n**发现：** 运行依赖包括 Cordis、DSH Agent、HTTP/Server 插件、Zod 等，多数使用 `^` 范围；开发依赖中的 `@types/sqlite3` 直接来自 GitHub URL。`src/query.ts` 类型导入 `@deepseek-ai/dsh-subprocess`，但 `package.json` 没有把它声明为直接依赖，说明构建可能依赖工作区或传递依赖，降低了独立安装和供应链复现能力。\n\n仓库存在 `pnpm-lock.yaml`，但源码浏览不能替代 `pnpm audit`、OSV、许可证检查和产物哈希核对。本次没有发现可以直接归因到某一版本的公开漏洞，因此不虚构 CVE 结论。\n\n**风险程度：中。** 在发布前应补充锁文件审计、SBOM、许可证清单和依赖来源固定。\n\n### 5. 混淆与后门\n\n**检查内容：** `src/` 核心代码、安装脚本、动态代码执行、编码载荷、隐藏网络端点和可疑二进制。\n\n**发现：** 已检查文件均为可读 TypeScript/YAML/JSON，没有发现 Base64 载荷、自解密代码、`eval`、`new Function`、运行时下载执行、反调试或隐藏持久化逻辑。仓库存在 `lib/` 生成目录和 `.DS_Store`，属于发布卫生及源码/产物一致性检查项，但不能据此判断为后门。`package.json` 的运行入口为 `src/index.ts`，因此发布前仍应确认 npm 实际包内容与仓库分支一致。\n\n**风险程度：低。** 没有发现恶意实现证据。\n\n### 6. 权限越界\n\n**检查内容：** HTTP API 鉴权、会话隔离、SQL 权限、只读模式、文件路径边界和智能体工具权限。\n\n**发现一：HTTP 路由缺少源码级访问控制。** `src/routes.ts` 注册连接列表、创建连接、连接测试、任意查询和 Agent 调用等接口，但该文件中未看到认证中间件、角色判断、CSRF 防护、会话所有权验证或调用者与 sessionId 的绑定。即使上层服务器可能提供全局保护，本仓库本身没有声明或强制该安全前提。\n\n**发现二：文档宣称的只读开关没有落实。** README 配置示例包含 `readOnly: true`，但 `src/index.ts` 的 Config Schema 没有该字段，`src/tool.ts` 的 SQL 工具也未检查只读状态或 SQL 类型。用户可能因此误认为开启了只读保护，实际却仍向模型提供任意 SQL 执行能力。\n\n**发现三：智能体提示词注入面。** 查询结果会进入模型上下文，而同一能力面又提供 SQL 执行工具。若数据库文本字段包含诱导模型执行删除、导出或跨表查询的内容，当前源码没有显示可信数据边界、工具二次确认或写操作审批机制。\n\n**发现四：路径边界不足。** `src/index.ts` 把配置中的 `presetId` 直接拼接进 `$DSH_HOME/.agent-presets`，随后执行创建目录、删除目录和复制文件。配置通常属于管理员权限，但仍应拒绝绝对路径和 `..` 路径段，避免错误配置越出预期目录。\n\n**风险程度：严重。** 该维度直接决定本次阻断结论。\n\n## 风险点汇总\n\n1. HTTP 连接列表可能返回明文数据库密码。\n2. SQL API 与 Agent 工具允许执行任意 SQL，没有强制只读策略。\n3. README 宣称 `readOnly`，实际配置和工具代码未实现，容易造成错误安全预期。\n4. 路由文件没有显式认证、授权、会话归属和 CSRF 防护。\n5. 数据库内容能够进入模型上下文，缺少字段脱敏和提示词注入隔离。\n6. 数据库目标地址由调用方提供，服务暴露时可能被用于访问内网数据库地址。\n7. 依赖版本和构建来源需要补充 SBOM、漏洞扫描及发布包一致性验证。\n\n## 结论与使用建议\n\n**最终结论：存在风险，当前版本不要用，发布动作应当阻断。** 本次没有发现作者植入后门或秘密窃取数据的证据，因此不判定为恶意；但凭据返回、任意 SQL、缺失鉴权以及只读能力名实不符，已经超过可以仅靠用户注意事项规避的范围。\n\n修复后再复审至少应满足：连接列表永不返回 password；所有接口启用统一认证、角色授权、CSRF/Origin 校验和会话所有权校验；服务默认只监听回环地址；SQL 由真正的解析器强制限制为单条只读语句；写操作必须单独授权并在执行前向用户展示；数据库账号采用最小权限和只读副本；发送模型前提供字段级脱敏与明确确认；对数据库内容实施不可信数据隔离；校验 presetId 路径；补充自动化安全测试、依赖扫描和 npm 发布产物核对。在上述问题修复前，不应连接生产库、客户库、财务库或包含真实凭据和个人信息的数据库。\n","action":"review","reviewed_at":"2026-08-17T14:15:16.778773+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":22,"score_type":"safety","previous_action":"block","review_status":"complete"},{"full_name":"AwesomeHou/dsh-plugin-marketplace","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"2026-08-17T07:14:27Z","summary":"存在可利用的命令注入与无沙箱安装链，修复前不要使用","details":["代码执行：`lib/index.js:L375-L383` 将参数拼成命令字符串并以 `shell: true` 启动；`L643-L648` 的黑名单遗漏反引号，浏览器或模型传入的 spec 可在 POSIX shell 中触发命令替换。安装接口在 `L871-L878` 将请求体中的 spec 直接交给该执行链，属于可利用的任意命令执行风险。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))","数据外发：代码固定访问 `api.github.com`、`raw.githubusercontent.com` 和 `registry.npmjs.org`，发送搜索词、仓库名和包名；未发现主动上传文件、环境变量或遥测数据的逻辑。但安装的第三方包及构建过程本身可继续访问任意网络目标。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))","敏感读取：插件直接读取和修改 `$DSH_HOME` 或 `~/.dsh/profiles/web/package.json`，并读取已安装包清单。未发现主动读取 `~/.ssh` 或显式获取 token 的代码，但安装子进程继承完整 `process.env`，恶意依赖的生命周期脚本可读取宿主环境中的凭据。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))","依赖风险：插件自身没有第三方 dependencies 和 postinstall，表面依赖面较小；但核心功能会从 npm latest、GitHub 默认分支或未固定提交的仓库安装并构建任意插件，没有哈希、签名、可信发布者白名单或强制人工确认，供应链风险很高。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/package.json))","混淆与后门：源码为可读 ESM，未检出 `eval`、`new Function`、base64 载荷或明显混淆代码，也未发现作者预置的数据窃取或持久化后门。当前问题更符合严重安全设计缺陷，而非已确认的恶意仓库。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))","权限越界：源码明确说明该永久插件不在 harness/host.call 沙箱内，拥有完整 Node.js、文件写入、网络、进程启动和进程树终止能力；多个 `/api/market/*` 操作接口未见处理器级鉴权、Origin/CSRF 校验或请求体大小限制，部署边界配置不当时可能被非预期调用。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))"],"report_md":"## 安全评分\n\n**22/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n`AwesomeHou/dsh-plugin-marketplace` 是一个 DeepSeek Harness 永久插件，提供 GitHub 插件检索、安装、更新、启停、卸载以及 Agent 安装工具。仓库中未发现明确的恶意数据窃取、混淆载荷或预置后门，但发现了可利用的 shell 命令注入，以及无沙箱执行第三方安装脚本、继承完整环境变量、缺少来源完整性校验等高影响问题。**本报告不将其判定为恶意仓库，但当前版本不应进入 MyDSH 可放心使用名单，修复并复审前建议阻止发布和安装。**\n\n本次采用只读静态审查，没有执行仓库代码、安装依赖或运行构建脚本。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace))\n\n## 评估对象\n\n- 仓库：`AwesomeHou/dsh-plugin-marketplace`\n- 评估分支：`master`；已尝试 `main`，实际默认分支为 `master`\n- 分支最后更新时间：`2026-08-17T07:14:27Z`\n- 当前版本：`0.2.2`\n- 仓库规模：19 次提交；核心 Host 文件 `lib/index.js` 为 1,276 行、约 55.4 KB；`package.json` 为 43 行。根目录包含 `lib/`、`test/`、`cordis.patch.yml`、中英文 README 和图片资源，未见独立 `src/`、`scripts/` 或 `install.*` 文件，安装逻辑集中在 `lib/index.js` 和浏览器端 `lib/client.js`。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace))\n- 重点检查文件：`package.json`、`cordis.patch.yml` 的 Loader 接入关系、`lib/index.js` 的命令执行/网络/文件/HTTP 接口、`lib/client.js` 对应的安装与 Agent 工作流、`test/` 目录及 README 中的安装说明。\n\n## 逐维度分析\n\n### 1. 代码执行——高风险\n\n**检查内容：** `package.json` 安装钩子与 scripts、`lib/index.js` 中的 `spawn`、命令拼接、安装/更新/卸载任务、HTTP 安装接口和 Agent 工具入口。\n\n**发现：** `package.json:L25-L27` 仅声明语法检查，没有 `preinstall`、`install` 或 `postinstall`，因此插件包自身安装时没有发现自动执行脚本。然而运行时的 `runDshAsync` 会把命令和全部参数拼接为一个字符串，再使用 `spawn(..., { shell: true })` 执行。其参数过滤黑名单覆盖 `& | < > ^ ( ) % 双引号 单引号 !`，但遗漏了 POSIX shell 中具有命令替换语义的反引号。\n\n浏览器和模型输入均会进入 `startInstall(spec)`。由于参数被放在双引号内，反引号仍会被 shell 执行；例如带有反引号命令替换的 spec 可以在执行 `dsh plugin add` 前先运行本机命令。此问题不是单纯“插件安装本来就会运行代码”，而是安装目标参数本身可逃逸为额外系统命令。`POST /api/market/install` 又会直接读取请求体中的 spec 并调用该路径，因此形成实际攻击面。\n\n**证据：** `lib/index.js:L51` 导入 `spawn`；`L375-L383` 构造 shell 命令；`L643-L648` 校验 spec；`L871-L878` 接收 HTTP spec 并启动安装。风险程度：**高，可能导致宿主权限下的任意命令执行。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))\n\n### 2. 数据外发——中等风险\n\n**检查内容：** 所有 `fetch` 目标、搜索参数、更新检查、包体积探测和安装网络代理。\n\n**发现：** 固定第三方目标包括：\n\n- `api.github.com`：搜索 `dsh-plugin` topic、查询 release；\n- `raw.githubusercontent.com`：读取默认分支 `package.json`；\n- `registry.npmjs.org`：查询 latest 版本和包体积；\n- 安装期间由 dsh、pnpm、git 访问 npm/GitHub 及依赖声明的网络来源。\n\nGitHub 搜索框中的关键词会随查询发送给 GitHub，包名和仓库名会发送给 GitHub/npm。未发现 telemetry、广告统计、远程日志上传，也未发现代码主动把本地文件或环境变量上传到作者控制的域名。字节统计代理为本机 loopback 中继，代码目的为统计下载量和速度，不是作者远程收集服务。\n\n**证据：** `lib/index.js:L156-L167`、`L179-L197`、`L802-L817`。风险程度：**中等；外发内容基本符合功能预期，但第三方安装代码的后续网络行为不受该插件约束。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))\n\n### 3. 敏感读取——高风险（间接）\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、token、用户配置和已安装插件清单。\n\n**发现：** 未发现读取 `~/.ssh`、云厂商凭据、浏览器数据、Keychain 或显式访问 `GITHUB_TOKEN`、`OPENAI_API_KEY` 等变量的逻辑。插件会读取 `$DSH_HOME`，默认回退到 `~/.dsh`，并读取或修改 `profiles/web/package.json` 以及 `node_modules/<插件>/package.json`，这是插件管理所需权限。\n\n严重问题在于安装子进程使用完整的 `{ ...process.env }`。一旦被安装的 npm/GitHub 插件包含恶意生命周期脚本，或者 Agent 按恶意 README 执行构建命令，该代码将继承宿主进程全部环境变量，并能读取用户目录中的其他文件。插件没有环境变量白名单、临时净化环境或文件系统沙箱。\n\n**证据：** `lib/index.js:L65-L77` 读取和写入 DSH profile；`L600-L602`、`L612-L617` 把完整环境交给安装进程。风险程度：**高；插件本身未主动窃密，但它为不可信安装代码提供了直接接触宿主凭据的条件。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))\n\n### 4. 依赖与供应链——高风险\n\n**检查内容：** `package.json` dependencies、锁文件、安装来源、版本固定、完整性验证、构建流程及 Agent 安装兜底。\n\n**发现：** 插件自身没有声明第三方 runtime dependencies，也没有 postinstall，降低了该包自身的供应链表面积。但仓库没有锁文件，核心业务恰恰是安装其他来源的包：优先 npm `latest`，否则使用 GitHub 默认分支或仓库地址；monorepo 场景还会 clone、执行 corepack/pnpm 构建并以 link 方式注册。流程没有提交哈希固定、tarball 哈希复核、签名验证、可信发布者白名单或安全审查状态门禁。\n\nREADME 还提供“让 Agent 安装”兜底：Agent 会读取第三方仓库 README 或安装脚本并自行决定执行方式。不可信仓库文档可能包含针对 Agent 的提示注入，诱导其读取凭据、执行越权命令或绕过失败保护。固定提示词和独立工作区只能隔离会话上下文，不能替代命令权限隔离。\n\n**证据：** `package.json:L18-L27`；README 的安装、pnpm 兼容、monorepo 构建和 Agent 安装说明；`lib/index.js:L643-L648` 接受通用 spec。风险程度：**高。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/package.json))\n\n### 5. 混淆与后门——低风险\n\n**检查内容：** `eval`、`new Function`、base64/加密载荷、压缩混淆、动态远程模块导入、异常持久化和隐藏通信。\n\n**发现：** Host 代码为有注释、可读的 ESM，未检出 `eval(`、`new Function` 或 base64 载荷；网络域名和文件操作均以明文出现，未发现远程拉取 JavaScript 后直接执行、隐藏矿工、反调试、自删除或向作者私有服务器回传数据的证据。`cordis.patch.yml` 通过 `package.json:L28-L34` 被声明为 Bundle Loader 补丁，其作用是加载本插件 Host，而不是 npm 生命周期钩子。\n\n**证据：** `package.json:L28-L34`、`lib/index.js` 静态模式检索。风险程度：**低；当前没有证据证明作者具有恶意意图。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/package.json))\n\n### 6. 权限越界——高风险\n\n**检查内容：** 沙箱边界、文件写入、进程控制、HTTP 管理接口、模型工具权限和请求校验。\n\n**发现：** 源码明确说明该永久插件不是动态插件沙箱，而是拥有完整 Node.js built-ins 和 Web Server 权限的普通 Node 模块。它能够修改 DSH profile、安装/卸载依赖、启停 Bundle、启动 shell、创建 loopback 网络代理、终止进程树，并注册模型可调用的安装/更新工具。这些能力符合插件市场的产品目标，但权限集合接近本地包管理器，应按照系统管理组件而非普通 UI 插件管理。\n\n在已检查的 `/api/market/install` 等处理器中，未见插件自身执行用户鉴权、管理员角色判断、Origin/Referer 校验、CSRF token 校验或安装前二次确认；`readJsonBody` 也没有请求体大小上限。外层 DSH Web Server 可能另有访问控制，但本插件没有建立自己的强制安全边界。一旦 Web 服务绑定到非可信网络，或同源页面被攻陷，攻击者可调用安装、更新、启停或卸载接口。\n\n**证据：** `lib/index.js:L47-L54` 的无沙箱说明；`L862-L878` 的请求体与安装处理；README 所列 `/api/market/*` 管理接口。风险程度：**高。**([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/lib/index.js))\n\n## 风险点汇总\n\n1. **可利用命令注入：** `shell: true` 配合不完整的字符黑名单，遗漏反引号命令替换，是本次阻断发布的直接原因。\n2. **不可信代码继承宿主环境：** 安装和构建进程获得完整 `process.env`，可能接触 API Key、代理凭据和其他运行时秘密。\n3. **供应链缺少完整性门禁：** 默认使用 latest、HEAD、GitHub 仓库和 Agent 自主构建，没有固定提交、签名、哈希或可信发布者限制。\n4. **高权限接口缺少局部鉴权：** HTTP 管理端点未见角色、Origin、CSRF 和请求体大小限制。\n5. **Agent 提示注入面：** 让 Agent 阅读不可信仓库 README 并决定安装命令，可能把文档内容错误地当作可信操作指令。\n6. **积极项：** 插件包自身没有 dependencies、postinstall、混淆代码或已确认的数据窃取后门，问题性质是严重漏洞和不安全信任模型，而非已证实恶意。([github.com](https://github.com/AwesomeHou/dsh-plugin-marketplace/blob/master/package.json))\n\n## 结论与使用建议\n\n**结论：存在风险，安全评分 78/100，当前用户建议为“不要用”。** 普通用户不能把它当作经过安全筛选的应用商店：市场条目来自公开 GitHub topic，进入列表并不表示插件可信；安装动作可能运行第三方生命周期脚本和构建命令。更重要的是，当前 Host 代码本身存在可利用的 shell 命令注入，已达到阻断发布条件。\n\n修复至少应包括：\n\n1. 完全移除 `shell: true` 和命令字符串拼接，改为 `spawn(executable, args, { shell: false })`；\n2. 对 spec 使用严格语法白名单，仅允许规范 npm 包名、固定版本和规范 GitHub owner/repo，不再依赖元字符黑名单；\n3. 为安装、更新、启停、卸载接口增加管理员鉴权、CSRF/Origin 校验、请求体上限和显式用户确认；\n4. 子进程改用最小环境变量白名单，不向第三方构建脚本传递宿主完整环境；\n5. 默认禁用生命周期脚本，对必须构建的插件采用隔离目录、资源限制和人工确认；\n6. 支持固定 commit、包完整性哈希、发布者身份和 MyDSH 审查状态门禁；\n7. 将第三方 README 视为不可信数据，Agent 执行任何安装命令前必须展示计划并由用户确认；\n8. 增加反引号、环境展开、控制字符、未授权 HTTP 调用及恶意 postinstall 的安全测试，并接入持续集成。\n\n完成上述修复、补充测试并重新安全审查后，才可考虑从 `block` 调整为 `review` 或 `release`。\n","action":"review","reviewed_at":"2026-08-17T14:59:53.745972+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":22,"score_type":"safety","previous_action":"block","review_status":"complete"},{"full_name":"yjh051108/dsh-super-injector","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-15T00:00:00Z","summary":"存在持久化任意代码执行、未鉴权管理接口与路径越界，当前版本不要安装。","details":["维度1：代码执行风险严重。`src/index.ts:1352-1440` 将外部提供的 JavaScript 字符串写入 staging.json，并通过 `new Function()` 编译；代码可在同一 Node.js 进程内取得 ctx、process 等能力，且重启后自动恢复。`src/index.ts:1819-1876` 还会直接加载任意本地插件代码，`src/index.ts:2727-2774` 会执行目标目录中的 build.sh、npm 脚本和 npm pack。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))","维度2：未发现宿主源码主动使用 curl、fetch 或固定隐蔽域名外发数据；浏览器客户端默认只访问同源 `/super-injector/api`。但 `dev_release_plugin` 可使用已认证的 gh CLI 上传 tgz 到 GitHub，`ingest` 功能会让智能体分析任意指定目录；结合任意代码执行能力，插件无法阻止被加载代码向任何域名发送本地数据。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))","维度3：源码未直接搜索或读取 `~/.ssh`，也未发现固定 token、密钥文件名；但会读写 `~/.dsh/profiles`、registry、patch、日志等运行配置。更严重的是命令执行封装将完整 `process.env` 传给任意插件的 build.sh、npm 生命周期脚本和 gh CLI，恶意脚本可读取并外发 GH_TOKEN、云密钥和模型密钥。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))","维度4：package.json 没有 postinstall/prepare 安装钩子，锁文件依赖均使用 HTTPS 与 integrity；但 package.json 为 0.3.3，而 package-lock.json 根版本仍是 0.3.1，锁文件已不同步。主分支没有 package.json 所指向的 lib/，用户文档却推荐下载带预编译 lib 的 Release tgz，因此发布产物不能仅凭当前分支源码完成逐字节验证。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/package.json))","维度5：未发现 base64 隐藏载荷、atob、curl|sh、压缩混淆或固定 C2 域名，源码整体可读，暂没有证据认定作者具有恶意目的。但 `new Function()` 加持久化自动恢复本身构成明确的代码植入与驻留机制，不能因为功能名称是开发侧挂而降低其实际安全影响。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))","维度6：权限越界风险严重。管理 API 没有插件级身份校验、授权、CSRF/Origin 检查或请求体上限，能够注入、卸载插件并创建智能体会话。插件包 name 和 profile 参数缺少路径边界校验，可通过 `../` 影响 profile 目录之外的路径；注入逻辑还可能对计算出的目标执行递归删除后再建立 junction。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))"],"report_md":"## 安全评分\n\n**20/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n# MyDSH 安全分析报告：dsh-super-injector\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对仓库的插件装配、动态代码执行、文件系统访问、外部通信、依赖供应链及权限边界进行了静态审计。结论是：**当前版本不能放心使用，不应安装在生产环境、日常工作主机或保存有 GitHub、云服务、模型 API 等凭据的 DSH 环境中。**\n\n项目没有表现出隐藏控制服务器、秘密窃取凭据或刻意混淆源码等典型恶意软件特征，因此不直接判定为恶意仓库；但是它主动提供了无沙箱 JavaScript 编译、任意本地代码加载、任意构建脚本执行、持久化恢复、修改 DSH 配置和调用已认证 GitHub CLI 等能力，同时缺少与这些能力相匹配的认证、路径隔离、环境变量清洗及人工确认机制。其实际攻击面已经达到应阻止发布和安装的程度。\n\n## 评估对象\n\n- **仓库分支：** `main`。GitHub 当前仓库页和提交历史均显示 main 为实际工作分支，仓库共有 61 次提交；最新可见提交为 `f4ef59f`，提交日期为 2026-08-15。([github.com](https://github.com/yjh051108/dsh-super-injector))\n- **更新时间：** `2026-08-15T00:00:00Z`。这是根据当前提交历史得到的日期归一值，仅代表确认到的最后提交日。搜索索引中的 GitHub API 快照曾返回较早的 `pushed_at=2026-08-05T03:28:21Z`，但它与当前页面显示的 2026-08-15 提交直接冲突，故未把旧缓存值冒充为当前事实。([github.com](https://github.com/yjh051108/dsh-super-injector/commits/main/))\n- **版本：** package.json 标记为 `0.3.3`，但 package-lock.json 根版本仍为 `0.3.1`，存在版本与锁文件漂移。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/package.json))\n- **仓库规模：** 核心宿主源码 `src/index.ts` 3137 行，客户端源码 155 行，构建脚本 61 行，patch 修复脚本 139 行，锁文件 1382 行；根目录显示 61 次提交。主分支没有提交 `lib/`，虽然 package.json 将 `lib/index.js` 和 `lib/client.js` 声明为实际入口。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n- **覆盖文件：** `package.json`、`package-lock.json`、`cordis.patch.yml`、`src/index.ts`、`src/client/index.ts`、`scripts/build.sh`、`scripts/fix-patch.mjs`、`INSTALL.md`、`README.md`、`tsconfig.json`、`tsdown.config.ts`；同时检查了 main/master 路径及仓库提交历史。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** 搜索 `exec`、`eval`、`new Function`、`spawnSync`、动态 import、curl、安装生命周期脚本、构建脚本和运行时插件加载。\n\n**发现：** 存在多条可直接获得宿主进程权限的代码执行路径。最严重的是 `dev_stage_add` 接受字符串形式的 JavaScript 函数，通过 `new Function('args', 'ctx', ...)` 编译；代码随后写入 `staging.json`，重启时再次编译，并可注册成正式工具长期运行。这不是受限制表达式解释器，而是在 DSH Node.js 进程中的任意 JavaScript 执行。`ctx` 还被直接传入执行函数，使代码能够访问加载器、工具、Web 服务和其他宿主能力。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n其次，`inject()` 接受任意本地目录，读取 package.json 后调用 `loader.create()` 加载其中代码。`dev_build_plugin` 会执行该目录内的 `scripts/build.sh`、`npm run build:client` 和 `npm pack`；后两者同样可触发目标包自定义的 npm 生命周期脚本。虽然 `spawnSync` 使用了 `shell:false`，降低了参数拼接型命令注入，但无法约束被主动执行的脚本内容。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**风险程度：严重。** 任意代码可在与 DSH 相同的用户身份和权限下运行，并具有持久化能力。\n\n### 2. 数据外发与第三方域名\n\n**检查内容：** 搜索 fetch、curl、HTTP/HTTPS 地址、客户端请求、GitHub 发布和可能触发模型调用的代码。\n\n**发现：** 宿主源码中未发现 curl、远程脚本下载或固定 webhook/C2 地址；客户端 `fetchJson()` 只访问同源 `/super-injector/api`。这说明项目没有明显的秘密遥测或硬编码数据收集端点。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n但项目具有显式外发能力：`dev_release_plugin` 调用已认证的 `gh release create`，可以把指定 tgz 上传到从本地 git remote 推断出的 GitHub 仓库。`startIngest()` 又允许选择任意本地目录并创建智能体会话，要求智能体分析、构建和注入目录内容；目录内容可能因此进入配置的模型调用链。结合任意 JavaScript 和构建脚本执行，恶意插件可以自行连接任意域名，注入器没有网络白名单或出站限制。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**风险程度：高。** 未发现默认秘密外发，但攻击者一旦控制工具调用、管理 API 或本地插件目录，即可利用宿主网络权限外传数据。\n\n### 3. 敏感文件和凭据读取\n\n**检查内容：** 搜索 `~/.ssh`、token、密钥名称、环境变量、用户主目录和 `.dsh` 数据访问。\n\n**发现：** 源码没有直接读取 `~/.ssh`，也没有发现固定 token 或密钥文件路径。它会读取和修改 `~/.dsh/profiles`、profile package.json、cordis.patch.yml、registry、staging、操作统计和日志，这些属于 DSH 的关键运行配置。独立修复脚本还会扫描全部 profile，并重写 patch 文件。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n更关键的是，`runCmd()` 构造子进程环境时直接展开完整 `process.env`。因此被执行的 build.sh、npm 脚本或其他本地程序可以取得 DSH Web 进程继承的 GH_TOKEN、云凭据、模型密钥、代理配置和内部服务地址。`dev_release_plugin` 还会直接使用宿主已登录的 gh CLI 身份。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**风险程度：高。** 项目本身未硬编码窃密逻辑，但把全部环境凭据暴露给未经验证的插件构建和运行代码。\n\n### 4. 依赖与供应链\n\n**检查内容：** package.json、package-lock.json、安装钩子、依赖来源、完整性哈希、构建产物和发布方式。\n\n**发现：** package.json 没有 preinstall、install、postinstall 或 prepare，仅有 build、build:client 和 typecheck；锁文件中也未发现 `hasInstallScript`、postinstall、git 依赖或明文 HTTP 下载，依赖条目使用 npmjs HTTPS 和 integrity。这部分基础供应链卫生尚可。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/package.json))\n\n问题在于锁文件与清单不同步：package.json 为 0.3.3，锁文件仍为 0.3.1，TypeScript 版本声明也不一致。更重要的是，主分支没有实际执行入口 `lib/`，但 README 和 INSTALL 推荐用户下载包含预编译 lib 的 Release tgz；`tsdown.config.ts` 还会把宿主依赖打入单一 `lib/index.js`。因此，仅审查 main 源码无法证明发布包中的 bundle 与当前源码一致，也没有看到源码提交到发布产物的哈希、签名、SBOM 或可复现构建证明。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/package.json))\n\n**风险程度：中高。** 依赖来源本身未见明显异常，但发布产物存在不可审计盲区。\n\n### 5. 混淆、后门与持久化\n\n**检查内容：** base64、atob、字符编码解密、动态函数、隐藏域名、压缩代码、异常启动项和自动恢复机制。\n\n**发现：** TypeScript 源码整体可读，没有发现 base64 隐藏载荷、atob、fromCharCode 解码、curl|sh 或固定控制服务器，暂不足以认定作者存在恶意后门意图。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n然而，`staging.json` 保存的是可执行源码，插件启动时会自动读取并用 `new Function()` 重新编译，已转正的代码还会自动重新注册。攻击者只要成功写入一次，代码即可跨插件重载持续存在。registry 的 autoRestore 又会在启动后恢复本地注入插件。该机制即使是公开设计，也具备后门常用的持久化效果。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**风险程度：高。** 没有隐蔽恶意证据，但存在明确、稳定、无签名验证的代码驻留通道。\n\n### 6. 权限越界\n\n**检查内容：** Web 管理接口、输入校验、路径规范化、文件删除、插件卸载、配置修改、宿主内部对象访问和请求资源限制。\n\n**发现一：管理 API 缺少安全边界。** `/super-injector/api` 直接提供 list、uninstall、inject 和 ingest。处理器中没有插件级认证、角色授权、CSRF token、Origin 校验或操作确认。若宿主 Web 路由没有额外统一鉴权，能够访问服务的请求方就可以加载本地代码、卸载插件或启动智能体会话。GET list 还返回 registry 内的绝对目录；请求体通过不断累积 Buffer 读取，没有大小上限，可造成内存耗尽。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**发现二：路径越界和危险删除。** `inject()` 仅检查 package.json 中存在 name，没有验证它是否是合法 npm 包名。该 name 被 split 后直接拼接到 profile node_modules；如果包含 `../`，计算路径可逃逸出 node_modules。路径存在但不是健康链接时，代码会执行 `rmSync(linkDir, {recursive:true, force:true})`，随后建立 junction，可能删除并替换任意服务账户有权限操作的目录。`dev_install_package` 的 profile 名和包名也没有边界校验，可通过路径片段影响目标 profile 之外的位置。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**发现三：宿主权限过宽。** 插件注入 loader、tools、systemPrompt 和 webServer，并直接访问 loader internal cache、客户端模块私有表、Web 路由表和 registry；卸载使用包名子串匹配，过宽的 match 可能同时移除多个插件。([raw.githubusercontent.com](https://raw.githubusercontent.com/yjh051108/dsh-super-injector/main/src/index.ts))\n\n**风险程度：严重。** 这是当前版本最直接的远程或低权限到宿主代码执行、配置破坏和拒绝服务入口。\n\n## 风险点汇总\n\n| 风险点 | 可能影响 | 风险 |\n|---|---|---|\n| `new Function` 编译外部 JS 并持久化恢复 | 同进程任意代码执行、长期驻留 | 严重 |\n| 管理 API 无插件级鉴权和操作确认 | 未授权注入、卸载、启动智能体 | 严重 |\n| package name/profile 缺少路径边界校验 | 目录逃逸、递归删除、链接覆盖 | 严重 |\n| 任意 build.sh/npm 脚本继承完整环境变量 | token、云密钥、模型凭据泄露 | 高 |\n| gh CLI 自动发布能力 | 未授权对外发布本地文件 | 高 |\n| ingest 可分析任意本地目录 | 敏感目录进入智能体和模型链路 | 高 |\n| 请求体无大小限制 | 内存型拒绝服务 | 高 |\n| main 缺少实际 Release lib 产物 | 发布包与源码无法完成一致性核验 | 中高 |\n| package-lock 与 package.json 版本漂移 | 构建不可重复、依赖审计偏差 | 中 |\n\n## 结论与使用建议\n\n**最终结论：存在风险，安全评分 80/100，发布动作应为 block。** 代码没有足够证据被定性为恶意软件，但其功能本质是一个拥有宿主最高插件权限的开发注入器，而当前实现没有建立生产级权限边界。对普通用户而言，安全结果与恶意插件入口非常接近。\n\n**用户不能放心使用，当前建议是不要用。** 不要把它安装在生产 DSH、可从局域网或公网访问的 Web 服务、日常开发主机，以及保存有 GitHub、SSH、云服务或模型 API 凭据的账户环境中。若必须研究，只能放在断网或严格限制出站网络、无真实凭据、无个人文件、可随时销毁的虚拟机或容器中。\n\n在重新申请 MyDSH 审核前，至少应完成：删除 `new Function` 字符串执行或改为独立沙箱进程；管理 API 接入强认证、管理员角色、CSRF/Origin 防护和请求体上限；所有破坏性操作增加明确人工确认；对包名、profile 和目录执行 realpath 边界校验；构建子进程使用环境变量白名单；禁止自动使用 gh 凭据发布；限制 ingest 可读取的目录；Release 提供源码对应 commit、SHA-256、签名、SBOM 和可复现构建证明。\n","action":"review","reviewed_at":"2026-08-17T13:40:34.999134+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":20,"score_type":"safety","previous_action":"block","review_status":"complete"},{"full_name":"NanmiCoder/dsh-auto-mode","verdict":"存在风险","user_advice":"谨慎用","branch":"main","updated_at":"2026-08-17T06:57:33Z","summary":"Auto 实际启用全盘权限且与文档矛盾，修复前不要使用。","details":["代码执行：package.json 未配置 preinstall、install、postinstall 或 prepare，只有构建、测试和发布前校验脚本；但 cordis.patch.yml 将 Auto 的 sandbox 实际配置为 danger-full-access，使通过策略检查或被策略漏判的命令直接获得非沙箱权限，属于高风险执行边界。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))","数据外发：在可读取的 package.json、cordis.patch.yml、DESIGN.md 和构建配置中未发现硬编码第三方服务域名；不过分类器会通过当前 DSH 模型提供商处理工具名、脱敏参数、工作区信息及最近直接用户消息，且项目明确承认文件沙箱不限制网络。最新主分支提交还专门修复了编辑器内容进入分类上下文的问题，说明这里存在真实隐私边界。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/DESIGN.md))","敏感读取：设计声明会拦截 Home、DSH_HOME、凭据和敏感环境读取，但 README 同时明确指出官方沙箱不限制读取；再结合 Auto 实际运行在 danger-full-access，敏感文件保护主要依赖规则和模型分类器，而不是操作系统强制隔离。未发现插件主动窃取 ~/.ssh 或 ~/.dsh 的证据，但无法建议在含生产凭据的机器上运行。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/DESIGN.md))","依赖风险：发布包的直接运行时依赖只有 @deepseek-ai/schemastery，另依赖宿主提供的 DSH peer packages，供应链面相对可控；但开发依赖固定使用 vitest 4.0.17，该版本位于已公开的严重 Vitest UI/API Server 漏洞影响范围。项目执行的是 vitest run，未显示启用 Browser/UI 模式，因此主要属于维护及构建环境风险，仍应升级至修复版本。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))","混淆与后门：仓库采用可读 TypeScript 结构，包含独立的 policy、shell、paths、classifier、artifacts 等模块及测试目录；浏览器构建配置开启 sourcemap，未启用压缩，也未在已读取文件中发现 eval、Base64 载荷或混淆下载器。未发现恶意后门证据，但 npm 实际发布的是仓库根目录中未提交的 lib 构建产物，仍需进行源码与发布包的一致性校验。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/tree/main/src))","权限越界：这是阻断发布的核心问题。README 和 DESIGN.md 均声称 Auto 使用 workspace-write，仅对单次必要操作临时扩权；实际 cordis.patch.yml 却写明 auto.sandbox 为 danger-full-access。该差异直接推翻项目的主要安全承诺，使分类器成为非沙箱命令执行前的唯一实质防线。修复配置并发布新版本前，普通用户不要安装或启用 Auto。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode))"],"report_md":"## 安全评分\n\n**20/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查对象为 `NanmiCoder/dsh-auto-mode`。该项目的目标是为 DeepSeek Harness 增加一个介于 Workspace Write 与 Full access 之间的 Auto 权限模式。审查未发现明确的恶意下载器、隐藏后门或主动凭据窃取逻辑，但发现一项足以阻断发布和使用的核心安全缺陷：项目文档反复声明 Auto 使用 `workspace-write` 操作系统沙箱，实际发布配置 `cordis.patch.yml` 却将 Auto 设置为 `danger-full-access`。这不是普通文档瑕疵，而是实际权限模型与安全承诺完全相反。综合评分为 **80/100（高风险上限，未达到恶意判定）**，明确建议是：**修复并重新发布前不要使用**。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode))\n\n## 评估对象\n\n- 默认分支：`main`。GitHub 仓库页面、源码目录和工作流记录均指向该分支。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode))\n- 最新可见主分支提交：`a87533e`，提交说明为 `fix: redact editor content before classification`。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/actions))\n- 精确更新时间：审查期间 GitHub Repository API 未能返回可验证的 `pushed_at`，因此本报告没有伪造时间，结构化字段保持 `null`。发布到正式安全库前应再次调用 Repository API 补齐精确 ISO 时间。\n- 仓库规模：GitHub 显示 21 次提交；根目录包含 `scripts/`、`src/`、`tests/`、工作流、配置及设计文档。`src/` 当前列出 `artifacts.ts`、`classifier.ts`、`dsh-classifier.ts`、`index.ts`、`paths.ts`、`policy.ts`、`shell.ts`、`types.ts` 和客户端目录。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode))\n- 发布版本：`package.json` 为 0.1.4，入口为 `lib/index.js`，发布文件包括 `lib`、配置及文档。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** `package.json` 的 scripts、files、exports，`cordis.patch.yml`，`scripts/` 目录入口，README 和 DESIGN 中的工具执行流程。\n\n**发现：** 未发现 npm 安装阶段自动执行代码。`package.json` 没有 `preinstall`、`install`、`postinstall` 或 `prepare`；仅包含 `clean`、`typecheck`、`build`、`test`、`verify` 和发布时触发的 `prepublishOnly`。这意味着普通 npm 安装不会直接运行仓库脚本。证据片段：`\"prepublishOnly\": \"pnpm verify\"`。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))\n\n但运行期风险非常高。`cordis.patch.yml:9-13` 的实际配置为：\n\n```yaml\nauto:\n  sandbox: danger-full-access\n  approval: ask\n  name: Auto\n```\n\n这意味着 Auto 并非在工作区沙箱内执行，而是以完整主机权限执行经过分类器允许、漏判或未被确定性规则识别的命令。风险程度：**高，阻断使用**。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/cordis.patch.yml))\n\n### 2. 数据外发\n\n**检查内容：** `package.json`、`cordis.patch.yml`、`DESIGN.md`、README、构建配置以及当前主分支工作流记录。\n\n**发现：** 在上述可读取文件中未发现硬编码遥测域名、Webhook、上传地址或独立分析平台。项目默认复用当前 Session 的 DSH provider/model，不要求额外 API Key。不过分类器并非纯本地规则：设计文档说明其会接收工具名、脱敏后的有界参数、工作区根目录、确定性风险原因、文件效果以及最多四条最近的直接用户消息。若 DSH 模型由云端提供，这些信息会发送到相应模型服务商。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/DESIGN.md))\n\n最新可见提交为“redact editor content before classification”，表明项目确实在持续修复分类上下文中的内容泄露问题。与此同时，README 明确承认文件沙箱不限制网络或外部服务；实际 Auto 又没有 workspace-write 沙箱，因此恶意或误判命令可以主动联网外发。风险程度：**中高**。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/actions))\n\n### 3. 敏感读取\n\n**检查内容：** `src/paths.ts`、`src/policy.ts`、`src/shell.ts` 的模块清单，README 与 DESIGN 的路径、凭据和读取策略说明。\n\n**发现：** 设计目标包含对 Home、DSH_HOME、系统路径、凭据外发和敏感环境变量读取进行硬拒绝或分类。但项目也明确说明官方文件沙箱不限制读取，因此即便文档所述的 `workspace-write` 配置正确，读取 `~/.ssh`、`~/.dsh`、`.env` 或云凭据仍依赖语义规则识别。当前实际配置为 `danger-full-access` 后，操作系统写入边界也不存在，规则漏判的后果进一步扩大。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/DESIGN.md))\n\n未发现插件自身在启动时主动读取或上传这些目录的证据，不能判定为凭据窃取程序；但对拥有真实生产密钥的电脑而言，仅依赖分类器保护敏感读取并不充分。风险程度：**高**。\n\n### 4. 依赖风险\n\n**检查内容：** `package.json` 的 dependencies、peerDependencies、devDependencies、发布文件范围和测试命令。\n\n**发现：** 直接运行时依赖仅有 `@deepseek-ai/schemastery`，其余核心能力由已安装的 DSH peer packages 提供；发布包也不包含开发脚本目录，安装面相对有限。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))\n\n开发依赖包含 `vitest ^4.0.17`。GitHub Advisory Database 显示 Vitest 4.0.x 存在多项与 UI/API Server 或 Browser Mode 有关的严重漏洞，其中普通 `vitest` 包的受影响范围包含 4.0.17。当前项目脚本为 `vitest run`，并未显示启用 Browser/UI 服务，因此不构成插件用户的直接运行时漏洞，但会影响维护者或构建环境，建议至少升级到覆盖相关修复的 4.1.8 或更高稳定版本。风险程度：**中等构建风险、较低终端用户运行风险**。 ([github.com](https://github.com/advisories/GHSA-2h32-95rg-cppp?utm_source=openai))\n\n### 5. 混淆与后门\n\n**检查内容：** 仓库结构、TypeScript 模块划分、构建配置、发布文件及可访问源码说明。\n\n**发现：** 项目结构清晰，策略、路径、Shell 分析、分类器和会话产物分别放置；构建配置使用 `tsdown` 生成浏览器入口，开启 `sourcemap: true`，没有发现 minify、eval 包装、Base64 载荷或远程下载执行器。未发现恶意混淆或后门证据。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/tree/main/src))\n\n需要注意的是，npm 发布入口为 `lib/index.js`，而仓库根目录未展示已提交的 `lib/`。这意味着仅审查 GitHub 源码不能自动证明 npm tarball 与源码完全一致。发布前应下载实际 0.1.4 tarball，核对文件清单、哈希和 sourcemap，并执行可复现构建比较。风险程度：**低至中等供应链验证风险**。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/package.json))\n\n### 6. 权限越界\n\n**检查内容：** `cordis.patch.yml`、README 的权限表、DESIGN 的 Permission integration 与 Threat model。\n\n**发现：** README 和 DESIGN 均明确写出：Auto 应采用 `workspace-write + ask`，Full access 才采用 `danger-full-access + never`；文档进一步声称 Auto 的安全基础是操作系统工作区沙箱，分类器只处理该边界之外的语义风险。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode))\n\n实际配置却是 `auto.sandbox: danger-full-access`。因此文档描述的“静态解析漏判也不能写出工作区”这一核心不变量在真实运行中不成立。一旦分类器误判、规则遗漏、模型被提示注入影响，或者新工具未被策略覆盖，命令将直接获得完整主机权限。该问题同时构成权限越界、误导性安全说明和默认配置缺陷。风险程度：**最高，必须阻断发布与使用**。 ([github.com](https://github.com/NanmiCoder/dsh-auto-mode/blob/main/cordis.patch.yml))\n\n## 风险点汇总\n\n1. **阻断级配置错误：** Auto 实际为 `danger-full-access`，与 README/DESIGN 的 `workspace-write` 承诺相反。\n2. **敏感信息边界不足：** 文件读取和网络访问本就不受 workspace 沙箱限制，分类器还会向配置的模型提供商发送经过处理的工具上下文。\n3. **分类器成为单点防线：** 在完整权限下，规则漏判或模型判断错误可能直接导致主机文件破坏、凭据读取或数据外发。\n4. **开发依赖过期：** Vitest 4.0.17 位于已披露严重漏洞的影响范围，应升级。\n5. **发布物验证缺口：** npm 使用未提交到根目录的 `lib` 构建产物，必须额外核对发布包与源码的一致性。\n6. **审计元数据限制：** GitHub API 的精确 `pushed_at` 未能在本次通道中取得，正式发布报告前应补齐，不能用页面抓取日期冒充 API 时间。\n\n## 结论与使用建议\n\n本仓库目前**没有足够证据判定为恶意软件**，其设计文档和测试体系也体现出较强的安全意识；但安全产品应以真实生效配置而不是设计意图为准。当前 Auto 模式实际上授予 `danger-full-access`，而界面和文档告诉用户它受 `workspace-write` 保护，这一差异足以否定“可以放心使用”的结论。\n\n**明确建议：不要安装或启用当前版本。** 维护者至少需要完成以下工作后才能重新审查：\n\n1. 将 `cordis.patch.yml` 中 `auto.sandbox` 改为 `workspace-write`；\n2. 在 CI 中运行组合配置检查，断言最终生效值而不只是源码常量；\n3. 发布新版本，并对 npm tarball 与源码构建结果做逐文件校验；\n4. 升级 Vitest 至已修复版本；\n5. 对分类器发送字段、脱敏规则和模型提供商数据边界作明确用户披露；\n6. 在 macOS、Linux 和 Windows 上分别验证外部写入、敏感读取、网络外发和单次扩权路径。\n\n在这些条件完成并通过复审前，MyDSH 应将该插件标记为 **存在风险 / 不建议使用 / block**。\n","action":"review","reviewed_at":"2026-08-17T13:41:34.456484+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":20,"score_type":"safety","previous_action":"block","review_status":"complete"},{"full_name":"lire1131/dsh-undo-plugin","verdict":"存在风险","user_advice":"谨慎用","branch":"master","updated_at":"unverified","summary":"不建议使用：导入路径可进入 PowerShell 命令串，且管理接口缺少插件级访问控制。","details":["维度1·代码执行：package.json 没有 preinstall、install 或 postinstall，但 Windows 导入功能把请求中的 zipPath 拼入 PowerShell -Command 字符串；含 PowerShell 插值语法的已有文件路径可能触发命令执行。风险高。","维度2·数据外发：服务端主体未发现 fetch、HTTP 客户端、Webhook 或固定第三方域名；浏览器端请求均指向同源 /api/undo。未发现主动外发行为，风险低。","维度3·敏感读取：插件主动读取 ~/.dsh/.env 和 ~/.dsh/.credentials.yaml，并将未脱敏原文保存到 env-vault；多行 YAML 或多行环境变量的续行内容可能绕过逐行脱敏。风险高。","维度4·依赖风险：包本身未声明第三方运行时依赖，也没有安装期生命周期脚本；但运行时依赖宿主 @deepseek-ai/dsh-tools，CI 还会安装未锁定版本，存在宿主供应链和版本漂移风险。风险中低。","维度5·混淆与后门：已读取的 lib/index.js、lib/client.js 和配置文件结构清晰，未发现 eval、new Function、远程下载执行、加密载荷或反调试逻辑；但 tools/ 下 PowerShell 文件正文未被 Web 抓取完整返回，因此不能对该目录作无保留放行。风险低至中。","维度6·权限越界：插件可修改和恢复用户配置、插件源码与凭据文件，并允许通过管理接口设置任意绝对快照目录和 pluginDirs；接口代码未体现插件级身份认证、授权、Origin 或 CSRF 校验。若宿主未统一保护这些路由，可形成高权限本地文件操作入口。风险高。"],"report_md":"## 安全评分\n\n**20/100 · 建议谨慎**\n\n> 分数越高代表整体安全性越高；请同时结合代码证据和使用建议判断。\n\n## 概述\n\n本次审查按照 MyDSH 六维安全标准，对 `lire1131/dsh-undo-plugin` 当前可获取的仓库内容进行静态分析。结论是：**没有证据表明该项目属于恶意软件，但当前实现不适合让普通用户放心安装使用**。核心问题并非插件拥有备份权限本身，而是高权限文件操作、PowerShell 命令执行和缺少插件级接口防护被组合在同一进程内。一旦管理路由可被非预期访问，或用户导入带有特殊文件名的快照包，可能造成配置破坏、敏感信息暴露，甚至 Windows 本地命令执行。\n\n## 评估对象\n\n- **仓库：** `lire1131/dsh-undo-plugin`\n- **评估分支：** `master`。仓库页面明确显示默认分支为 `master`；`main/package.json` 返回 404，而 `master/package.json` 可正常读取，因此没有继续按不存在的 main 分支评估。\n- **最后更新时间：** `unverified`。本轮已按要求尝试访问 GitHub Repository API，但 API 未成功返回，不能在缺少证据时伪造 `pushed_at`。此外，GitHub 页面缓存显示 0.3.4，而 Raw 文件显示 0.3.5，也说明缓存并非同一时点。\n- **仓库规模：** 页面显示约 51 次提交，包含 `.github/workflows/`、`docs/`、`lib/`、`tools/`；核心 `lib/index.js` 约 1851 行，浏览器端 `lib/client.js` 约 872 行。\n- **主要检查文件：** `package.json`、`cordis.patch.yml`、`lib/index.js`、`lib/client.js`、`lib/spec.json`、`.github/workflows/ci.yml`，以及 README 中公开的 PowerShell/批处理工具入口。\n\n## 逐维度分析\n\n### 1. 代码执行\n\n**检查内容：** npm 生命周期脚本、`exec`/`spawn`/PowerShell、导入导出流程、工具脚本入口。\n\n**发现：** `package.json` 不含 `preinstall`、`install`、`postinstall`，安装阶段不会自动运行仓库脚本，这是正面因素。但 `runPowershell()` 使用 `execFile` 启动 `powershell.exe` 后，仍将完整命令作为 `-Command` 字符串交给 PowerShell 解析；导入流程又把 REST 请求传入的 `zipPath` 直接插进双引号字符串。Windows 文件名允许 `$`、括号等字符，因此若磁盘上存在带 PowerShell 子表达式语法的文件名，导入时可能发生插值执行。`/api/undo/import` 会直接把请求体中的路径传入该流程。\n\nREADME 还提供通过 `powershell.exe -ExecutionPolicy Bypass -File` 启动工具的方法。这些命令是用户主动运行而非 npm 自动执行，但说明插件明确依赖高权限脚本执行面。\n\n**风险程度：高。** 建议改用不经过 `-Command` 字符串解析的参数传递方式，或直接使用经过审计的 JavaScript ZIP 库；导入路径还应限定在固定目录，并拒绝 `$`、反引号、换行和控制字符。\n\n### 2. 数据外发\n\n**检查内容：** 固定域名、HTTP 客户端、`fetch`、Webhook、遥测及浏览器端跨域请求。\n\n**发现：** 服务端核心代码未发现主动访问第三方网络的逻辑；浏览器端请求均为同源 `/api/undo` 路径，没有发现把快照、插件源码、凭据或用户配置上传到外部域名的行为。\n\n需要区分“没有主动外发”和“没有信息泄露”：列表和设置接口仍会返回快照元数据及本地目录信息。如果路由可被非预期访问，这些信息可能被读取，只是代码中没有内置外部接收服务器。\n\n**风险程度：低，但接口暴露会提升实际风险。**\n\n### 3. 敏感读取\n\n**检查内容：** `~/.ssh`、`~/.dsh`、环境变量、Token、凭据、快照和导出内容。\n\n**发现：** 未发现读取 `~/.ssh`，但插件明确读取 `~/.dsh/.env` 和 `~/.dsh/.credentials.yaml`。默认模式会生成脱敏副本，同时把原始内容按 SHA-1 标识保存到本地 `env-vault`，因此插件进程实际持有完整凭据。\n\n脱敏逻辑主要依靠逐行正则。YAML 块标量和跨行环境变量的后续行未被结构化解析，存在只替换键所在行、但保留秘密正文的可能。另外，管理接口允许把 `sensitiveMode` 改为 `keep`，会让后续快照保留原始敏感值。\n\n**风险程度：高。** 应使用真正的 YAML/ENV 解析器，默认禁止通过普通 Web API 开启明文模式；原文凭据库应加密并强制目录 0700、文件 0600 等等效权限。\n\n### 4. 依赖风险\n\n**检查内容：** dependencies、devDependencies、锁文件、npm 生命周期和 CI 安装行为。\n\n**发现：** 当前包未声明直接第三方依赖，供应链面积较小，也不存在安装期脚本。运行时会从宿主加载 `@deepseek-ai/dsh-tools`，其安全性和版本由 MyDSH 宿主决定。CI 使用 `npm install -g @deepseek-ai/dsh-tools` 安装未固定版本，可能产生不可复现测试或上游版本漂移。\n\n**风险程度：中低。** 发布前应固定宿主兼容版本、保留锁定和构建来源证明，并把 GitHub Actions 固定到提交 SHA。\n\n### 5. 混淆与后门\n\n**检查内容：** `eval`、`new Function`、动态载荷、Base64 解码执行、远程下载运行、异常压缩和隐藏行为。\n\n**发现：** 已读取的服务端代码结构清晰，关键文件操作、定时器、REST 路由和工具注册均可追踪；未发现远程下载执行、加密载荷或典型后门逻辑。`lib/client.js` 虽为构建产物，但仍保留可读函数和接口名称，不属于刻意混淆。\n\n`tools/` 目录包含 PowerShell 和批处理入口，但本轮 Web 抓取没有完整返回所有工具正文，因此不能把该目录标记为完全审计通过；这一限制已经计入评分，而不是用“未发现”替代“未覆盖”。\n\n**风险程度：低至中。** 未见恶意证据，但发布前仍须对 tools 全目录逐行复核并核对发布包哈希。\n\n### 6. 权限越界\n\n**检查内容：** 文件系统边界、路径校验、配置修改、删除恢复、接口认证、CSRF 和目录白名单。\n\n**发现：** 插件具备读取、覆盖和删除 MyDSH 配置、插件源码、快照及凭据的能力。恢复流程设置了会话检查和相对路径检查，这是有效防线；但 `/api/undo/settings` 允许写入任意绝对 `manualDir`、`autoDir` 和 `pluginDirs`，没有把路径限制在 MyDSH 管理目录内。\n\n所有管理路由在插件代码中都没有身份验证、角色授权、Origin 校验或 CSRF Token。不能排除宿主框架在更外层统一保护路由，但插件自身没有声明或验证这一安全前提。若服务监听局域网地址、被反向代理公开、宿主存在 XSS，或跨站请求能够抵达本地服务，攻击者可能创建、删除、导入、导出快照，改变敏感模式或触发恢复。\n\n**风险程度：高。** 必须增加登录态和管理员授权、Origin/CSRF 防护、localhost 默认绑定、速率限制、真实路径白名单，并拒绝符号链接或 Junction 越界。\n\n## 风险点汇总\n\n1. **PowerShell 命令注入面：** 导入路径进入 `-Command` 字符串，存在特殊文件名触发插值执行的条件。\n2. **管理接口缺少插件级访问控制：** 高权限文件操作依赖未被代码明确验证的宿主安全边界。\n3. **敏感凭据处理不充分：** 原文进入本地 vault，正则脱敏无法可靠覆盖多行格式。\n4. **目录范围过宽：** API 可配置任意绝对快照目录和插件目录，扩大误操作及越权写入范围。\n5. **供应链可复现性不足：** CI 中宿主工具未固定版本，Actions 也未固定提交 SHA。\n6. **审计残余风险：** GitHub API 的 `pushed_at` 和 tools 全目录正文未能完成证据确认，不能声称本次结果已锁定到唯一提交。\n\n## 结论与使用建议\n\n**最终结论：存在风险；当前版本不要用，发布动作应当阻断。** 该仓库未表现出窃密木马或恶意后门特征，但“备份恢复插件”天然拥有很高的本地权限，当前代码没有为这一权限配置足够强的输入边界和访问控制。普通用户不应仅因为项目开源、没有第三方依赖或默认开启脱敏就认为可以放心使用。\n\n在重新放行前，至少应完成：消除 PowerShell 字符串拼接；为全部 `/api/undo/*` 路由增加管理员认证与 CSRF/Origin 校验；把所有目录限制在经 `realpath` 验证的固定根路径；阻止符号链接/Junction 跳出目录；使用结构化解析器脱敏；加密凭据 vault；禁止通过普通接口开启明文快照；固定依赖与 Actions SHA；取得 GitHub API 返回的默认分支、最新提交 SHA 和 `pushed_at`，并对 `tools/` 全目录完成逐行复审。修复后应重新进行静态审计和 Windows 隔离环境动态验证。\n","action":"review","reviewed_at":"2026-08-17T14:07:22.587897+00:00","standard":"MyDSH-Security-Standard-v1.1","safety_score":20,"score_type":"safety","previous_action":"block","review_status":"complete"}],"blocked":[]}