CWE

普遍的弱点

A Community-Developed List of Software & Hardware Weakness Types

2021 CWE最重要的硬件弱点
CWE前25个最危险的弱点
>CWE列表> CWE-单个字典定义(4.9)
ID

CWE-122: Heap-based Buffer Overflow

弱点ID:122
抽象:变体
结构:简单的
查看自定义信息:
+描述
堆溢流条件是缓冲区溢出,可以将可以覆盖的缓冲区分配在内存的堆部分中,通常意味着使用诸如malloc()等例程分配缓冲区。
+关系
部分帮助该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
+与观点“研究概念”相关(CWE-1000)
自然 类型 ID 名称
Childof 根据根据- a weakness that is still mostly independent of a resource or technology, but with sufficient details to provide specific methods for detection and prevention. Base level weaknesses typically describe issues in terms of 2 or 3 of the following dimensions: behavior, property, technology, language, and resource. 787 外面写作
Childof 根据根据- a weakness that is still mostly independent of a resource or technology, but with sufficient details to provide specific methods for detection and prevention. Base level weaknesses typically describe issues in terms of 2 or 3 of the following dimensions: behavior, property, technology, language, and resource. 788 缓冲区结束后的内存位置访问
+介绍模式
部分帮助引言的不同模式提供了有关如何以及何时引入这种弱点的信息。该阶段识别可能发生介绍的生命周期中的一个点,而音符提供了与给定阶段中引言有关的典型情况。
Phase 笔记
建筑和设计
执行
+适用的平台
部分帮助该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。

语言

C(不确定的患病率)

C ++(不确定的患病率)

+常见后果
部分帮助该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
范围 Impact 可能性
Availability

技术影响:DOS:撞车,退出或重新启动;DOS:资源消耗(CPU);DOS:资源消耗(内存)

缓冲区溢出通常会导致崩溃。可能导致缺乏可用性的其他攻击,包括将程序置于无限的循环中。
Integrity
Confidentiality
Availability
访问控制

技术影响:执行未经授权的代码或命令;旁路保护机制;修改内存

缓冲区溢出通常可用于执行任意代码,这通常不在程序的隐式安全策略范围之内。除重要的用户数据外,基于堆的溢出还可以用来覆盖可能生活在内存中的功能指针,将其指向攻击者的代码。即使在不明确使用功能指针的应用程序中,运行时通常也会留下许多内存。例如,通常使用功能指针实现C ++中的对象方法。即使在C程序中,基础运行时通常也使用一个全局偏移表。
Integrity
Confidentiality
Availability
访问控制
其他

技术影响:执行未经授权的代码或命令;旁路保护机制;其他

当结果是任意代码执行时,通常可以用来颠覆任何其他安全服务。
+利用的可能性
High
+示例的例子

示例1

虽然缓冲区溢出示例可能很复杂,但可能具有非常简单但仍然可利用的基于堆的缓冲区溢出:

(不良代码)
示例语言:C
#define bufsize 256
int main(int argc,char ** argv){
char *buf;
buf =(char *)malloc(sizeof(char) *bufsize);
strcpy(buf,argv [1]);
}

缓冲区分配给具有固定尺寸的堆内存,但不能保证ARGV [1]中的字符串不会超过此大小并导致溢出。

示例2

此示例将编码过程应用于输入字符串,并将其存储到缓冲区中。

(不良代码)
示例语言:C
char * copy_input(char *user_supplied_string){
int i,dst_index;
char *dst_buf = (char*)malloc(4*sizeof(char) * MAX_SIZE);
if ( MAX_SIZE <= strlen(user_supplied_string) ){
死(“用户字符串太长,死亡邪恶黑客!”);
}
dst_index = 0;
for(i = 0; i
if('&'== user_supplied_string [i]){
dst_buf [dst_index ++] ='&';
dst_buf[dst_index++] = 'a';
dst_buf [dst_index ++] ='m';
dst_buf[dst_index++] = 'p';
dst_buf [dst_index ++] =';';
}
否则if('<'== user_supplied_string [i]){

/* encode to < */
}
else dst_buf [dst_index ++] = user_supplied_string [i];
}
返回dst_buf;
}

程序员试图在用户控制的字符串中编码AMPERS和字符,但是在应用编码过程之前验证了字符串的长度。此外,程序员假设编码扩展只会将给定字符扩展为4倍,而anmpersand的编码则以5。攻击者提供了许多&aspers的字符串。

