【缺陷周话】第11期:释放后使用(UAF)

栏目: C++ · 发布时间: 5年前

内容简介:当动态分配的内存释放时,该内存的内容是不确定的,有可能保持完整并可以被访问,因为什么时候重新分配或回收释放的内存块是内存管理程序决定的,但是,也可能该内存的内容已经被改变,导致意外的程序行为。因此,当内存释放之后,保证不再对它进行写入或读取。详细请参见 CWE ID 416: Use After Free。由内存管理不当导致的问题是 C/C++ 程序中常见的漏洞。释放后使用会导致可被利用的潜在风险,包括程序异常终止、任意代码执行和拒绝服务攻击等。2018年1月至11月,CVE 中共有134条漏洞信息与其相

【缺陷周话】第11期:释放后使用(UAF)

1、释放后使用

当动态分配的内存释放时,该内存的内容是不确定的,有可能保持完整并可以被访问,因为什么时候重新分配或回收释放的内存块是内存管理程序决定的,但是,也可能该内存的内容已经被改变,导致意外的程序行为。因此,当内存释放之后,保证不再对它进行写入或读取。详细请参见 CWE ID 416: Use After Free。

2、 释放后使用的危害

由内存管理不当导致的问题是 C/C++ 程序中常见的漏洞。释放后使用会导致可被利用的潜在风险,包括程序异常终止、任意代码执行和拒绝服务攻击等。2018年1月至11月,CVE 中共有134条漏洞信息与其相关。部分漏洞如下:

CVE 漏洞概述
CVE-2018-1000051 Artifex Mupdf 版本的 fz_keep_key_storable 中存在一个释放后使用漏洞,可导致拒绝服务或代码执行问题。通过诱骗受害者打开一个特殊构造的 PDF 文件,该漏洞即可遭利用。
CVE-2018-17474 谷歌 Chrome 浏览器70.0.3538.67 之前版本 Blink 引擎的 HTMLImportsController 中存在一个释放后使用漏洞,很有可能导致远程攻击者通过一个特殊构造的 HTML 页面利用堆损坏问题。
CVE-2018-15924 Adobe Acrobat 和 Reader 2018.011.20063及之前版本、2017.011.30102 及之前版本、2015.006.30452 及之前版本中存在释放后使用漏洞。远程攻击者可利用该漏洞执行任意代码。

3、示例代码

示例源于 Samate Juliet TestSuite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE416_Use_After_Free__malloc_free_char_01.c。

3.1缺陷代码

【缺陷周话】第11期:释放后使用(UAF)

在示例代码中,在第29行使用 malloc() 进行内存分配,并在第35行使用 free() 对分配的内存进行了释放,当在第37行对已经释放的内存进行读取时,导致释放后使用问题。

使用360代码卫士对上述示例代码进行检测,可以检出“释放后使用”缺陷,显示等级为高。如图1所示:

【缺陷周话】第11期:释放后使用(UAF)

图1:释放后使用检测示例

3.2 修复代码

【缺陷周话】第11期:释放后使用(UAF)

在上述修复代码中,Samate 给出的修复方式为:在第30行使用 malloc()进行内存分配,并在第36行处使用 free() 进行释放,释放后不在对该内存进行其他操作。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“释放后使用”缺陷。如图2:

【缺陷周话】第11期:释放后使用(UAF)

图2:修复后检测结果

4 、如何避免释放后使用

要避免释放后使用,需要注意以下几点:

(1) 释放内存时请务必置空指针,虽然这种方法针对多重或复杂数据结构利用的有效性有限,但可以从一定程度上规避一部分问题。
(2) 在循环语句中进行内存分配或释放时,需谨慎确认是否存在问题。
(3) 使用源代码静态分析 工具 进行自动化的检测,可以有效的发现源代码中的释放后使用问题。

以上所述就是小编给大家介绍的《【缺陷周话】第11期:释放后使用(UAF)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员修炼之道

程序员修炼之道

[美]享特 / 人民邮电出版社 / 2007-12 / 49.00元

《程序员修炼之道》适合各层次软件开发人员阅读,也适合高等院校计算机专业学生和教师阅读。一起来看看 《程序员修炼之道》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

html转js在线工具
html转js在线工具

html转js在线工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具