描述
引用的内存被释放后可以导致程序崩溃,使用意想不到的价值,或执行代码。
扩展描述
previously-freed内存的使用可以拥有任意数量的不良后果,从腐败的有效数据的执行任意代码,这取决于缺陷的实例化和时机。最简单的方法可能发生数据损坏涉及系统的释放内存的重用。Use-after-free错误有两个常见的和有时重叠的原因:
- 错误条件和其他特殊情况。
- 混乱的程序负责释放内存的一部分。
在这个场景中,记忆的问题是分配给另一个指针有效后被释放。使用原始指针释放内存又指出,在新的地方分配。随着数据的改变,它破坏了有效使用内存;这导致未定义行为。
如果新分配的数据类,例如,在c++堆内的各种函数指针可能分布数据。如果其中一个函数指针与地址覆盖有效shellcode,执行任意代码。
替代条款
的关系
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”研究概念”(cwe - 1000)
自然 |
类型 |
ID |
的名字 |
ChildOf |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
825年 |
过期的指针 |
PeerOf |
变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 |
415年 |
双自由 |
光束 |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
364年 |
信号处理器竞态条件 |
光束 |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
1265年 |
意想不到的可重入调用不可重入的代码通过嵌套调用 |
CanPrecede |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
120年 |
缓冲区复制没有检查输入的大小(经典的缓冲区溢出) |
CanPrecede |
Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 |
123年 |
Write-what-where条件 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
672年 |
过期或释放后操作资源 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及质量的措施(2020)”(CWE-1305)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
672年 |
过期或释放后操作资源 |
此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
相关的视图”方案及数据保护措施”(cwe - 1340)
自然 |
类型 |
ID |
的名字 |
ChildOf |
类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 |
672年 |
过期或释放后操作资源 |
模式的介绍
不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
常见的后果
这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 |
影响 |
可能性 |
完整性
|
使用先前释放内存可能腐败的有效数据,如果有问题的内存区域分配和使用得当。 |
|
可用性
|
如果块合并发生后使用之前释放数据,这个过程可能会崩溃当使用无效的数据块信息。 |
|
完整性 保密 可用性
|
如果恶意数据输入块合并发生之前,它可能会利用write-what-where原始执行任意代码。 |
|
利用的可能性
示范例子
示例1
下面的例子显示出,需求不足。
# include < stdio . h > # include < unistd.h > #定义BUFSIZER1 512 #定义BUFSIZER2 ((BUFSIZER1/2) - 8) int主要(int命令行参数个数,char * * argv) {
char * buf1R1; char * buf2R1; char * buf2R2; char * buf3R2; buf1R1 = (char *) malloc (BUFSIZER1); buf2R1 = (char *) malloc (BUFSIZER1); 免费(buf2R1); buf2R2 = (char *) malloc (BUFSIZER2); buf3R2 = (char *) malloc (BUFSIZER2); strncpy (argv [1], buf2R1 BUFSIZER1-1); 免费(buf1R1); 免费(buf2R2); 免费(buf3R2); }
示例2
下面的代码演示了一个使用后免费错误:
char * ptr = (char *) malloc(大小); 如果(err) {
abrt = 1; 免费(ptr); } … 如果(abrt) {
logError(“操作中止之前提交”,ptr); }
当一个错误发生时,立即释放的指针。然而,这个指针是后来logError函数中使用不正确。
观察到的例子
参考 |
描述 |
|
|
|
|
|
Use-after-free引发的数据仍在传播而关闭了连接。 |
|
分配不当导致use-after-free无效数据。 |
|
证书与大量的学科交替的名字不是realloc妥善处理,导致use-after-free |
|
计时器是不相关的对象被删除时禁用 |
|
访问一个“死亡”对象,正在清理 |
|
对象被删除甚至零引用计数,后来访问 |
|
use-after-free涉及请求包含无效的版本号 |
|
卸载当前正在访问的对象的其他功能 |
|
错误跟踪导致use-after-free引用计数 |
|
use-after-free相关使用未初始化的内存 |
|
与incorrectly-nested标记HTML文档 |
|
使用后免费在ActiveX对象通过提供一个畸形的论证方法 |
|
use-after-free断开在数据传输、消息包含不正确的数据类型 |
|
断开连接在一个大型数据传输会导致不正确的引用计数,导致use-after-free |
|
use-after-free发现起毛 |
|
|
|
realloc生成新的缓冲和指针,但先前的指针仍然保留,导致后免费使用 |
|
Use-after-free在web浏览器,可能结果不初始化内存。 |
|
use-after-free当一个线程访问内存被另一个线程释放 |
|
畸形的值分配给特定的属性触发后免费使用 |
|
邮件服务器不妥善处理长标题。 |
|
链:整数溢出导致use-after-free |
|
释放指针 |
潜在的缓解措施
阶段:体系结构和设计
选择一种语言,提供了自动内存管理。 |
实施阶段:
释放指针时,一定要让他们为NULL一旦释放。然而,利用多个或复杂的数据结构可能会降低这一策略的有效性。 |
检测方法
起毛
模糊测试(起毛)是一个强大的技术来生成大量的不同输入-随机或算法和动态调用的代码与输入。即使随机输入,通常能产生意想不到的结果的,比如崩溃,内存损坏或资源消耗。起毛有效地产生可重复的测试用例,标明错误,这有助于开发人员来诊断问题。
|
自动静态分析
自动静态分析,通常被称为静态应用程序安全性测试(科协),可以找到一些实例的这个弱点分析源代码或二进制/编译后的代码,而不必执行它。通常情况下,这是通过建立一个模型的数据流和控制流,然后寻找潜在攻击模式,连接“源”与“下沉”(输入)的起源(目的地数据与外部组件交互,较低的层,如操作系统,等等)。
|
影响资源
会员资格
这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 |
类型 |
ID |
的名字 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
398年 |
7 pk -代码质量 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
742年 |
CERT C安全编码标准(2008)第9章-内存管理(MEM) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
808年 |
2010年处于25 -弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
876年 |
CERT c++安全编码部分08 -内存管理(MEM) |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
983年 |
SFP二级集群:错误的资源使用 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1162年 |
SEI CERT 08 C编码标准指导方针。内存管理(MEM) |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1200年 |
弱点在2019 CWE最危险的软件错误 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1337年 |
2021 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1350年 |
2020 CWE最危险软件的弱点的弱点 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1387年 |
2022 CWE最危险软件的弱点的弱点 |
MemberOf |
类别——CWE条目包含一组其他条目,共享一个共同的特点。 |
1399年 |
综合分类:内存安全 |
MemberOf |
视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 |
1425年 |
2023 CWE最危险软件的弱点的弱点 |
脆弱性映射笔记
用法:允许
(CWE ID可以用来映射到现实世界的漏洞) |
原因:可接受的使用 |
理由是: 这个CWE条目是变体的抽象级别,这是一个首选的抽象级别映射到漏洞的根本原因。 |
评论: 仔细阅读这两个名称和描述,以确保此映射是一个适当的配合。不要试图“力”映射到底层基础/变体只是遵守这首选的抽象级别。 |
分类法映射
映射分类名称 |
节点ID |
适合 |
映射节点名 |
7有害的王国 |
|
|
使用后免费 |
扣 |
|
|
使用释放内存 |
CERT C安全编码 |
MEM00-C |
|
分配和释放内存相同的模块,在同一层次的抽象 |
CERT C安全编码 |
MEM01-C |
|
一个新值存储在指针后立即免费() |
CERT C安全编码 |
MEM30-C |
确切的 |
不访问释放内存 |
软件故障模式 |
SFP15 |
|
错误的资源使用 |
引用
|
|
迈克尔•霍华德(REF-44)大卫·勒布朗和Viega约翰。软件安全的“24宗罪”。“罪恶之八:c++灾难。”Page 143. McGraw-Hill. 2010. |
更多的信息是可用的,请编辑自定义过滤器或选择一个不同的过滤器。
|