+Observed Examples
参考 描述
链:整数签名错误(CWE-195)通过签名比较,导致堆溢出(CWE-122
链:当输入字符串未终止时,产品不会处理(CWE-170),导致缓冲区过度阅读(CWE-125)或基于堆的缓冲区溢出(CWE-122)。
链:机器学习产品可以具有基于堆的缓冲区溢出(CWE-122)当通过在浮点值上使用coiling()和地板()计算某些面向整数的边界时(CWE-1339
+潜在的缓解
预设计:使用执行自动界限检查的语言或编译器。

阶段:建筑和设计

Use an abstraction library to abstract away risky APIs. Not a complete solution.

阶段:构建和编译

通过构建前设计:加那利风格的范围检查,库更改,以确保块数据的有效性以及其他此类修复程序的有效性,但不应依靠。

阶段:实施

实现并执行界限检查输入。

阶段:实施

策略:图书馆或框架

Do not use dangerous functions such as gets. Look for their safe equivalent, which checks for the boundary.

Phase: Operation

Use OS-level preventative functionality. This is not a complete solution, but it provides some defense in depth.
+弱点
条件 描述
Primary
(弱点独立于其他弱点的地方)
+影响资源
  • 记忆
+成员hips
部分帮助此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
自然 类型 ID 名称
成员 Category类别 - 包含共享共同特征的其他条目的CWE条目。 970 SFP辅助群集:障碍访问故障
成员 Category类别 - 包含共享共同特征的其他条目的CWE条目。 1161 SEI CERT C编码标准 - 指南07.字符和字符串(STR)
+笔记

关系

基于堆的缓冲区溢出通常与基于堆栈的缓冲区溢出一样危险。
+分类映射
映射的分类名称 节点ID Fit 映射的节点名称
扣子 堆溢出
软件故障模式 SFP8 缓冲区访问故障
证书C安全编码 str31-c CWE更具体 Guarantee that storage for strings has sufficient space for character data and the null terminator
+参考s
[Ref-7] Michael Howard和David LeBlanc。“编写安全代码”。第5章,“堆超支”第138页。第二版。Microsoft Press。2002-12-04。<https://www.microsoftpressstore.com/store/writing-secure-code-9780735617223>。
[REF-44] Michael Howard, David LeBlanc and John Viega. "24 Deadly Sins of Software Security". "Sin 5: Buffer Overruns." Page 89. McGraw-Hill. 2010.
[Ref-62] Mark Dowd,John McDonald和Justin Schuh。“软件安全评估的艺术”。第3章,“非可取堆栈”,第76页。第一版。艾迪生·卫斯理。2006。
[Ref-62] Mark Dowd,John McDonald和Justin Schuh。“软件安全评估的艺术”。第5章,“保护机制”,第189页。第一版。艾迪生·卫斯理。2006。
[Ref-18] Secure Software,Inc.。“ The CLASP应用程序安全过程”。2005年。<https://cwe.mitre.org/documents/sources/theclaspapplicationsecurityprocess.pdf>。
+内容历史记录
+提交
Submission Date 提交者 组织
2006-07-19 扣子
+修改
修改日期 Modifier 组织
2008-07-01 埃里克·达奇(Eric Dalci) Cigital
更新的势_METIGATIONS,time_of_introduction
2008-08-01 KDM分析
添加/更新的白色框定义
2008-09-08 CWE内容团队 MITER
更新了适用的_platforms,common_consequences,关系,其他_notes,gualomy_mappings,nefness_ordinalities
2008-11-24 CWE内容团队 MITER
更新的common_cconsquences,其他_notes,关系_notes
2009-01-12 CWE内容团队 MITER
更新的COMMON_CCONSQUENCES,关系
2009-10-29 CWE内容团队 MITER
更新的关系
2010-02-16 CWE内容团队 MITER
更新的引用
2011-06-01 CWE内容团队 MITER
更新的common_cconsquences
2012-05-11 CWE内容团队 MITER
updated Demonstrative_Examples, References, Relationships
2012-10-30 CWE内容团队 MITER
updated Demonstrative_Examples
2013-02-21 CWE内容团队 MITER
更新了示范_examples,势_mitigations
2014-06-23 CWE内容团队 MITER
更新了观察到的examples
2014-07-30 CWE内容团队 MITER
更新的关系, Taxonomy_Mappings
2017-11-08 CWE内容团队 MITER
更新的causal_nature,likelihood_of_exploit,observed_examples,参考,关系,分类_ mappings,white_box_definitions
2018-03-27 CWE内容团队 MITER
更新的引用
2019-01-03 CWE内容团队 MITER
更新的关系
2020-02-24 CWE内容团队 MITER
更新的关系
2021-03-15 CWE内容团队 MITER
更新的引用
2021-07-20 CWE内容团队 MITER
更新了观察到的examples
提供更多信息 - 请选择其他过滤器。
页面最后更新:October 13, 2022