# openCryptoki C_WrapKey 缓冲区溢出漏洞
## 概述
openCryptoki 是一个用于 Linux 和 AIX 的 PKCS#11 库及工具。在版本 3.25.0 和 3.26.0 中,CKM_ECDH_AES_KEY_WRAP 实现中存在堆缓冲区溢出漏洞。
## 影响版本
- 3.25.0
- 3.26.0
## 细节
漏洞位于 CKM_ECDH_AES_KEY_WRAP 机制的 C_WrapKey 函数中。当本地攻击者提供一个压缩格式的椭圆曲线(EC)公钥并调用 C_WrapKey 时,会触发堆缓冲区溢出,导致越界写入。
## 影响
- 堆内存 corruption
- 可能导致服务拒绝(DoS)
- 攻击者需具备本地访问权限
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Incorrect calculation of buffer size in C_WrapKey with CKM_ECDH_AES_KEY_WRAP · Advisory · opencryptoki/opencryptoki · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
## 关键漏洞信息
- **漏洞名称**: Incorrect calculation of buffer size in C_WrapKey with CKM_ECDH_AES_KEY_WRAP
- **CVE ID**: CVE-2026-22791
- **严重性**: 6.6 / 10 ( Moderate )
- **影响版本**: v3.25.0, v3.26.0
- **修复版本**: Commit e37e9127dee6b7bf3c3c4d852c594256c57ec3a8
- **相关链接**: GHSA-26f5-3mwq-4wm7
### 漏洞描述
- **摘要**: 在 CKM_ECDH_AES_KEY_WRAP 实现中存在一个堆缓冲区溢出漏洞,攻击者可以通过提供压缩的 EC 公钥并调用 C_WrapKey 导致越界写入,从而导致堆损坏或拒绝服务。
- **详细信息**:
- 漏洞存在于 `mech_ec.c` 文件的 `ecdh_aes_key_wrap()` 函数中。缓冲区大小的计算使用了接收方密钥存储的椭圆曲线点长度,但代码复制本地生成的传输点时使用了实际的未压缩长度,导致缓冲区溢出。
- OpenCryptoki 接受压缩的椭圆曲线点而不进行归一化,而生成的传输密钥始终是未压缩编码的。
### 修复建议
- **修复提交**: e37e912
- **受影响的版本**: v3.25.0, v3.26.0
- **修复版本**: 修复程序还适用于 openCryptoki 3.25.0 和 3.26.0 版本。
### 影响范围
- **受影响的应用**: 使用 OpenCryptoki 接受外部 EC 公钥并执行使用 CKM_ECDH_AES_KEY_WRAP 进行密钥包装操作的应用。
- **服务进程**: 允许用户提供 EC 公钥并调用 C_WrapKey 的任何服务进程。
- **堆损坏**: 可能导致服务拒绝。
标题: COMMON: Add support for CKM_ECDH_AES_KEY_WRAP to key/encrypt/decrypt … · opencryptoki/opencryptoki@785d757 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键信息
1. **Commit Information**
- **Commit Hash:** 785d757
- **Author:** ifranzki
- **Date:** Dec 11, 2024
- **Title:** COMMON: Add support for CKM_ECDH_AES_KEY_WRAP to key/encrypt/decrypt manager
2. **Changes Summary**
- **Files Changed:** 5
- **Lines Changed:** +486 -0
3. **Key Code Changes**
- **Files Changed:**
- `usr/lib/common/decr_mgr.c`
- `usr/lib/common/encr_mgr.c`
- `usr/lib/common/h_extern.h`
- `usr/lib/common/key_mgr.c`
- `usr/lib/common/meh_ec.c`
4. **Commit Message Details**
- **Description:**
- Implements the CKM_ECDH_AES_KEY_WRAP mechanism by internally performing key, CKM_ECDHA_KEY_PAIR_GEN for generating the temporary AES wrapping key, and CKM_AES_KEY_WRAP_KWP for wrapping the to-be-wrapped key. The temporary transport key object and the AES wrapping key object are generated as session objects with CKA_HIDDEN set to true to ensure they cannot be found by means of C_FindObjects. These objects are meant for temporary use and should not last beyond a very short time.
- Gives update about signing by Ingo Franzki.
5. **Error Handling**
- Various checks for mechanisms, parameters, and key types to ensure validity and consistency. Errors are logged using `TRACE_ERROR` and the function returns with an appropriate error code.
6. **Security Considerations**
- Temporary keys have CKA_HIDDEN set which should prevent them being found by C_FindObjects, even though they are meant for short-time use.
- Key wrapping uses internal mechanisms designed to enhance security.
```
This commit focuses on adding support for a specific key wrapping mechanism using cryptographic algorithms, with detailed implementation notes and security considerations to safeguard the encryption/decryption process.
标题: COMMON: Fix CKM_ECDH_AES_KEY_WRAP buffer size calculation with compre… · opencryptoki/opencryptoki@e37e912 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
* Commit消息: 解决了使用压缩密钥时CKM_ECDH_AES_KEY_WRAP缓冲区大小计算的问题。
* 问题描述: 如果使用压缩的EC公钥进行C_WrapKey操作计算出的密钥材料大小可能出现错误,可能会导致越界写入。
* 原因: 内部生成的临时EC密钥使用非压缩的EC点,但使用提供的EC公钥的EC点计算缓冲区大小,对于压缩密钥会导致缓冲区过小。
* 解决方案: 在写入缓冲区时使用内部生成的EC密钥的EC点计算缓冲区大小。
* 关联信息: 解决了785d757问题,由Aisle Research的研究员Pavel Kohout报告。
暂无评论