簡析CWE-476:NULL Pointer Dereference空指標解引用漏洞
C語言中的指標機制使得它靈活高效,但由於指標操作不當產生的動態記憶體錯誤也有很多,比如記憶體洩漏(Memory Leakage)、記憶體的重複釋放、空指標解引用(NullPointer Dereference)。
一、什麼是空指標解引用?
如果一個指標變數的值為NULL,解引用這個指標時,會導致程式崩潰(Segmentation fault)。
二、空指標解引用有什麼危害?
指標操作不當會產生動態記憶體錯誤,比如記憶體洩漏(MemoryLeakage)、記憶體的重複釋放、空指標解引用(NullPointer Dereference)。
其中空指標引用故障,也叫空指標解引用是一類普遍存在的記憶體故障,是程式設計語言中一類常見的動態記憶體錯誤。指標變數可以指向堆地址、靜態變數和空地址單元。當指標指向無效記憶體地址時對其引用,有可能產生不可預見的錯誤,導致軟體系統崩潰。空指標引用缺陷可能導致系統崩溴、拒絕服務等諸多不良後果。
自2018年1月至9月,CVE中有100多條漏洞資訊與其相關。其中包括18個Linux kernel 漏洞,部分漏洞如下:
(1)CVE-2018-16517:Netwide Assembler 的 asm/labels.c 檔案中存在空指標解引用,導致允許攻擊者進行拒絕服務攻擊。
(2)CVE-2018-16428:GNOME Glib 2.56.1,gmarkup. 中的
g_markup_parse_context_end_parse() 函式存在一個空指標解引用。
(3)CVE-2018-16329:ImageMagick 7.0.8-8 之前版本,MagickCore/property.c 檔案中的GetMagickProperty() 函式存在空指標解引用。
(4)CVE-2018-16328:ImageMagick 7.0.8-8 之前版本,MagickCore/log.c 檔案中的 CheckEventLogging () 函式存在空指標解引用。
三、如何防止解引用空指標?
重點關注報錯發生的所在行,透過空指標異常產生的兩條主要原因診斷具體的錯誤。同時為了避免空指標的發生,最好在做判斷處理時將“null”或者空值放於設定的值之前。
四、含有“空指標解引用”缺陷的程式碼樣例?
package SJT11683.S67;
public class SJT671F {
public String exampleFun(boolean flag, String s1, String s2) {
String s3 = null;
if (flag) {
s3 = s1 + s2;
}
//變數s3的值可能為null,當變數s3的值為null時,以下語句岀現null解引用
return s3.trim();
}
}
使用 Wukong(悟空)軟體程式碼安全漏洞檢測修復系統檢測上述程式程式碼。可以發現程式碼中存在空指標解引用,導致存在安全隱患。如下圖:
“空指標解引用”在CWE中編號為CWE-476: NULL Pointer Dereference
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2786563/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- opencv遇到NULL pointer(NULL array pointer is passed) 解決方案OpenCVNull
- PLC結構化文字(ST)——指標和引用(Pointer&Reference)指標
- NULL 指標、零指標、野指標Null指標
- SMART POINTER(智慧指標) (轉)指標
- [CareerCup] 13.8 Smart Pointer 智慧指標指標
- 詳解c++指標的指標和指標的引用C++指標
- 陣列指標:a pointer to an array,即指向陣列的指標陣列指標
- 程式的虛擬地址空間——NULL指標分割槽Null指標
- 空指標漏洞防護技術(提高篇)指標
- [CareerCup] 13.7 Node Pointer 節點指標指標
- 指標與引用指標
- 野指標 空指標指標
- Null pointer (NULL array pointer is passed) in function cvGetMat, 報這樣的錯NullFunction
- 空指標漏洞防護技術(初級篇)指標
- 1.0 - 指標和引用指標
- 使用Spring 的 Null-Safety免受空指標錯誤SpringNull指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- C++引用和指標C++指標
- nim的引用和指標指標
- 《指標和引用小結》指標
- 細說引用和指標指標
- 防止空指標指標
- 因為你安全了,所以你危險了——空指標引用指標
- 這裡是值引用還是指標引用?指標
- GO切片傳值/引用/指標Go指標
- 引用的底層為指標指標
- [C++]指標和引用(一)C++指標
- [C++]指標和引用(二)C++指標
- [C++]指標和引用(三)C++指標
- [C++]指標和引用(四)C++指標
- 07 引用 指標 和傳遞指標
- 指標和引用的區別指標
- C++中的指標與引用詳細解讀C++指標
- C++深度探索系列:智慧指標(Smart Pointer) [二] (轉)C++指標
- Golang指標隱式間接引用Golang指標
- C++中的指標與引用C++指標
- 又見懸空指標指標
- GO 空指標和nilGo指標