CWE-401: Improper Release of Memory Before Removing Last Reference(删除最后一个引用之前内存释放不正确)

 ID: 401

类型:变量
结构:简单

状态:草稿

描述

软件在使用后没有充分跟踪和释放分配的内存,这会慢慢消耗剩余的内存。

扩展描述

这通常是由错误的数据处理或意外中断的会话触发的。

相关视图

与“研究层面”视图(CWE-1000)相关

与“开发层面”视图(CWE-699)相关

引入模式

 

阶段

说明

架构与设计

 

实现

内存泄漏有两个常见的,有时是重叠的原因:

•错误情况和其他异常情况

•对程序的哪个部分负责释放内存感到困惑

应用平台

语言

C (出现的可能性不确定)

C++ (出现的可能性不确定)

后果

范围

冲击

可能性

可利用性

技术冲击: DoS: 崩溃、推出或者重启: DoS: 不稳定; DoS: 资源消耗(CPU): DoS: 资源消耗 (内存):

 一般情况下,大多数内存泄漏都会导致的软件可靠性问题,但如果攻击者可以故意触发内存泄漏,则攻击者可能会发起拒绝服务攻击(通过崩溃或挂起程序)或利用内存不足导致的其他意外程序行为。

 

其它

技术冲击: 降低性能

 

被利用的可能性:

一般

示例

例1

如果对read()的调用未返回预期的字节数,则以下c函数将泄漏一块已分配的内存:

(问题代码)

Example Language:

char* getBlock(int fd) {

char* buf = (char*) malloc(BLOCK_SIZE);
if (!buf) {

return NULL;

}
if (read(fd, buf, BLOCK_SIZE) != BLOCK_SIZE) {


return NULL;

}
return buf;

}

应对措施

阶段: 实现

策略: 库或者框架

选择一种提供自动内存管理的语言或工具,或使手动内存管理不易出错。

 

例如,Linux中的glibc提供了对无效指针的保护。

 

当使用xcode以OS X或IOS为目标时,启用自动参考计数(ARC)[Ref-391]。

为了帮助在C++编程时正确和一致地管理内存,请考虑使用智能指针类,如STD::AutoMyPTR(由ISO/IEC ISO/IEC 1488∶2003定义)、STD::SyrdyPtR和STD::UnQuyQPTR(由C++标准即将修订的内容,非正式地称为C++1X),或等效的解决方案,如Boost。

阶段: 架构与设计

使用精简库以便舍弃有风险的API。不是一个完整的解决方案。

Phases: 架构与设计; 编译及链接

可以使用Boehm-Demers-Weiser垃圾收集器或者valgrind探测代码中的漏洞

说明: 不一定有效.

种属

关系

类型

ID

名称

属于

398

7PK - Code Quality

属于

730

OWASP Top Ten 2004 Category A9 - Denial of Service

属于

861

The CERT Oracle Secure Coding Standard for Java (2011) Chapter 18 - Miscellaneous (MSC)

属于

982

SFP Secondary Cluster: Failure to Release Resource

属于

1152

SEI CERT Oracle Secure Coding Standard for Java - Guidelines 49. Miscellaneous (MSC)

属于

1162

SEI CERT C Coding Standard - Guidelines 08. Memory Management (MEM)

说明

关联

这通常是由于对格式错误的数据处理不当或会话提前终止而导致的弱点。

术语

“内存泄漏”有时用于描述其他类型的问题,例如,对于不经意泄漏内存内容的信息泄漏(CVE-2003-0400就是这种术语冲突的一个例子)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值