Sploitus

Exploit for CVE-2018-10933

kitploit · 2026-08-31

Exploit Code

MARKDOWN266 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-K3YSTR0K3R-CVE-2018-10933
# CVE-2018-10933 - libssh 认证绕过

> 针对 **CVE-2018-10933** 的概念验证实现,这是影响 libssh 服务端实现的一个严重认证绕过漏洞。

> **免责声明**
> 
> 本仓库仅用于教育目的、漏洞研究和授权安全测试。未经明确许可,切勿对任何系统进行测试。

* * *

CVE-2018-10933 是在 libssh **服务端状态机** 中发现的一个**严重认证绕过漏洞** 。

与涉及弱密码或加密弱点的传统认证缺陷不同,该漏洞之所以存在,是因为服务端错误地信任了一个本应始终**从服务端发送到客户端** 的协议消息。

因此,攻击者可以说服存在漏洞的 libssh 服务端,使其相信认证已成功完成,**而无需提供任何凭证** 。

这使得未经验证的攻击者能够针对以服务端模式使用 libssh 的易受攻击应用程序建立经过认证的 SSH 会话。

* * *

# 漏洞信息

字段| 值  
---|---  
CVE| CVE-2018-10933  
严重程度| 严重  
CVSS v3| 9.1  
CWE| CWE-287(认证不当)  
攻击向量| 网络  
用户交互| 无  
所需权限| 无  
  
* * *

# 受影响版本

该漏洞影响**以服务端模式运行的 libssh** 。

受影响的版本包括:

  * libssh 0.6.x
  * libssh 0.7.x(低于 **0.7.6** 的版本)
  * libssh 0.8.x(低于 **0.8.4** 的版本)



仅将 libssh 用作 SSH 客户端的应用程序**不受影响** 。

* * *

# 根本原因

该漏洞源于 libssh 服务端代码中实现的**认证状态机** 。

在正常的 SSH 认证流程中:

root@kitploit:~
    
    
    客户端 ----------------------> 服务端
    
    SSH_MSG_USERAUTH_REQUEST
               |
               V
    服务端验证凭证
               |
               V
    SSH_MSG_USERAUTH_SUCCESS
               |
               V
    经过认证的会话
    

协议规定,**SSH_MSG_USERAUTH_SUCCESS** 仅在成功认证后由**服务端** 生成。

然而,受影响版本的 libssh 未能正确验证此消息的来源。

服务端没有拒绝客户端提供的 `SSH_MSG_USERAUTH_SUCCESS`,而是错误地将其内部认证状态直接转换为:

root@kitploit:~
    
    
    Authenticated = TRUE
    

而从未验证过凭证。

这是典型的**认证不当(CWE-287)** 案例。

* * *

# 认证流程对比

## 合法认证

root@kitploit:~
    
    
    客户端
       |
       | USERAUTH_REQUEST
       |
       V
    服务端
    
    验证用户名
    验证密码
    验证密钥
    
          |
          V
    
    USERAUTH_SUCCESS
    
    认证通过
    

* * *

## 利用过程

root@kitploit:~
    
    
    攻击者
        |
        | USERAUTH_SUCCESS
        |
        V
    存在漏洞的服务端
    
    (无验证)
    
    认证通过
    

* * *

# 影响

成功利用允许未经验证的攻击者:

  * 绕过认证
  * 创建经过认证的 SSH 通道
  * 执行命令(取决于应用程序)
  * 读取敏感数据
  * 修改文件
  * 如果应用程序允许,获取管理访问权限



实际影响取决于易受攻击的应用程序在认证后如何使用 libssh。

* * *

# 技术细节

漏洞的存在是因为认证状态机错误地接受了来自客户端的以下数据包:

root@kitploit:~
    
    
    SSH2_MSG_USERAUTH_SUCCESS
    

libssh 没有验证该数据包是否来自服务端,而是直接更新其内部会话状态,仿佛认证已成功完成。

由于后续的授权检查依赖于此内部状态,攻击者可以立即打开经过认证的通道。

该漏洞**不** 涉及以下类型的攻击:

  * 缓冲区溢出
  * 内存破坏
  * 加密弱点
  * 竞争条件



相反,它利用的是**协议状态处理中的逻辑缺陷** 。

* * *

# 利用条件

攻击者需要:

  * 能够访问 SSH 服务的网络连接
  * 以**服务端模式** 使用 libssh 的易受攻击应用程序



不需要:

  * 用户名
  * 密码
  * 私钥
  * 有效的 SSH 凭证



* * *

# 检测

潜在指标包括:

  * 没有成功认证日志的 SSH 会话
  * 意外的通道创建
  * 无对应登录事件的认证成功
  * 异常的服务端会话状态转换



网络 IDS 签名也可能识别出来自客户端的异常 `SSH2_MSG_USERAUTH_SUCCESS` 数据包。

* * *

# 缓解措施

将 libssh 升级到已修补的版本:

  * **0.7.6**
  * **0.8.4**
  * 任何更新的维护版本



如果无法立即升级:

  * 使用防火墙限制 SSH 访问
  * 在可行的情况下禁用易受攻击的服务
  * 监控认证日志中的异常情况
  * 将暴露范围限制在可信网络



除了更新受影响的软件外,没有可靠的变通方案。

* * *

# 参考

  * NIST 国家漏洞数据库
  * libssh 安全公告
  * NCC Group 技术公告
  * Cisco 安全公告



* * *

# 教育目的

本仓库演示了协议实现错误如何导致认证状态机漏洞。

旨在帮助:

  * 安全研究人员
  * 渗透测试人员
  * 蓝队成员
  * 学习认证绕过漏洞的学生



所包含的概念验证代码用于在受控环境中展示漏洞,以增进对安全协议实现的理解。