Closed
security: auth.json file permissions rely on umask, missing explicit Chmod #400
aflyingtoAdd on Jun 29Closed at Jul 7
aflyingto
Jul 2 Comments:
Jul 2 Comments:
验证记录
- 当前版本或分支: main (41315d8)
- 复现命令: 代码审查
pkg/config/auth_config.go:277和pkg/config/config.go:268 - 实际结果: 确认问题存在。
writeAuthState和writeConfigState都用os.WriteFile(path, data, 0o600),存在两个安全问题:- 若文件已存在且权限较松(如 0o644),
os.WriteFile只截断内容不会收紧权限(Unix 行为) - 若路径是 symlink 指向攻击者可读位置,
os.WriteFile会跟随 symlink 写入
对比config.go:211已对 config 目录做了显式os.Chmod(c.configDir, 0o700),但文件级别缺少同样处理。
- 若文件已存在且权限较松(如 0o644),
- 结论: 继续修复。在写入后显式
os.Chmod(path, 0o600)收紧权限,并在写入前用os.Lstat检查 symlink。


发现来源
安全审查 (Agent 2)
位置
pkg/config/auth_config.go:277证据
return os.WriteFile(c.authStatePath(), data, 0o600)os.WriteFile 受进程 umask 影响。若用户设置宽松 umask (如 000),token 文件可能以 0666 权限创建。对比同包 config.go:211 对 config 目录执行了显式 os.Chmod(c.configDir, 0o700)。
影响
在宽松 umask 环境下,用户的 GitCode 认证 token 可能被同主机其他用户读取。
建议
在 os.WriteFile 之后添加 os.Chmod(c.authStatePath(), 0o600) 调用(一行修复)。