悟空云課堂丨代碼安全第八期:Switch中缺少default導(dǎo)致的代碼缺陷

該欄目為中科天齊全新規(guī)劃的悟空云課堂,旨在科普軟件安全相關(guān)知識(shí),助力企業(yè)有效防范軟件安全漏洞,提升網(wǎng)絡(luò)安全防護(hù)能力。本期主題為Switch中缺少default導(dǎo)致的代碼缺陷的相關(guān)介紹。
一、什么是Switch中缺少default導(dǎo)致的代碼缺陷?
switch用在編程中,如C語(yǔ)言中它經(jīng)常跟case一起使用,是一個(gè)判斷選擇邏輯結(jié)構(gòu)。其功能就是控制流程流轉(zhuǎn)。switch語(yǔ)句的語(yǔ)法如下(switch,case,break和default是關(guān)鍵字):
switch ( 變量表達(dá)式 )
{
case 常量1 :語(yǔ)句;break;
case 常量2 :語(yǔ)句;break;
case 常量3 :語(yǔ)句;break;
...
case 常量n:語(yǔ)句;break;
default :語(yǔ)句;break;
}
當(dāng)變量表達(dá)式所表達(dá)的量與其中一個(gè)case語(yǔ)句中的常量相符時(shí),就執(zhí)行此case語(yǔ)句后面的語(yǔ)句,并依次下去執(zhí)行后面所有case語(yǔ)句中的語(yǔ)句,遇到break則中斷并跳出當(dāng)前case分支執(zhí)行語(yǔ)句。如果常量表達(dá)式的量與所有case語(yǔ)句的常量值都不相符,則執(zhí)行default語(yǔ)句中的語(yǔ)句。
那代碼在switch語(yǔ)句中沒(méi)有default語(yǔ)句,這可能會(huì)導(dǎo)致復(fù)雜的邏輯問(wèn)題并由此產(chǎn)生安全隱患。此缺陷代表了軟件開(kāi)發(fā)中的常見(jiàn)問(wèn)題,其中并非所有可能的變量值都由給定過(guò)程考慮或處理。因此,根據(jù)不良信息做出進(jìn)一步的決策,并導(dǎo)致級(jí)聯(lián)故障。這種級(jí)聯(lián)故障可能會(huì)導(dǎo)致許多安全問(wèn)題,并構(gòu)成系統(tǒng)中的重大故障。
二、Switch中缺少default導(dǎo)致的代碼缺陷構(gòu)成條件有哪些?
1、switch語(yǔ)句沒(méi)有default情況。
三、Switch中缺少default導(dǎo)致的代碼缺陷會(huì)造成哪些后果?
關(guān)鍵字:改變程序執(zhí)行邏輯;
1、當(dāng)switch中的邏輯進(jìn)行數(shù)據(jù)檢查等,攻擊者可以注入不執(zhí)行任何case分支的數(shù)據(jù),則攻擊者可以繞過(guò)安全檢查,或?qū)е鲁绦蛱幚磉壿嬌襄e(cuò)誤。
四、Switch中缺少default導(dǎo)致的缺陷防范和修補(bǔ)方法有哪些?
1、switch語(yǔ)句中應(yīng)該添加default標(biāo)簽;
2、在一些情況下,default應(yīng)該作為檢查無(wú)效輸入的情況,而不應(yīng)該作為一個(gè)表示假定的選項(xiàng)。
五、Switch中缺少default導(dǎo)致的漏洞樣例:

用Wukong軟件檢測(cè)上述程序代碼,則可以發(fā)現(xiàn)代碼中存在著case語(yǔ)句中沒(méi)有default語(yǔ)句的缺陷,如下圖:

switch中缺少default在CWE中被編號(hào)為CWE-478: Missing Default Case inSwitch Statement
