云涯历险记

热爱可抵万难

云涯历险记

热爱可抵万难

漏洞学习

漏洞学习:空指针解引用

概念

C/C++语言空指针的值为NULL,一般NULL指针指向进程的最小地址,通常这个值为0.

当程序试图解引用一个期望非空,但是实际为空的指针时,会发生空指针解引用错误。可以导致程序异常终止或拒绝服务。

空指针解引用时C/C++程序中较为普遍存在的内存缺陷类型,当指针指向无效的内存地址并对其解引用时,产生不可预见错误,导致软件崩溃或者拒绝服务。

漏洞编号 漏洞概述
CVE-2018-16517 Netwide Assmbler的asm/labels.c文件存在空指针解引用,攻击者可以进行拒绝服务攻击
CVE-2018-16428 GNOME Glib 2.56.1的gmarkup.c中的g_markup_parse_context_end_parse()函数存在空指针解引用
CVE-2018-16329 ImageMagick7.0.8-8之前的版本的MagickCore/property.c文件中的GetMagickProperty()函数存在空指针解引用
CVE-2018-16328 ImageMagick 7.0.8-8之前的版本的MagickCore/property.c文件中的CheckEventLogging()函数存在空指针解引用
CVE-2019-9635 TensorFlow1.12.2之前的版本存在空指针解引用
CVE-2020-9385 Zint2.7.1中的libzint存在空指针解引用
CVE-2021-27186 Fluent Bit 1.6.10,当没有对flb_avro.c或http_server/api/v1/metrics.c中的flb_malloc的返回值进行验证时,存在空指针解引用

 

代码

void NULL_Pointer_Dereference()

{

char *data;

/*指针置为空*/

data=NULL;

/*空指针解引用*/

printHexCharLine(data[0]);

}

避免空指针解引用

1. 使用指针前进行健壮性检查

2. 调用函数返回值为空时,需对函数返回值进行非空验证

3. 在释放指针指向的空间后,需将指针赋值为空

4. 确保异常被正确处理