ITPub博客

首页 > IT基础架构 > 网络安全 > 简析CWE-476:NULL Pointer Dereference空指针解引用漏洞

简析CWE-476:NULL Pointer Dereference空指针解引用漏洞

原创 网络安全 作者:zktq2021 时间:2021-08-12 11:40:21 0 删除 编辑

C语言中的指针机制使得它灵活高效,但由于指针操作不当产生的动态内存错误也有很多,比如内存泄漏(Memory Leakage)、内存的重复释放、空指针解引用(NullPointer Dereference)。

一、什么是空指针解引用?

如果一个指针变量的值为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”或者空值放于设定的值之前。

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

package SJT11683.S67;

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

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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70000012/viewspace-2786563/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
中科天齐软件源代码安全缺陷检测平台(WuKong)是一款B/S 架构的国产信创静态软件安全测试工具,为客户在软件开发过程中查找、识别、追踪绝大部分主流编码中的技术漏洞与逻辑漏洞,帮助用户提升抵御网络攻击、防止数据泄露等安全问题的能力。

注册时间:2021-05-14

  • 博文量
    533
  • 访问量
    358772