像 Debian、Ubuntu 这样的操作系统是否依赖 libssh 进行 SSH,如果他们这样做,是否意味着每台暴露 SSH 的服务器都容易受到这种攻击?
使用 libssh 的应用程序可能会出现这些问题。正如 libssh网站上所述:“libssh 是一个 C 库,使您能够编写使用 SSH 协议的程序。” 因此,容易受到攻击的是使用 libssh 库的用户应用程序,而不是操作系统本身。以下是一些使用 libssh 的应用程序(来自 libssh网站):
- KDE 使用 libssh 进行 sftp 文件传输
- GitHub 使用 libssh 实现了他们的 git ssh 服务器
- X2Go 是适用于 Linux 的远程桌面解决方案
此外,OpenSSH 是否依赖于 libssh 或者它们是两个独立的实现?
不,它没有。他们是分开的。
2018 年 10 月 18 日更新:漏洞发现者撰写的博客文章现已发布,其中包括详细解释和概念验证代码(通过 Paramiko)。
链接到的博客文章解释说,该漏洞是由于数据包处理调度表中的代码(在 libssh\src\packet.c 中)执行 SSH2_MSG_USERAUTH_SUCCESS 的处理程序,即使对于服务器也是如此(即使这样的消息只应该是由客户处理)。对代码的进一步调查表明,对 libssh\src\auth.c 中消息的这种错误处理导致服务器将会话状态更改为已验证!
还提供了详细的概念验证代码,显示可以更新 python Paramiko 以发送 SSH2_MSG_USERAUTH_SUCCESS 消息代替 SSH2_MSG_USERAUTH_REQUEST 消息并利用该漏洞。
但是,博客文章还指出:
“并非所有的 libSSH 服务器都必然容易受到身份验证绕过的影响;由于身份验证绕过将内部 libSSH 状态机设置为已验证,而从未给任何已注册的身份验证回调执行机会,因此使用 libSSH 开发的维护额外自定义会话状态的服务器可能会失败如果用户在没有创建此状态的情况下通过身份验证,则可以正常运行。”