TPM 2.0 参考实现代码中的漏洞
字数 2379 2025-08-25 22:58:56
TPM 2.0参考实现代码漏洞分析与教学文档
1. 漏洞概述
本文档详细分析TPM 2.0参考实现代码中的两个关键漏洞:CVE-2023-1017(越界写入)和CVE-2023-1018(越界读取)。这些漏洞源于可信计算组织(TCG)发布的TPM 2.0参考实现代码,影响了多种软件和硬件TPM实现。
1.1 漏洞基本信息
| CVE编号 | 漏洞类型 | 影响范围 | 发现时间 |
|---|---|---|---|
| CVE-2023-1017 | 越界写入(OOB Write) | 多个TPM 2.0软件和硬件实现 | 2023年3月前 |
| CVE-2023-1018 | 越界读取(OOB Read) | 多个TPM 2.0软件和硬件实现 | 2023年3月前 |
2. 技术背景
2.1 TPM 2.0简介
可信平台模块(TPM)是一种安全芯片,用于存储加密密钥、密码和数字证书。TPM 2.0是其第二代规范,提供了更强大的安全功能。
2.2 TPM命令结构
TPM 2.0命令由以下部分组成:
- Base command header:基础命令头
- handleArea:句柄区域
- sessionArea:会话区域
- parameterArea:参数区域
2.3 参数加密机制
TPM 2.0支持基于会话的参数加密:
- 只有命令参数区域中的第一个参数可以被加密
- 该参数必须具有显式的大小字段
- 仅加密参数的数据部分
- 支持XOR混淆和CFB模式块密码
3. 漏洞详细分析
3.1 CVE-2023-1018 (越界读取)
漏洞位置
CryptUtil.c文件中的CryptParameterDecryption函数
漏洞代码
if(leadingSizeInByte == 2) {
cipherSize = (UINT32)BYTE_ARRAY_TO_UINT16(buffer); // [1]
buffer = &buffer[2]; // 前进缓冲区指针
}
问题分析
- 使用
BYTE_ARRAY_TO_UINT16宏从parmBufferStart读取16位字段(cipherSize) - 没有检查会话区域后是否有参数数据
- 如果畸形命令不包含
parameterArea部分,会触发越界内存读取
影响
- 可以从TPM命令末尾读取2个字节
- 如果命令缓冲区在请求间不清零,可能泄露先前命令的数据
3.2 CVE-2023-1017 (越界写入)
漏洞位置
同样位于CryptParameterDecryption函数
漏洞代码
if(leadingSizeInByte == 2) {
cipherSize = (UINT32)BYTE_ARRAY_TO_UINT16(buffer); // [1]
buffer = &buffer[2]; // [2] 前进缓冲区指针
}
if(cipherSize > bufferSize) // [3]
return TPM_RC_SIZE;
问题分析
- 读取
cipherSize后,缓冲区指针前移2字节([2]) - 安全检查([3])比较
cipherSize和bufferSize,但未从bufferSize减去2字节 - 可能导致解密时写入超出缓冲区末尾2字节
影响
- 可导致内存损坏
- 具体影响取决于实现如何分配命令缓冲区
- 可能覆盖关键数据,导致拒绝服务或更严重后果
4. 受影响的平台
4.1 软件实现
- TPM 2.0参考实现(2019年11月版本)
- Microsoft Hyper-V (TPMEngUM.dll)
- VMware Workstation (tpm2emu.exe)
- Libtpms/SWTPM (Qemu和VirtualBox使用)
- 云计算提供商:
- Amazon AWS NitroTPM
- Microsoft Azure虚拟TPM
- Google Cloud虚拟TPM
- Oracle Cloud虚拟TPM
4.2 硬件实现
- Nuvoton硬件TPM(固件版本1.3.0.1)
- 其他基于TCG参考代码的TPM 2.0固件
5. 漏洞利用
5.1 利用前提
- 启动授权会话(TPM2_StartAuthSession)
- 使用支持参数加密的命令(如TPM2_CreatePrimary)
5.2 复现Bug#1 (OOB读取)
- 发送最小有效
sessionArea - 不包含
parameterArea
5.3 复现Bug#2 (OOB写入)
- 发送最大长度(0x1000字节)的TPM命令
- 设置
cipherSize为0xfe5 - 填充0xfe3字节任意数据
6. 修复方案
6.1 TCG参考实现
- 发布TCG Trusted Platform Module Library勘误表1.4版
6.2 软件产品
- Microsoft:
- 2023年3月安全更新修补Hyper-V漏洞
- 开源参考实现提交9bdd9f0aaba5e54b3c314cfff02cf532281a067e
- VMware:
- 预计2023年4月发布修复
- Libtpms:
- 提交324dbb4c27ae789c73b69dbf4611242267919dd4
- Chromium OS:
- 提交3b87ed233acb4c76c27872e1ac0b74dc032199f1
- IBM:
- 提交102893a5f45dbb0b0ecc0eb52a8dd4defe559f92
6.3 硬件产品
- Nuvoton:
- 发布安全公告SA-003
- Lenovo:
- 发布安全公告LEN-118320
7. 防御建议
- 及时更新:应用供应商提供的最新补丁
- 监控:关注TPM相关异常行为
- 隔离:限制对TPM服务的非必要访问
- 审计:检查系统日志中异常的TPM命令
- 硬件TPM:检查制造商网站获取固件更新
8. 研究意义
- 广泛影响:源于参考实现的漏洞影响范围广
- 云安全威胁:可能用于虚拟机逃逸攻击
- 实现差异:相同漏洞在不同实现中表现不同
- 硬件挑战:硬件TPM固件分析困难
9. 结论
TPM 2.0参考实现中的这两个漏洞展示了供应链安全的重要性。由于许多实现基于同一参考代码,单一漏洞可能影响广泛的产品。云环境中虚拟TPM的使用增加了攻击面,可能被用于虚拟机逃逸。虽然OOB写入只有2字节,但在精心构造的攻击中仍可能造成严重后果。