Skip to content

Security: trrrrrryg/dsh-ssh-forge

Security

SECURITY.md

Security Policy

状态与适用范围

本项目当前是未发布的 public Beta 候选。这里描述的是插件与开发者兼容层已经实现的安全边界,不代表 stock DSH 已正式兼容,也不构成对任意服务器环境的安全认证。

威胁模型与信任边界

安全模型包含三个独立主体:运行 UI 的浏览器或 Desktop Renderer、运行插件的 DSH Host,以及通过 SSH 访问的远端服务器。

  • DSH Host 是 SSH 凭据、连接配置、known_hosts、远程 helper 与执行监督器的信任边界。Desktop 和 Web UI 都不能把浏览器所在机器当成 Host。
  • 远端服务器及其 SSH 服务端处于 Host 边界之外。插件固定主机公钥指纹,但不能证明服务器自身没有被入侵。
  • Agent 输出、远端命令输出、服务器文件名和文件内容均视为不可信数据,不得用作控制帧或静止证明。
  • DSH Host 本机管理员能够读取 Host 账户可访问的数据,因此不在“防止本机管理员取证”的威胁模型内。

SSH 凭据

  • 只支持系统 SSH Agent 或 DSH Host 上的私钥文件;密码、键盘交互认证和在 UI 中提交口令均不受支持。
  • 私钥内容不进入 Renderer、HTTP 响应、连接配置、剪贴板或日志。连接配置只保存 Host 上的密钥绝对路径引用。
  • 自动生成的 ED25519 私钥只写入 Host 的插件数据目录。Windows 使用受保护 ACL,POSIX 使用目录 0700 和文件 0600;权限无法严格验证时失败关闭。
  • 加密私钥必须预先加载到 SSH Agent。插件不会保存解密口令,也不会自动把公钥写入服务器的 authorized_keys。
  • 不要在 issue、聊天、浏览器表单或故障报告中粘贴私钥、服务器密码、解密口令、SSH Agent 转发材料或完整凭据文件。

主机身份

首次配置必须检测并由用户确认 SHA256: 主机指纹。插件随后通过隔离的 known_hosts 数据严格核对目标主机;主机、端口、用户名或指纹变化会使旧工作区绑定失效。

主机指纹只说明本次连接使用了被确认的 SSH 主机密钥。确认前应通过云厂商控制台、服务器本地控制台或另一条可信通道独立核对指纹,不应只信任首次网络扫描结果。

管理 API 与 Web 边界

  • 连接管理、密钥生成、目录与文件 API 只接受直接 loopback 请求,并执行同源/Origin 防护。
  • Web 端的 SSH 由运行 DSH Web Host 的机器发起;浏览器中的本地路径不是 Host 的密钥路径。
  • 非 loopback Web 管理被禁用。反向代理头和 DSH trustedHosts 不是插件身份认证,不能绕过该限制。
  • 需要远程使用 Web UI 时,应先通过可信 SSH 本地端口转发访问 Host 的 loopback 监听;不得直接暴露管理 API。

权限与路径边界

  • 建议使用权限受限的普通服务器用户。用户名为 root 时,连接表单要求不可跳过的独立风险确认;这不会放宽指纹、认证或目录限制。
  • 每个连接至少配置一个 allowedRoots。服务器端对目标执行 realpath 后再校验,阻止 .. 和符号链接越界。
  • /root 与文件系统根目录 / 属于高风险工作区,必须针对当前服务器身份和规范化路径逐次确认。选择 / 等同于把该 SSH 用户可访问的整台服务器文件系统交给 Agent。
  • 远程工作区按结构化 target 路由。provider 缺失、断联、API 版本不匹配或 SSH 身份变化时失败关闭,不得回落为 Host 本机路径或本地命令。
  • 文件写入携带内容版本;检测到并发变化时拒绝覆盖。

远程执行与 cleanup fence

普通远程命令由 Linux subreaper、独立进程组和固定 SSH 控制通道监督。终止流程为 TERM → grace → KILL,并在 Host 返回成功前独立扫描远端 /proc,确认父进程 identity 已消失且进程组和 session 都已静止。

插件在首次 spawn 前持久化 cleanup fence。Host 强杀、断电、SSH 传输异常、监督器异常或任何无法证明静止的状态都会失败关闭,并保留 fence,阻止身份修改或连接删除。只有管理员在服务器侧独立确认残留进程已经清理后,才可在退出 DSH 后备份并按运维流程移除 fence;远端输出、旧 control 文件或 SSH 退出码不能替代该确认。

日志与故障报告

  • 报告问题前删除或替换真实主机名、IP、用户名、本机绝对路径、公钥注释、主机指纹、连接 ID、工作区 ID 和命令输出中的敏感业务数据。
  • 示例地址使用 RFC 5737 保留段,例如 203.0.113.10;路径使用 <dsh-home>、<identity-file> 等占位符。
  • 公钥通常不是秘密,但仍可能泄露账户关联信息;除非排障确有必要,否则也应省略或截断。
  • cleanup fence、安装回执和连接配置可能包含服务器身份与本机路径。不要原样上传。

漏洞报告

公开仓库与安全报告渠道尚未确定。在仓库 URL 和维护者安全联系方式确认前,请不要创建包含秘密或可利用细节的公开 issue。发布前必须补充一个可验证的私密报告渠道、响应负责人和披露流程;本文件不虚构邮箱或外部 URL。

There aren't any published security advisories