悟空云课堂丨代码安全第四十三期:空指针解引用漏洞

248 阅读3分钟

  中科天齐倾情打造《悟空云课堂》旨在科普软件安全相关知识,助力企业有效检测/防范软件安全漏洞,提升网络安全防护能力。本期主题为空指针解引用漏洞的相关介绍。

一、什么是空指针解引用

  如果一个指针变量的值为NULL,解引用这个指针时,会导致程序崩溃(Segmentation fault)。

二、空指针解引用有什么危害

  指针操作不当会产生动态内存错误,比如内存泄漏(MemoryLeakage)、内存的重复释放、空指针解引用(NullPointer Dereference)。

  其中空指针引用故障,也叫空指针解引用是一类普遍存在的内存故障,是程序设计语言中一类常见的动态内存错误。指针变量可以指向堆地址、静态变量和空地址单元。当指针指向无效内存地址时对其引用,有可能产生不可预见的错误,导致软件系统崩溃。空指针引用缺陷可能导致系统崩溴、拒绝服务等诸多不良后果。

  自2018年1月至9月,CVE 中共有100多条漏洞信息与其相关。其中包括18个Linux kernel 漏洞,部分漏洞如下:

  (1)CVE-2018-16517:Netwide Assembler 的 asm/labels.c 文件中存在空指针解引用,导致允许攻击者进行拒绝服务攻击。

  (2)CVE-2018-16428:GNOME Glib 2.56.1,gmarkup. 中的g_markup_parse_context_end_parse() 函数存在一个空指针解引用。

  (3)CVE-2018-16329:ImageMagick 7.0.8-8 之前版本,MagickCore/property.c 文件中的GetMagickProperty() 函数存在空指针解引用。

  (4)CVE-2018-16328:ImageMagick 7.0.8-8 之前版本,MagickCore/log.c 文件中的 CheckEventLogging () 函数存在空指针解引用。

三、如何防止解引用空指针

  重点关注报错发生的所在行,通过空指针异常产生的两条主要原因诊断具体的错误。同时为了避免空指针的发生,最好在做判断处理时将“null”或者空值放于设定的值之前。

四、含有“空指针解引用”缺陷的代码样例


  public class SJT671F {

  public String exampleFun(boolean flag, String s1, String s2) {

  String s3 = null;

  if (flag) {

  s3 = s1 + s2;

  } //变量s3的值可能为null,当变量s3的值为null时,以下语句岀现null解引用

  return s3.trim();

  }

  }

  使用Wukong(悟空)软件代码安全漏洞检测修复系统检测上述程序代码。可以发现代码中存在空指针解引用,导致存在安全隐患。如下图:

3.png

  “空指针解引用”在CWE中编号为CWE-476: NULL Pointer Dereference

  软件安全 网络安全的最后一道防线

  中科天齐公司是在中科院计算技术研究所的大力推动下

  以中科院计算所国际领先的自主研究成果

  “软件代码漏洞检测修复平台(Wukong悟空)

  为基础组建的高新技术企业

2.jpg

  关键词标签:悟空云课堂 空指针解引用 内存泄露 代码漏洞检测 软件安全测试

  原文链接:www.woocoom.com/b021.html?i…