CWE-416: Use After Free(释放后使用)
ID: 416 类型:基础 |
状态:草稿 |
描述
释放内存后引用内存可能导致程序崩溃、使用意外值或执行代码。
扩展描述
取决于缺陷的实例化应及发生的时点,使用释放的内存可能会产生许多不利的后果,从损坏有效数据到执行任意代码。 发生数据损坏的最简单方法是重新使用释放的内存。释放后使用有两个常见的,有时是重叠的原因:
- 错误情况和其他异常情况。
- 对程序的哪个部分负责释放内存感到困惑。
在这种情况下,在释放内存之后的某个时刻,问题内存又被有效地分配给另一个指针。释放内存的原始指针将再次使用,并指向新分配中的某个位置。随着数据的变化,它会损坏有效使用的内存;这会导致进程中出现未定义的行为。
如果新分配的数据恰好保存了一个类,例如在C++中,在堆数据中散布着不同的函数指针。如果这些函数指针中的一个被指向有效壳代码的地址覆盖,则可以实现任意代码的执行。
关联视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
阶段 |
说明 |
架构与设计 |
|
实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
范围 |
冲击 |
可能性 |
完整性 |
技术冲击: 修改内存 如果在其他地方正确分配和使用了相关的内存区域,则使用以前释放的内存可能会损坏有效数据。 |
|
可用性 |
技术冲击: DoS: 崩溃、退出或重启 如果在使用以前释放的数据之后发生块合并,则当将无效数据用作块信息时,进程可能会崩溃。 |
|
完整性 |
技术冲击: 执行未获授权的代码或命令 如果在进行块合并之前输入了恶意数据,则可以利用write-what-where缺陷来执行任意代码。 |
被利用的可能性:
高
示例
例1
(问题代码)
Example Language: C
#include <stdio.h>
#include <unistd.h>
#define BUFSIZER1 512
#define BUFSIZER2 ((BUFSIZER1/2) - 8)
int main(int argc, char **argv) {
char *buf1R1;
char *buf2R1;
char *buf2R2;
char *buf3R2;
buf1R1 = (char *) malloc(BUFSIZER1);
buf2R1 = (char *) malloc(BUFSIZER1);
free(buf2R1);
buf2R2 = (char *) malloc(BUFSIZER2);
buf3R2 = (char *) malloc(BUFSIZER2);
strncpy(buf2R1, argv[1], BUFSIZER1-1);
free(buf1R1);
free(buf2R2);
free(buf3R2);
}
例2
(问题代码)
Example Language: C
char* ptr = (char*)malloc (SIZE);
if (err) {
abrt = 1;
free(ptr);
}
...
if (abrt) {
logError("operation aborted before commit", ptr);
}
错误发生时,指针立刻被释放。然而,这个指针在后米的logError函数中被错误的使用。
应对措施
阶段: 架构与设计 选择提供自动内存管理的语言。 |
阶段: 实现 当释放指针时,确认释放后立刻将其置为NUL。然而,重叠或者复杂数据的使用降低了这个策略的可用性。 |
种属
关系 |
类型 |
ID |
名称 |
属于 |
398 |
7PK - Code Quality |
|
属于 |
399 |
Resource Management Errors |
|
属于 |
742 |
CERT C Secure Coding Standard (2008) Chapter 9 - Memory Management (MEM) |
|
属于 |
808 |
2010 Top 25 - Weaknesses On the Cusp |
|
属于 |
876 |
CERT C++ Secure Coding Section 08 - Memory Management (MEM) |
|
属于 |
983 |
SFP Secondary Cluster: Faulty Resource Use |
|
属于 |
1162 |
SEI CERT C Coding Standard - Guidelines 08. Memory Management (MEM) |
CWE-416: Use After Free(释放后使用)相关推荐
- Linux (x86) Exploit 开发系列教程之十二 释放后使用
释放后使用 译者:飞龙 原文:Use-After-Free 预备条件: Off-By-One 漏洞(基于栈) 理解 glibc malloc VM 配置:Fedora 20(x86) 什么是释放后使用 ...
- CVE-2012-4792Microsoft Internet Explorer 释放后使用漏洞
Microsoft Internet Explorer是微软Windows操作系统中默认捆绑的WEB浏览器.Microsoft Internet Explorer 6至8版本中存在释放后使用漏洞.通过 ...
- 谷歌修复另一枚已遭利用的 Chrome 释放后使用0day,细节未公开
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 谷歌修复了 Chrome 浏览器中已遭利用的另一枚 0day,成为该公司在一个月内修复的第二枚 0day. 上周五,谷歌发布 Wind ...
- Node.js TLSWrap 实现中的释放后使用漏洞分析
聚焦源代码安全,网罗国内外最新资讯! Node v14.11.0 版本的 TLS 实现中存在一个释放后使用漏洞. 当写入启用 TLS 的套接字时,node::StreamBase::Write 调用 ...
- 看我如何利用教科书级别的释放后使用漏洞(CVE-2020-6449)
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 GitHub 研究员 Man Yue Mo详述了自己在2020年3月份上报的一个严重的释放后使用漏洞(CVE-2020-6449).如 ...
- Linux x86 漏洞利用-Use-After-Free(UAF)-释放后可重用
Use-After-Free 先决条件 Off-By-One漏洞(基于堆) 理解glibc malloc VM设置:Fedora 20(x86) 什么是释放后可重用(UaF)? 继续使用已经释放的堆内 ...
- 初次定位UAF(内存释放后再次使用)问题
记第一次定位UAF 某某打开KASAN的版本报过来我们的一个业务出现必现UAF(USE after free)踩内存问题,正常版本没有想过堆栈信息异常,第一次遇到这问题,简单记录下定位过程. 了解KA ...
- 尴尬!因软件 Bug ,美国数百名囚犯释放后无法出狱
[CSDN 编者按]你敢想,真的会出现因为软件 Bug,上百起刑满人员被继续关押的奇葩事件. 整理 | 李磊 责编 | 张文 出品 | CSDN(ID:CSDNnews) 近日,一位来自美国亚利 ...
- [转]malloc的内存用free释放后为何系统回收不了
在学习第七章7.8节时关于存储器分配这一块的时候,有个疑问,malloc(当然包括calloc和realloc)申请内存时候是怎么样申请的,free的时候内存是直接还给操作系统么?这个也是我在阿里面试 ...
最新文章
- 承德计算机专业去哪考试,2021河北省考承德都在哪个学校考试?
- python xpath语法-Python爬虫基础之XPath语法与lxml库的用法详解
- SpringMvc多视图整合(jsp、velocity、freemarker)
- windows SVN服务器软件
- python webviewer爬虫_爬虫再也不怕检测浏览器环境了
- 公众号文章折叠点击后展开案例_(案例)蜂窝纸板在包装中的应用内衬
- 八皇后问题(非递归版)
- 学习中的一些牢骚。字符串栈/堆的址标准写法。
- 线程之线程池(ExecutorService)
- 什么是RS-232-C接口与什么是RS-485接口?
- 数电期末基础知识整理
- 计算的威力,智慧的传奇——Fabrice Bellard
- 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统
- 这些行业已经开始用数据挖掘了,我们的前途光明
- 常用benchmark小结
- .sh文件规则 .sh文件执行方法
- 实例演示Nginx重写(Rewrite)类型last、break、redirect和permanent的区别
- Github客户端的下载与安装心得
- jsp连接数据库并将数据显示到页面表格中
- 办公室可以挂画吗?挂什么样的画好?