CWE-789: Uncontrolled Memory Allocation(失控的内存分配)

 ID: 789

类型:变量
结构:简单

状态:草稿

描述

软件根据不受信任的大小值分配内存,但它不会验证或错误地验证大小,从而允许分配任意数量的内存。

相关视图

 "研究概念"视图 (CWE-1000)

Nature

Type

ID

Name

ChildOf

20

Improper Input Validation

ChildOf

770

Allocation of Resources Without Limits or Throttling

CanFollow

129

Improper Validation of Array Index

CanPrecede

476

NULL Pointer Dereference

 "开发概念"视图 (CWE-699)

Nature

Type

ID

Name

ChildOf

770

Allocation of Resources Without Limits or Throttling

引入模式

阶段

说明

实现

 

架构与设计

 

应用平台

语言

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

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

Class: Language-Independent (出现的可能性不确定)

后果

范围

冲击

可能性

可利用性

技术冲击: DoS: 资源消耗 (内存):

不控制内存分配会导致对系统内存的请求过多,可能会导致应用程序因内存不足或系统上大量内存的消耗而崩溃。

 

被利用的可能性:

示例

例1

考虑下面的代码,它接受一个不受信任的大小值,并分配一个缓冲区来包含一个给定大小的字符串。

(问题代码)

Example Language:

unsigned int size = GetUntrustedInt();
/* ignore integer overflow (CWE-190) for this example */

unsigned int totBytes = size * sizeof(char);
char *string = (char *)malloc(totBytes);
InitializeString(string);

假设攻击给给出下面的大小数值:

12345678

这将导致为字符串分配305419896字节(超过291兆字节)。

例2

考虑下面的代码,它接受不受信任的大小值,并将大小用作哈希映射的初始容量。

(问题代码)

Example Language: Java 

unsigned int size = GetUntrustedInt();
HashMap list = new HashMap(size);

hashmap构造函数将验证初始容量是否为负,但是没有检查到位以验证是否存在足够的内存。如果攻击者提供足够大的值,应用程序将遇到OutofMemoryError。

例3

以下代码获取一个不受信任的数字,该数字用作消息数组的索引。

(问题代码)

Example Language: Perl 

my $num = GetUntrustedNumber();
my @messages = ();

$messages[$num] = "Hello World";

索引根本没有经过验证(CWE-129),因此攻击者可能会修改@messages中的非预期元素。如果使用的索引大于数组的当前大小,则Perl解释器会自动扩展数组,使大索引正常工作。

如果$num是一个大值,例如2147483648(1<<31),那么对$messages[$num]的赋值将尝试创建一个非常大的数组,然后最终生成一个错误消息,例如:

数组扩展期间内存不足

内存耗尽将导致Perl程序退出,可能是拒绝服务。此外,内存不足还可能阻止许多其他程序在系统上成功运行。

应对措施

阶段: 实现; 架构与设计

针对影响分配内存量的任何值执行适当的验证输入。为处理超出限制的请求定义适当的策略,并考虑支持配置选项,以便管理员可以在必要时扩展要使用的内存量

阶段: 操作

使用系统提供的内存资源限制运行程序。这可能仍然会导致程序崩溃或退出,但对系统其余部分的影响将最小化。

种属

 

关系

类型

ID

名称

属于

1131

CISQ Quality Measures - Security

属于

1162

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

说明

应用平台

在许多方面,不可控制的内存分配是可能的,例如Perl中的动态数组分配或Java中集合中的初始大小参数。然而,像C和C++这样的编程人员有能力更直接地控制内存管理,将更容易受到影响。

相关弱点

这种弱点与整数溢出(CWE-190)密切相关。整数溢出攻击将集中于提供一个非常大的数字,该数字会触发导致分配的内存比预期的少的溢出。通过提供不触发整数溢出的大值,攻击者仍然可能导致分配过多的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值