CWE-558: Use of getlogin() in Multithreaded Application(在多線程應用中使用getlogin())

 ID: 558

類型:變量
結構:簡單

狀態:草稿

描述

應用程序在多線程上下文中使用getlogin()函數,可能導致它返回不正確的值。

擴展描述

函數的作用是:返回一個指向字符串的指針,該字符串包含與調用進程關聯的用戶的名稱。函數是不可重入的,這意味着如果從另一個進程調用它,則內容不會被鎖定,字符串的值可以由另一個進程更改。這使得使用用戶名非常危險,因爲其他進程可以更改用戶名,所以函數的結果不可信。

相關視圖

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

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

引入模式

階段

說明

實現

 

應用平臺

語言

C (出現的可能性不確定)

C++ (出現的可能性不確定)

後果

範圍

衝擊

可能性

完整性
訪問控制
其它

技術衝擊: 修改應用數據; 越過保護機制; 其它

 

示例

例1

以下代碼依賴getlogin()來確定用戶是否可信。它很容易被顛覆。

(問題代碼)

Example Language:

pwd = getpwnam(getlogin());
if (isTrustedGroup(pwd->pw_gid)) {

allow();

} else {

deny();

}

應對措施

階段: 架構與設計

不建議出於安全目的使用名稱。名稱很容易僞造,並且可能有重疊的用戶ID,可能導致混淆或冒充。

階段: 實現

使用getlogin_r(),這是可重入的,意味着其他進程被鎖定,無法更改用戶名。

種屬

關係

類型

ID

名稱

屬於

227

7PK - API Abuse

屬於

1001

SFP Secondary Cluster: Use of an Improper API

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章