LOCRET.RET

函数在返回值中返回局部变量的地址

LOCRET.RET 检查器查找那些函数通过返回语句中的表达式来返回局部变量地址的实例。

漏洞与风险

局部变量分配在堆栈上,因此当函数返回指向变量的指针时,它返回的是堆栈地址。该地址在从函数中返回后将无效,因此访问该地址将可能导致无法预料的应用程序行为,通常会导致程序崩溃。

漏洞代码示例

复制
  #include <stdlib.h>
  
  int *func_RET(unsigned n)
  {
      int aux;
      int *p;
      if (n == 1) {
          p = &aux;
      } else {
         p = (int *)malloc(n * sizeof(int));
     }
     return p;
 }

Klocwork 标记了第 12 行,指出函数 func_RET 通过 return 语句返回了局部变量的地址。该局部变量 aux 的地址可以分配给变量 p,即所返回的变量。

相关检查器

安全培训

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