FUM.GEN.MIGHT

可以释放未分配内存

如果释放未分配内存,会导致不可预测的结果。FUM.GEN.MIGHT 检查器能查找可通过未初始化的指针调用的释放函数。

漏洞与风险

使用无效指针调用 free() 时,会导致程序内存损坏,进而导致程序崩溃,并可能产生会被攻击者利用的漏洞。

缓解与预防

为了避免释放非堆内存,需要确保:

  • 仅释放之前使用 malloc() 在堆上分配的指针
  • 保持对指针的跟踪,并且仅释放指针一次
  • 仅释放程序右侧部分的内存

漏洞代码示例

复制
  main(){
    char * x = 1;
    if (a) x= malloc(1);
    free(x);
  }

Klocwork 针对第 4 行生成问题报告,指出如果第 3 行的条件为 false,则被 x 引用且在第 2 行上分配的内存可能会在第 4 行上被不正确地释放。释放未非配内存会导致应用程序崩溃,并可能产生易受攻击的漏洞。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。