K3ysTr0K3R/CVE-2018-10933
GitHub: K3ysTr0K3R/CVE-2018-10933
该项目是 CVE-2018-10933 libssh 服务端身份验证绕过漏洞的概念验证,展示了攻击者如何在不提供凭据的情况下获得已认证的 SSH 会话。
Stars: 1 | Forks: 0
# 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
- **0.7.6** 之前的 libssh 0.7.x
- **0.8.4** 之前的 libssh 0.8.x
仅将 libssh 作为 SSH 客户端使用的应用程序**不受此漏洞影响**。
# 根本原因
该漏洞源于 libssh 服务端代码内部实现的**身份验证状态机**。
在正常的 SSH 身份验证流程中:
```
Client ----------------------> Server
SSH_MSG_USERAUTH_REQUEST
|
V
Server validates credentials
|
V
SSH_MSG_USERAUTH_SUCCESS
|
V
Authenticated Session
```
协议规定 **SSH_MSG_USERAUTH_SUCCESS** **只能由服务端**在身份验证成功后生成。
然而,存在漏洞的 libssh 版本未能正确验证此消息的来源。
服务端没有拒绝客户端提供的 `SSH_MSG_USERAUTH_SUCCESS`,而是错误地将其内部身份验证状态直接转换为:
```
Authenticated = TRUE
```
而根本没有验证凭据。
这是**不当的身份验证 (CWE-287)** 的一个典型例子。
# 身份验证流程对比
## 合法身份验证
```
Client
|
| USERAUTH_REQUEST
|
V
Server
Validate Username
Validate Password
Validate Keys
|
V
USERAUTH_SUCCESS
Authenticated
```
## 漏洞利用
```
Attacker
|
| USERAUTH_SUCCESS
|
V
Vulnerable Server
(No validation)
Authenticated
```
# 影响
成功利用此漏洞可使未经身份验证的攻击者能够:
- 绕过身份验证
- 创建已通过身份验证的 SSH 通道
- 执行命令(取决于具体应用程序)
- 读取敏感数据
- 修改文件
- 在应用程序允许的情况下获取管理员权限
实际影响取决于存在漏洞的应用程序在通过身份验证后如何使用 libssh。
# 技术细节
该漏洞的存在是因为身份验证状态机错误地接受了来自客户端的数据包:
```
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 安全公告
# 教育目的
本仓库演示了身份验证状态机漏洞是如何由协议实现错误引起的。
它旨在帮助:
- 安全研究人员
- 渗透测试人员
- 蓝队
- 学习身份验证绕过漏洞的学生
包含的概念验证 (PoC) 在受控环境中演示了该漏洞,以增进对安全协议实现的理解。
标签:CISA项目, libssh, SSH协议, 安全漏洞, 身份认证绕过, 逆向工具