| ID: 562 类型:基础 | 状态:草稿 |
描述
函数返回堆栈变量的地址,这将导致意外的程序行为,通常以崩溃的形式出现。
扩展描述
因为局部变量是在堆栈上分配的,所以当程序返回指向局部变量的指针时,它将返回堆栈地址。随后的函数调用可能会重复使用相同的堆栈地址,从而覆盖指针的值,指针不再对应于同一个变量,因为函数的堆栈帧在返回时无效。这最多会导致指针的值意外更改。在许多情况下,它会导致程序在下次取消指针引用时崩溃。
相关视图
与“研究层面”视图(CWE-1000)相关
与“开发层面”视图(CWE-699)相关
引入模式
| 阶段 | 说明 |
| 实现 |
应用平台
语言
C (出现的可能性不确定)
C++ (出现的可能性不确定)
后果
| 范围 | 冲击 | 可能性 |
| 可利用性 | 技术冲击: DoS: 崩溃、退出或重启 |
示例
例1
一下函数返回地址堆栈.
(问题代码)
Example Language: C
char* getName() {
char name[STR_MAX];
fillInName(name);
return name;
}
应对措施
| 阶段: 测试 使用静态分析工具发现堆栈变量地址的返回 |
种属
| 关系 | 类型 | ID | 名称 |
| 属于 | 748 | ||
| 属于 | 998 | ||
| 属于 | 1156 | SEI CERT C Coding Standard - Guidelines 02. Declarations and Initialization (DCL) |
博客指出函数返回堆栈变量地址会导致意外程序行为,常以崩溃形式出现。因局部变量在堆栈分配,返回指向局部变量的指针后,后续函数调用可能覆盖指针值。还提及该漏洞与相关视图有关,在C和C++中可能出现,并给出问题代码示例。
868

被折叠的 条评论
为什么被折叠?



