程式碼安全測試第八期:Switch中缺少default導致的程式碼缺陷

zktq2021發表於2021-05-27

1、什麼是Switch中缺少default導致的程式碼缺陷?

switch用在程式設計中,如C語言中它經常跟case一起使用,是一個判斷選擇邏輯結構。其功能就是控制流程流轉。switch語句的語法如下(switch,case,break和default是關鍵字):

switch ( 變數表示式 )
{
case 常量1 :語句;break;
case 常量2 :語句;break;
case 常量3 :語句;break;
...
case 常量n:語句;break;
default :語句;break;
}

當變數表示式所表達的量與其中一個case語句中的常量相符時,就執行此case語句後面的語句,並依次下去執行後面所有case語句中的語句,遇到break則中斷並跳出當前case分支執行語句。如果常量表示式的量與所有case語句的常量值都不相符,則執行default語句中的語句。

那程式碼在switch語句中沒有default語句,這可能會導致複雜的邏輯問題並由此產生安全隱患。此缺陷代表了軟體開發中的常見問題,其中並非所有可能的變數值都由給定過程考慮或處理。因此,根據不良資訊做出進一步的決策,並導致級聯故障。這種級聯故障可能會導致許多安全問題,並構成系統中的重大故障。

2、Switch中缺少default導致的程式碼缺陷構成條件有哪些?

①switch語句沒有default情況。

3、Switch中缺少default導致的程式碼缺陷會造成哪些後果?

關鍵字:改變程式執行邏輯;

當switch中的邏輯進行資料檢查等,攻擊者可以注入不執行任何case分支的資料,則攻擊者可以繞過安全檢查,或導致程式處理邏輯上錯誤。

4、Switch中缺少default導致的缺陷防範和修補方法有哪些?

switch語句中應該新增default標籤;

②在一些情況下,default應該作為檢查無效輸入的情況,而不應該作為一個表示假定的選項。

5、Switch中缺少default導致的漏洞樣例:

用靜態程式碼檢測分析上述程式程式碼,則可以發現程式碼中存在著case語句中沒有default 語句的缺陷,如下圖:

switch中缺少default在CWE中被編號為CWE-478: Missing Default Case inSwitch Statement


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2774200/,如需轉載,請註明出處,否則將追究法律責任。

相關文章