簡析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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PLC結構化文字(ST)——指標和引用(Pointer&Reference)指標
- 詳解c++指標的指標和指標的引用C++指標
- 使用Spring 的 Null-Safety免受空指標錯誤SpringNull指標
- 指向指標的常量引用瞭解指標
- C語言知識彙總 | 56-C語言NULL空指標以及void指標C語言Null指標
- 1.0 - 指標和引用指標
- NXNSAttack漏洞簡析
- 因為你安全了,所以你危險了——空指標引用指標
- 防止空指標指標
- 透過指標引用陣列指標陣列
- 指標和引用的區別指標
- 引用的底層為指標指標
- GO切片傳值/引用/指標Go指標
- Golang指標隱式間接引用Golang指標
- GO 空指標和nilGo指標
- 空指標的傳說指標
- 裝置指紋簡析
- c++ 類的函式引用 指標C++函式指標
- springboot整合redis,redisTemplate 空指標Spring BootRedis指標
- easyexcel字型空指標錯誤Excel指標
- 如何避免空指標出錯?指標
- 淺析weak指標的實現指標
- java的引用:用C++/C的引用和指標去理解JavaC++指標
- c++指標傳遞與引用傳遞C++指標
- 智慧指標引用計數變化學習指標
- java中的引用與c中的指標Java指標
- NullPointerException空指標異常的理解NullException指標
- Rust 程式設計影片教程(進階)——025_2 解引用裸指標Rust程式設計指標
- 指標還沒弄清楚?一篇文章搞定 “地址、指標、指標的指標、引用”,並附程式碼示例,建議收藏!指標
- C++ 學習筆記(3):引用和指標C++筆記指標
- golang中 值型別,指標,引用的區別Golang型別指標
- C++中const與指標、引用的總結C++指標
- 關於引用(python中的偽指標)的理解Python指標
- 指標詳解指標
- 「程式設計師面試」一文搞懂野指標、懸空指標、空指標和記憶體洩漏,附程式碼示例!程式設計師面試指標記憶體
- 【指標】-簡單回顧指標
- LeetCode 138:複製帶隨機指標的連結串列 Copy List with Random PointerLeetCode隨機指標random
- 【char* 字元指標的用法】及【輸出NULL的問題】字元指標Null