OpenSSH中高危漏洞集合
2016-02-22 14:41:50 阿炯

OpenSSH SFTP远程溢出漏洞

2014年10月上旬,安全社区爱好者Jann Horn公布了OpenSSH可以让用SFTP访问的用户在没有验证的情况下使用"ForceCommand internal-sftp"的漏洞(含POC),也就是说如果你的OpenSSH服务器中没有配置"ChrootDirectory"的话普通用户都可以访问所有文件系统的资源,包括 /proc,在>=2.6.x的Linux内核上,/proc/self/maps会显示你的内存布局,/proc/self/mem可以让你任意在当前进程上下文中读写,而综合两者特性则可以造成远程溢出。

目前受影响的版本是<=OpenSSH 6.6,OpenSSH 6.7包含了降低风险的方案:sftp-server使用prctl()来阻止直接访问/proc/self/{mem,maps}。Grsecurity/PaX直接禁止了/proc/pid/mem的可写,所以如果在生产环境中部署了Grsecurity/PaX的话这个漏洞可以不用担心。

OpenSSH会泄露私钥高危漏洞


OpenSSH 释出了新版本客户端, 修正了一个会泄露私钥的高危漏洞。漏洞存在于终端用户使用版本中,不影响服务器使用的版本,漏洞影响OpenSSH v5.4到7.1,与一个默认启用的实验性漫游功能代码有关,它允许一台恶意配置的服务器利用漏洞访问联网计算机的内存内容,获取用户用于SSH连接的私 钥。

根据SSH的设计,用户即使连接了一个恶意的主机,主机也只知道你的公钥而不知道你使用的私钥。但这个漏洞让恶意主机可以窃取私钥,然后攻击者可以利用窃取到的密钥对渗透到用户的其他网络设施。安全研究人员警告这个漏洞可能已被利用,OpenSSH推荐用户立即更新

OpenSSH 曝枚举系统用户(CVE-2016-6210)漏洞

该漏洞在opensshd-7.2p2 中被发现,但是安全人员指出,该漏洞应该在更早的版本中已经存在。

漏洞描述如下:
当我们使用ssh客户端去连接服务端的时候,如果向服务端发送一个大于10KB的密码,由于OpenSSH服务端会对user:password的组合,使用加密算法SHA256/SHA512进行加密。

如果我们传输的是一个不存在的用户名,那么就不会进入sha256(user,password)加密流程,如果用户名存在,服务器将会针对这个10KB大的密码进行SHA256的加密,这里就会产生时间差。关于该漏洞更多详情,可以在这里查看。

出于安全方面考虑,OpenSSH宣布放弃支持SHA-1认证

在OpenSSH8.3的发现说明中,其团队宣布计划放弃对SHA-1认证方案的支持。OpenSSH在公告中引用了SHA-1散列算法中存在的安全问题,被业内认为是不安全的。该算法在2017年2月被谷歌密码学专家破解,可利用SHAttered技术将两个不同文件拥有相同的SHA-1文件签名。

不过当时创建一个SHA-1碰撞被认为需要非常昂贵的计算成本,因此谷歌专家认为SHA-1在实际生活中至少还需要等待半年的时间,直到成本进一步下降。随后在2019年5月和2020年1月发布的研究报告中,详细介绍了一种更新的方法,将SHA-1选择-前缀碰撞攻击的成本分别降低到11万美元和5万美元以下。对于像国家级别以及高端网络犯罪集团来说,让他们生成一个SSH认证密钥,从而让它们能够远程访问关键服务器而不被检测到,那么5万美元的代价是非常小的。OpenSSH开发者今天表示:“由于这个原因,我们将在不久的未来版本中默认禁用‘ssh-rsa’公钥签名算法。”

OpenSSH应用程序使用 "ssh-rsa "模式来生成SSH验证密钥。这些密钥中的一个存储在用户要登录的服务器上,另一个存储在用户的本地OpenSSH客户端中,这样用户就可以在每次登录时不需要输入密码就可以访问服务器,而是以本地验证密钥来代替登录。在默认情况下,OpenSSH ssh-rsa模式通过使用SHA-1散列功能生成这些密钥,这意味着这些密钥容易受到SHAterred攻击,使威胁行为者能够生成重复的密钥。OpenSSH开发者今天表示:“遗憾的是,尽管存在更好的替代方案,但这种算法仍然被广泛使用,它是原始SSH RFCs规定的唯一剩下的公钥签名算法”。

