天天看點

CWE-483: Incorrect Block Delimitation(塊分隔不正确)

 ID: 483

類型:變量

結構:簡單

狀态:草稿

描述

代碼沒有顯式地限定一個塊,該塊打算包含2個或更多語句,進而導緻邏輯錯誤。

擴充描述

在某些語言中,大括号(或其他定界符)對于塊是可選的。當省略分隔符時,某條語句被認為是在塊中,而實際情況卻不在塊中,這種情況下就可到招緻邏輯錯誤。。在某些情況下,邏輯錯誤可能會帶來安全隐患。

相關視圖

與“研究層面”視圖(CWE-1000)相關

與“開發層面”視圖(CWE-699)相關

引入模式

階段 說明
實作

應用平台

語言

C (有時出現)

C++ (有時出現)

後果

範圍 沖擊 可能性

保密性

完整性

可利用性

技術沖擊: 修改執行邏輯

這是一種常見的邏輯錯誤,通常會導緻明顯的錯誤行為,這些行為會被迅速發現并得到糾正。在輕度測試或未測試的代碼中,此錯誤可能會引入到生産環境中,并通過建立導緻應用程式中出現意外狀态的控制流路徑來提供額外的攻擊向量。後果将取決于錯誤執行的行為類型。

被利用的可能性:

示例

例1

在本例中,程式員縮進了要調用do_x()和do_y()的語句,就好像隻在條件為真時才調用這些函數一樣。但是,由于沒有大括号表示塊,是以即使條件為false,也将始終執行do_y()。

(問題代碼)

Example Language: C 

if (condition==true)

Do_X();

Do_Y();

這可能不是程式員想要的。當條件對安全至關重要時,例如在做出安全決策或檢測關鍵錯誤時,這可能會産生漏洞。

例2

在這個例子中,程式員縮進了do_y()語句,就好像其意圖是函數應該與前面的條件相關聯,并且隻應該在條件為真時調用。但是,由于do_x()是在條件的同一行上調用的,并且沒有大括号來表示塊,是以即使條件為false,也将始終執行do_y()。

(問題代碼)

Example Language: C 

if (condition==true) Do_X();

Do_Y();

這可能不是程式員想要的。當條件對安全至關重要時,例如在做出安全決策或檢測關鍵錯誤時,這可能會産生漏洞。

應對措施

階段: 實作

始終使用顯式塊劃分,并使用靜态分析技術來實施此實踐。

種屬

關系 類型 ID 名稱
屬于 884 CWE Cross-section
屬于 977 SFP Secondary Cluster: Design

繼續閱讀