安全: 令牌文件未设置限制性权限 (cap_portal.rs) #2
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
位置
src/cap_portal.rs:262-271严重性
🟡 中
问题描述
std::fs::write创建文件时使用默认 umask 权限(通常为 0644),导致令牌文件可能被其他用户读取。同时create_dir_all创建的目录也未设置限制权限。如果在多用户 Linux 系统上,攻击者读取该令牌后可能绕过用户授权直接恢复屏幕录制会话,构成权限绕过和信息泄露。
建议修复
使用
OpenOptions配合 Unix 的PermissionsExt::mode(0o600)设置仅当前用户可读写。目录也应设置为 0o700。建议使用原子写入(tmp file + rename)模式:修复完成
已在 commit 9a5b09c 中修复,基于 Oracle 安全审计建议实施。
改动摘要
token_path()— 返回Option<PathBuf>,移除/tmpfallbacksave_restore_token()create_new(true).mode(0o600)独占创建,防止符号链接攻击{pid}.tmp不可预测临时文件名DirBuilderExt::mode(0o700)创建目录绕过 umaskload_restore_token()新增测试(11 个)
token_path_never_uses_tmpverify_secure_dir_rejects_wrong_permissionsverify_secure_dir_rejects_non_directoryensure_secure_parent_creates_with_0700ensure_secure_parent_tightens_existing_dirsave_creates_file_with_0600load_reads_secure_fileload_rejects_group_readable_fileload_rejects_world_readable_fileload_rejects_symlinksave_then_load_roundtrip