OpenSSH团队现在要求服务器所有者检查他们的密钥是否已经用默认的ssh-rsa模式生成,并使用不同的模式生成新的密钥。OpenSSH团队表示,推荐的模式是rsa-sha2-256/512(自OpenSSH 7.2以来支持)、ssh-ed25519(自OpenSSH 6.5以来支持)或ecdsa-sha2-nistp256/384/521(自OpenSSH 5.7以来支持)。

文件传输协议 SCP 被曝存在 35 年历史的安全漏洞

基于 SSH 的文件传输协议 SCP(Secure Copy Protocol)被曝存在安全漏洞。安全研究人员公布了 SCP 存在的多个漏洞,这些漏洞可以结合起来利用,分别为 CVE-2018-20685CVE-2019-6111CVE-2019-6109CVE-2019-6110

漏洞中最主要的地方是 SCP 客户端无法验证 SCP 服务器返回的对象是否与请求的东西一致,而该问题可以追溯到 SCP 的基础 -- RCP 协议(Remote file Copy Protocol),它允许服务器控制发送的文件,那么结合客户端无法验证请求与实际返回的对象是否一致这一弱点,攻击者就可以采用中间人或直接操纵 SCP 服务器的方法,覆写客户端用户的 .bash_aliases 文件,一旦用户启用 Shell,则执行文件中的恶意代码。该问题从 1983 年起已经存在了 35 年。受影响的客户端包括 OpenSSH scp、PuTTY PSCP 与 WinSCP scp mode。

OpenSSH scp <= 7.9    
PuTTY PSCP ?       
WinSCP scp mode <= 5.13

安全人员表示可以采取以下措施解决/缓解该问题:
如果可以,就把 OpenSSH 切换到 sftp 协议,不然就下载强化补丁
WinSCP 更新到 5.14 以上版本,目前问题已经解决。
PuTTY 现在还没有可选方案。

详情查看安全公告

OpenSSH权限提升漏洞


2021年9月26日,OpenSSH 项目发布了 OpenSSH 8.8 安全更新,修复了 OpenSSH 6.2 到 8.7 版本中的 sshd(8)中的一个权限提升漏洞(CVE-2021-41617)。

当sshd(8)在执行 AuthorizedKeysCommand 或 AuthorizedPrincipalsCommand 时,未能正确地初始化,其中 AuthorizedKeysCommandUser 或 AuthorizedPrincipalsCommandUser 指令被设置为以非 root 用户身份运行。相反,这些命令将继承 sshd(8) 启动时的组的权限,根据系统配置的不同,继承的组可能会让辅助程序获得意外的权限,导致权限提升。在 sshd_config(5) 中,AuthorizedKeysCommand 和 AuthorizedPrincipalsCommand 都没有被默认启用,因此该漏洞影响有限。

目前此漏洞已经修复,建议受影响的用户及时升级更新到 OpenSSH 8.8。

参考链接
OpenSSH-Security
OpenSSH-Release-8.8
CVE-2021-41617

双重释放漏洞

由于 OpenSSH 中的 options.kex_algorithms 内存块在处理期间会经过两次释放,在默认配置中,未经身份验证的攻击者可以触发双重释放,可能导致拒绝服务(该漏洞较难利用,现在的内存分配器都提供防止双重释放的保护)。
漏洞名称:OpenSSH 服务器双重释放漏洞
漏洞类型:双重释放
发现时间:2023-02-03
漏洞影响广度:小
MPS 编号:MPS-2023-3745
CVE 编号:CVE-2023-25136
影响范围:OpenSSH server@[9.1, 9.2)
修复方案:将组件 OpenSSH server 升级至 9.2 及以上版本

SSH-Agent客户端远程代码执行漏洞

