ID: 558 類型:變量 |
狀態:草稿 |
描述
應用程序在多線程上下文中使用getlogin()函數,可能導致它返回不正確的值。
擴展描述
函數的作用是:返回一個指向字符串的指針,該字符串包含與調用進程關聯的用戶的名稱。函數是不可重入的,這意味着如果從另一個進程調用它,則內容不會被鎖定,字符串的值可以由另一個進程更改。這使得使用用戶名非常危險,因爲其他進程可以更改用戶名,所以函數的結果不可信。
相關視圖
與“研究層面”視圖(CWE-1000)相關
與“開發層面”視圖(CWE-699)相關
引入模式
階段 |
說明 |
實現 |
應用平臺
語言
C (出現的可能性不確定)
C++ (出現的可能性不確定)
後果
範圍 |
衝擊 |
可能性 |
完整性 |
技術衝擊: 修改應用數據; 越過保護機制; 其它 |
示例
例1
以下代碼依賴getlogin()來確定用戶是否可信。它很容易被顛覆。
(問題代碼)
Example Language: C
pwd = getpwnam(getlogin());
if (isTrustedGroup(pwd->pw_gid)) {
allow();
} else {
deny();
}
應對措施
階段: 架構與設計 不建議出於安全目的使用名稱。名稱很容易僞造,並且可能有重疊的用戶ID,可能導致混淆或冒充。 |
階段: 實現 使用getlogin_r(),這是可重入的,意味着其他進程被鎖定,無法更改用戶名。 |
種屬
關係 |
類型 |
ID |
名稱 |
屬於 |
227 |
||
屬於 |
1001 |