ID: 244 类型:变量 | 状态:草稿 |
描述
使用realloc()调整存储敏感信息的缓冲区的大小可以使敏感信息暴露在攻击中,因为它不会从内存中删除。
扩展描述
当敏感数据(如密码或加密密钥)未从内存中删除时,使用“堆检查”攻击(使用内存转储或其他方法读取敏感数据)可能会暴露给攻击者。realloc()函数通常用于增加已分配内存块的大小。此操作通常需要将旧内存块的内容复制到新的更大的块中。此操作使原始块的内容保持完整,但程序无法访问,从而使程序无法从内存中清除敏感数据。如果攻击者稍后可以检查内存转储的内容,则可能会暴露敏感数据。
关联视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
阶段 | 说明 |
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 | 冲击 | 可能性 |
保密性 | 技术冲击: 内存读取; 其它 在安全敏感代码中使用vfork()和fork()时要小心。进程状态将不会被清除,并且将包含以前使用的数据痕迹。 |
示例
例1
以下代码对包含敏感数据的缓冲区调用realloc():
(问题代码)
Example Language: C
cleartext_buffer = get_secret();...
cleartext_buffer = realloc(cleartext_buffer, 1024);
...
scrub_memory(cleartext_buffer, 1024);
尝试从内存中清除敏感数据,但使用realloc(),因此数据的副本仍然可以在最初分配给cleartext_缓冲区的内存中公开。
种属
关系 | 类型 | ID | 名称 |
属于 | 227 | ||
属于 | 742 | CERT C Secure Coding Standard (2008) Chapter 9 - Memory Management (MEM) | |
属于 | 876 | ||
属于 | 884 | ||
属于 | 963 |