它是 SSH 的一部分,它是一个用于管理私钥并支持公钥身份验证的程序。用户使用 SSH-Agent 转发代理功能连接攻击者恶意服务器时,由于其未对加载的共享库进行限制,攻击者可通过将恶意共享库作为参数传递给 SSH-Agent 并通过其调用 dlopen/dlclose 函数加载/卸载位于用户客户端主机的共享库,实现远程代码执行。

漏洞名称:OpenSSH ssh-agent 客户端远程代码执行漏洞
漏洞类型:代码注入
发现时间:2023-07-20
MPS 编号:MPS-hwop-qus5
CVE 编号:CVE-2023-38408
影响范围:
ssh-agent@(-∞, 9.3_p2)
openssh@(-∞, 9.3p2-1)

修复方案:客户端避免使用 ssh-agent 代理转发功能,将组件 openssh 升级至 9.3p2-1 及以上版本。

< v9.6 命令注入漏洞

在 OpenSSH 9.6 版本之前的 ssh 中,如果用户名或主机名中含有 shell 元字符(如 | ' "等),并且 ssh_config 中 ProxyCommand、LocalCommand 指令或"match exec" 谓词通过 %u、%h 或类似的扩展标记引用用户或主机名时,可能会发生命令注入。

Git 未禁止用户或主机名中的 shell 元字符,存储库可能包含一个带有 shell 元字符的子模块用户或主机名,可能导致产生命令注入漏洞。
漏洞名称:OpenSSH < 9.6 命令注入漏洞
漏洞类型:OS 命令注入
发现时间:2023-12-19
MPS 编号:MPS-9rip-l1u7
CVE 编号:CVE-2023-51385

影响范围
openssh@(-∞, 9.6p1-1)

修复方案
将组件 openssh 升级至 9.6p1-1 及以上版本
将 openssh 升级至 9.6 及以上版本
避免用户名或主机名中存在 shell 元字符

SSH协议前缀截断攻击(Terrapin攻击)

Terrapin 是一种针对 SSH 协议的前缀截断攻击。更确切地说,它破坏了 SSH 安全通道的完整性。通过在 handshake 过程中仔细调整序列号,攻击者可以在安全通道开始时删除客户端或服务器发送的任意数量的信息,而客户端或服务器却不会察觉。Fabian Bäumer 等人在2023年12中旬发现 SSH 标准中的 ChaCha20-Poly1305 和 Encrypt-then-MAC 算法,存在前缀截断漏洞(Terrapin 攻击)。攻击者可以在初始密钥交换期间注入任意数量的 SSH 消息,并在交换完成后移除相同数量的消息,从而破坏 SSH 扩展协商(RFC8308),降级连接安全性。


漏洞利用成本高,在真实场景中被利用几率很低,但影响面较大,OpenSSH、russh、paramiko 等受影响的 ssh 协议实现已发布补丁。

漏洞名称:SSH 协议前缀截断攻击 (Terrapin 攻击)
漏洞类型:安全相关信息的截断
发现时间:2023-12-19
CVE 编号:CVE-2023-48795

修复方案
将组件 russh 升级至 0.40.2 及以上版本
将组件 golang.org/x/crypto 升级至 0.17.0 及以上版本
将组件 libssh2 升级至 1.11.0 及以上版本
将 tera_term 升级至 5.1 及以上版本
将组件 erlang 升级至 25.3.2.8+dfsg-1 及以上版本
将组件 thrussh 升级至 0.35.1 及以上版本
将组件 putty 升级至 0.80-1 及以上版本
将组件 openssh 升级至 9.6 及以上版本
将 paramiko 升级至 3.4.0 及以上版本
将组件 putty 升级至 0.80 及以上版本
将组件 github.com/drakkan/sftpgo 升级至 2.5.6 及以上版本
将组件 ssh2 升级至 1.15.0 及以上版本
将组件 openssh 升级至 9.6p1-1 及以上版本
将组件 libssh 升级至 0.9.8 及以上版本
将 libssh 升级至 0.10.6 及以上版本
将 proftpd 升级至 1.3.9rc1 及以上版本