CWE-562: Return of Stack Variable Address(返回堆栈变量地址)

博客指出函数返回堆栈变量地址会导致意外程序行为,常以崩溃形式出现。因局部变量在堆栈分配,返回指向局部变量的指针后,后续函数调用可能覆盖指针值。还提及该漏洞与相关视图有关,在C和C++中可能出现,并给出问题代码示例。

 ID: 562

类型:基础
结构:简单

状态:草稿

描述

函数返回堆栈变量的地址,这将导致意外的程序行为,通常以崩溃的形式出现。

扩展描述

因为局部变量是在堆栈上分配的,所以当程序返回指向局部变量的指针时,它将返回堆栈地址。随后的函数调用可能会重复使用相同的堆栈地址,从而覆盖指针的值,指针不再对应于同一个变量,因为函数的堆栈帧在返回时无效。这最多会导致指针的值意外更改。在许多情况下,它会导致程序在下次取消指针引用时崩溃。

相关视图

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

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

引入模式

阶段

说明

实现

 

应用平台

语言

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

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

后果

范围

冲击

可能性

可利用性

技术冲击: DoS: 崩溃、退出或重启

 

示例

例1

一下函数返回地址堆栈.

(问题代码)

Example Language:

char* getName() {

char name[STR_MAX];
fillInName(name);
return name;

}

应对措施

阶段: 测试

使用静态分析工具发现堆栈变量地址的返回

种属

关系

类型

ID

名称

属于

748

CERT C Secure Coding Standard (2008) Appendix - POSIX (POS)

属于

998

SFP Secondary Cluster: Glitch in Computation

属于

1156

SEI CERT C Coding Standard - Guidelines 02. Declarations and Initialization (DCL)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值