OpenSSH 9.2 发布,修复了预身份验证漏洞

OpenSSH 9.2 版本已经发布,这是使用 SSH 2.0 和 SFTP 协议工作的客户端和服务器的开放实现。 新版本消除了导致预身份验证阶段内存双重释放的漏洞。 仅 OpenSSH 9.1 版本受到影响;早期版本中不会出现该问题。

要为漏洞的表现创造条件,只需将 SSH 客户端横幅更改为“SSH-2.0-FuTTYSH_9.1p1”即可设置标记“SSH_BUG_CURVE25519PAD”和“SSH_OLD_DHGEX”,这取决于 SSH 的版本客户。 设置这些标志后,“options.kex_algorithms”缓冲区的内存被释放两次 - 执行 do_ssh2_kex() 函数(调用 compat_kex_proposal())时,以及执行 do_authentication2() 函数(调用 input_userauth_request()、mm_getpwnamallow() 时) )、copy_set_server_options() 沿着链、assemble_algorithms() 和 kex_assemble_names()。

为该漏洞创建有效的利用被认为是不太可能的,因为利用过程过于复杂 - 现代内存分配库提供了针对双重释放内存的保护,并且存在错误的预验证进程在隔离的环境中以较低的权限运行。沙箱环境。

除了提到的漏洞之外,新版本还修复了另外两个安全问题:

  • 处理“PermitRemoteOpen”设置时发生错误,导致第一个参数与值“any”和“none”不同时被忽略。 该问题出现在 OpenSSH 8.7 之后的版本中,并导致仅指定一项权限时跳过检查。
  • 如果配置中启用了 CanonicalizeHostname 和 CanonicalizePermissionCNAMEs 选项,并且系统解析器不检查 DNS 的正确性,则控制用于解析名称的 DNS 服务器的攻击者可以实现将特殊字符(例如“*”)替换到known_hosts 文件中。来自 DNS 服务器的响应。 该攻击被认为不太可能发生,因为返回的名称必须符合通过 CanonicalizePermissionCNAMEs 指定的条件。

其他变化:

  • ssh_config 中添加了 EnableEscapeCommandline 设置,以控制是否启用提供命令行的“~C”转义序列的客户端处理。 默认情况下,现在禁用“~C”处理以使用更严格的沙箱隔离,这可能会破坏在运行时使用“~C”进行端口转发的系统。
  • sshd_config 中添加了 ChannelTimeout 指令,用于 sshd 设置通道不活动超时(在指令指定的时间内没有记录流量的通道将自动关闭)。 可以为会话、X11、代理和流量重定向设置不同的超时。
  • UnusedConnectionTimeout 指令已添加到 sshd 的 sshd_config 中,允许您设置终止在一定时间内没有活动通道的客户端连接的超时时间。
  • sshd 中添加了“-V”选项来显示版本,类似于 ssh 客户端中的类似选项。
  • 将“Host”行添加到“ssh -G”的输出中,反映主机名参数的值。
  • scp 和 sftp 中添加了“-X”选项,用于控制 SFTP 协议参数,例如复制缓冲区大小和待处理请求的数量。
  • ssh-keyscan 允许扫描完整的 CIDR 地址范围,例如“ssh-keyscan 192.168.0.0/24”。

来源: opennet.ru

添加评论