跳至主要內容

CWE-119 漏洞分析

大约 2 分钟

CWE-119 漏洞分析

检查原理

该检查使用crate::analysis::pointer_inference的结果,检查是否可能发生任何内存访问越界到相应内存对象的边界之外。为此,聚合了指针推断分析的结果,进行了过程间的分析。另外,该检查使用轻量级的过程内数据流不动点计算,以确保每个内存对象只有第一次越界访问被标记为CWE。

误报

  • 指针推断分析的任何不精确性都可能导致此检查的误报结果。
  • 如果无法推断出某个内存对象的确切边界,将使用找到的最严格(最小)边界, 这可能导致误报警告。

漏报

  • 在指针推断分析无法推断出内存对象或访问索引的任何边界的情况下,该检查通常假定是分析不精确性导致的,不会将其标记为CWE。这将导致漏报情况,特别是在边界直接依赖用户输入的情况下。
  • 指针推断分析无法区分位于同一堆栈帧上的不同对象。因此,只有当堆栈上的缓冲区溢出可能超出整个堆栈帧时,才能检测到堆栈上的缓冲区溢出。这将导致漏报情况,特别是由于偏移一个单位而导致的缓冲区溢出。
  • 对于带有相应调用存根的外部调用的参数,分析将尽可能将大小参数近似为最小值,这可能导致漏报情况。目前,如果我们近似为较大的可能大小参数,分析不精确性将导致太多的误报情况。
  • 对于没有相应函数存根的外部函数调用的参数,该检查仅检查参数本身是否可能指向内存对象的边界之外。但由于通常不知道调用函数期望所指对象的大小,这仍可能忽略发生在被调用函数中的缓冲区溢出。
  • 目前,该检查只考虑堆栈或堆上的缓冲区,不考虑全局内存中的缓冲区。因此,不会检测到全局内存中缓冲区的相应溢出。
上次编辑于:
贡献者: harry