针对 CVE-2018-10933 的概念验证实现,这是影响 libssh 服务端实现的一个严重认证绕过漏洞。
免责声明
本仓库仅用于教育目的、漏洞研究和授权安全测试。未经明确许可,切勿对任何系统进行测试。
CVE-2018-10933 是在 libssh 服务端状态机中发现的一个严重认证绕过漏洞。
与涉及弱密码或加密弱点的传统认证缺陷不同,该漏洞之所以存在,是因为服务端错误地信任了一个本应始终从服务端发送到客户端的协议消息。
因此,攻击者可以说服存在漏洞的 libssh 服务端,使其相信认证已成功完成,而无需提供任何凭证。
这使得未经验证的攻击者能够针对以服务端模式使用 libssh 的易受攻击应用程序建立经过认证的 SSH 会话。
| 字段 | 值 |
|---|---|
| CVE | CVE-2018-10933 |
| 严重程度 | 严重 |
| CVSS v3 | 9.1 |
| CWE | CWE-287(认证不当) |
| 攻击向量 | 网络 |
| 用户交互 | 无 |
| 所需权限 | 无 |
该漏洞影响以服务端模式运行的 libssh。
受影响的版本包括:
仅将 libssh 用作 SSH 客户端的应用程序不受影响。
该漏洞源于 libssh 服务端代码中实现的认证状态机。
在正常的 SSH 认证流程中:
客户端 ----------------------> 服务端
SSH_MSG_USERAUTH_REQUEST
|
V
服务端验证凭证
|
V
SSH_MSG_USERAUTH_SUCCESS
|
V
经过认证的会话
协议规定,SSH_MSG_USERAUTH_SUCCESS 仅在成功认证后由服务端生成。
然而,受影响版本的 libssh 未能正确验证此消息的来源。
服务端没有拒绝客户端提供的 SSH_MSG_USERAUTH_SUCCESS,而是错误地将其内部认证状态直接转换为:
Authenticated = TRUE
而从未验证过凭证。
这是典型的认证不当(CWE-287) 案例。
客户端
|
| USERAUTH_REQUEST
|
V
服务端
验证用户名
验证密码
验证密钥
|
V
USERAUTH_SUCCESS
认证通过
攻击者
|
| USERAUTH_SUCCESS
|
V
存在漏洞的服务端
(无验证)
认证通过
成功利用允许未经验证的攻击者:
实际影响取决于易受攻击的应用程序在认证后如何使用 libssh。
漏洞的存在是因为认证状态机错误地接受了来自客户端的以下数据包:
SSH2_MSG_USERAUTH_SUCCESS
libssh 没有验证该数据包是否来自服务端,而是直接更新其内部会话状态,仿佛认证已成功完成。
由于后续的授权检查依赖于此内部状态,攻击者可以立即打开经过认证的通道。
该漏洞不涉及以下类型的攻击:
相反,它利用的是协议状态处理中的逻辑缺陷。
攻击者需要:
不需要:
潜在指标包括:
网络 IDS 签名也可能识别出来自客户端的异常 SSH2_MSG_USERAUTH_SUCCESS 数据包。
将 libssh 升级到已修补的版本:
如果无法立即升级:
除了更新受影响的软件外,没有可靠的变通方案。
本仓库演示了协议实现错误如何导致认证状态机漏洞。
旨在帮助:
所包含的概念验证代码用于在受控环境中展示漏洞,以增进对安全协议实现的理解。