界: Code Quality

程式碼品質不佳,會導致無法預料的行為。從使用者的角度來看,這通常表現為可用性不佳。對於攻擊者而言,這提供了以意想不到的方式向系統施加壓力的機會。

Undefined Behavior: File Pointer Use After Close

Abstract
應用程式在關閉的檔案指標上使用檔案操作。
Explanation
在系統 FILE 物件的關聯串流關閉後對其執行檔案操作,會導致未定義的行為。根據使用中的特定 C 編譯器,檔案操作可能會導致系統當機,甚至可能導致相同或不同檔案的可能修改或讀取。

範例 1:以下程式碼顯示在關閉對應的串流後嘗試讀取系統 FILE 物件。


FILE *sysfile = fopen(test.file, "r+");
res = fclose(sysfile);
if(res == 0){
printf("%c", getc(sysfile));
}


由於 getc() 函數在 sysfile 的檔案串流關閉之後執行,因此 getc() 導致未定義的行為,並可能導致系統當機或導致相同或不同檔案的可能修改或讀取。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 910
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 22.6
desc.controlflow.cpp.undefined_behavior_file_pointer_use_after_close