# FreeRDP 智能卡堆溢出漏洞
## 概述
FreeRDP 在处理智能卡 SetAttrib 请求时存在堆越界读取漏洞,因 `cbAttrLen` 与实际 NDR 缓冲区长度不匹配导致。
## 影响版本
3.20.1 之前版本
## 细节
漏洞位于智能卡 SetAttrib 处理路径中,当参数 `cbAttrLen` 与 NDR 缓冲区实际长度不一致时,触发堆越界读取。
## 影响
攻击者可能利用该漏洞读取越界内存,导致信息泄露或触发程序崩溃。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Release 3.20.1 · FreeRDP/FreeRDP · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
以下是关于漏洞的关键信息:
- **CVEs Identified**:
- CVE-2026-22851
- CVE-2026-22852
- CVE-2026-22853
- CVE-2026-22854
- CVE-2026-22855
- CVE-2026-22856
- CVE-2026-22857
- CVE-2026-22858
- CVE-2026-22859
- **Affected Components**:
- All vulnerabilities except CVE-2026-22858 impact FreeRDP based clients only.
- CVE-2026-22858 also impacts FreeRDP proxy.
- FreeRDP based servers are not affected.
- **Vulnerabilities Severity**:
- All listed vulnerabilities are of medium severity.
- **Contributors**:
- @ehdgks0627 was acknowledged for uncovering these vulnerabilities through code review and testing.
标题: Heap-buffer-overflow in smartcard_unpack_set_attrib_call · Advisory · FreeRDP/FreeRDP · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键漏洞信息
- **漏洞类型**: Heap-buffer-overflow
- **影响版本**: <= 3.20.0
- **修复版本**: 3.20.1
- **CVE ID**: CVE-2026-22855
- **严重性**: 中等 (Moderate)
- **弱点类型**: CWE-20 (Improper Input Validation)
#### 概要
- **描述**: 在 `smartcard_unpack_set_attrib_call` 函数中,当 `cbAttrLen` 与实际的 NDR 缓冲区长度不匹配时,发生堆越界读取。
- **细节**:
- `smartcard_unpack_set_attrib_call` 从流中读取 `cbAttrLen`,如果 `ndrPtr` 存在,则调用 `smartcard_ndr_read(..., min=0, ...)`, 该函数基于 NDR 长度分配 `pbAttr`,而不是基于 `cbAttrLen`。
- 缺少检查 NDR 长度是否等于 `cbAttrLen`。后续调用 `SCardSetAttrib` 时使用 `call->cbAttrLen`,这可能导致内存损坏。
- 后续调用 `SCardSetAttrib` 时,`call->cbAttrLen` 可能超过 `pbAttr` 的实际大小,导致越界。
#### PoC
- 启用智能卡重定向并连接到恶意 RDP 服务器(或 MITM)。
- 发送一个具有较大 `cbAttrLen` 的 `SetAttrib` 请求,但编码较小的 NDR 长度。
- 客户端分配一个小缓冲区并转储 `cbAttrLen` 字节,触发越界读取。
#### 影响
- 恶意服务器可触发客户端堆缓冲区溢出,导致崩溃(DoS)和潜在的堆损坏,以及根据分配器行为和堆布局的代码执行风险。
#### 影响对象
- 仅影响基于 **FreeRDP** 的客户端
#### 修复
- 传递 `call->cbAttrLen` 作为传递给 `smartcard_ndr_read` 的最小长度,确保分配的缓冲区至少该长度。
Zaproxy alias impedit expedita quisquam pariatur exercitationem. Nemo rerum eveniet dolores rem quia dignissimos.