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 |