c语言 - 能够从未分配值的 malloc'ed 范围读取是否是一个安全漏洞?



假设您有以下代码:

int *i = malloc(sizeof (int));
printf("%i", *i);

i是否有可能访问之前可能包含敏感数据但尚未擦除的内存空间?

当然,我意识到这在大多数现代机器上可能不是一个令人担忧的问题,但我很好奇,在嵌入式平台等较小的低功耗系统中,这是否是一个真正的问题,因为嵌入式平台通常具有非常低的内存大小。

标题中的问题是可以回答的,尽管所显示的代码可能不可编译。

答案是肯定的。

如果你允许读取新分配的未初始化内存,并且内容被泄露(即以某种方式到达外部(,那么你就有可能知道该区域以前使用的安全相关值。这是因为动态内存分配的目的是将释放的内存重新用于其他目的。

基于进程之间可访问内存空间的充分有效分离的保护性内存管理(我认为这需要硬件支持的内存管理(可以确保没有进程能够从不同进程的内存空间中读取任何内容
基于此,流程设计可以确保任何输出流程都无法访问可能包含安全信息的内存。然而,这需要仔细的设计和遵守设计的纪律。在意外或缺乏设计的情况下,安全访问进程也会输出,无论是在动态分配的内存中还是在您的问题中犯了一些错误,内存(地址空间(的分离都不能起到保护作用。

诚然,我认为你的问题暗示了这种情况,设计细节和错误都在发生。那么答案是肯定的(如上所述(。

C不定义"安全漏洞";所以每个C的特定答案是不可用的。

根据常见的安全问题,它是一个安全漏洞。

然而,试图读取未初始化的int是不确定的,甚至可能导致陷阱。为了避免这种情况,请读作unsigned char

unsigned char *p = malloc(sizeof *p);
printf("%xn", *p);

相关内容

最新更新