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) |