跳转到内容

安全

请使用 GitHub Security Advisory 的 “Report a Vulnerability” 入口。在公开之前,它一直是私密的。

你会收到一封回信说明后续如何推进,之后也会同步修复的进展。这里没有安全团队,也没有承诺的响应时限 —— 如果一周内没有收到答复,请在同一线程里再问一次。

mtty 是一个终端:它以你的权限、在你机器上运行你让它运行的程序。它不做沙箱隔离,也不打算做。 由此带来两个后果值得说明,因为在这两处,边界是刻意的设计,而不是疏漏。

控制面会在你的 shell 里执行命令

Section titled “控制面会在你的 shell 里执行命令”

MTP —— mtty-cli,以及任何实现该协议的程序 —— 可以在窗格里启动命令。这本来就是它的用途,也正是 为什么会有令牌这个东西。

  • 套接字是仅属主可访问的每用户端点(权限 0600;Windows 上为命名管道)。本机的其他用户连不上 —— 这一点之所以重要,正是因为 pane.run 会在你的 shell 里执行命令。
  • 要用 TCP 提供服务必须设置 remote-listen,而未设 MTTY_MTP_TOKEN 时它会拒绝启动 —— 返回 错误,而不是给个警告然后继续。启用之后每个请求都必须携带令牌,还可以用 MTTY_MTP_ALLOW 进一步 收窄允许的能力。

令牌泄露,是你在保管的秘密出了问题,不是 mtty 的漏洞 —— 和 SSH 私钥泄露同一性质。真正算漏洞的, 是存在一条不需要令牌就能到达控制面的路径,或者其他用户能打开的套接字。

私钥在这里只被读取,不被使用

Section titled “私钥在这里只被读取,不被使用”

mtty-keys 解析 OpenSSH 与 PuTTY .ppk 两种格式的私钥,并在两者之间重新编码。它不用这些 密钥做签名或解密:整个工作区没有任何私钥运算,而 SSH 连接本身是由你自己的 OpenSSH 建立的。

密钥文件和你在其中输入的密码,都不会离开这台机器。

类别 理由
你让 mtty 运行的程序自身的行为 它以你的身份运行 —— 终端本来就是这样
控制面令牌泄露 属于保管秘密的责任,见上
你自行开启并保持可达的 TCP 监听 remote-listen 需手动开启,且未认证时拒绝启动
你连接到的远程主机上的问题 那是那台主机的安全,不是 mtty 的

Synced from oxdingzg/mtty@b65a3d1.