1个不稳定版本
0.1.0 | 2022年4月22日 |
---|
#566 in 文件系统
5,468次每月下载
用于 5 个Crates (直接使用2个)
50KB
859 行
Safe Path
一个用于安全处理文件系统路径的库,通常用于容器运行时。
通常存在路径相关的攻击,例如基于符号链接的攻击,TOCTTOU攻击。`safe-path` crate提供了几个函数和实用结构来防止与路径解析相关的攻击。
支持
操作系统:
- Linux
参考
filepath-securejoin
:用Go编写的secure_join()。- CVE-2021-30465:`runC`中的符号链接相关的TOCTTOU漏洞。
许可证
此代码根据Apache-2.0许可证授权。
lib.rs
:
一个用于安全处理文件系统路径的库,通常用于容器运行时。
Linux 挂载命名空间提供了对每个命名空间实例中进程看到的挂载列表的隔离。因此,每个挂载命名空间实例中的进程将看到不同的单目录层次结构。
容器用于从宿主机系统隔离工作负载。Linux系统上的容器依赖于挂载命名空间为每个容器构建一个独立的根文件系统,从而保护宿主机和容器之间的安全。在创建容器时,容器运行时需要为容器根文件系统/volume设置文件系统挂载。挂载/路径的配置可能通过以下方式由最终用户间接控制:
- 容器镜像
- Kubernetes pod规范
- hook命令行参数
这些卷配置信息可能由最终用户/恶意攻击者控制,因此容器运行时不应该信任它们。当容器运行时为容器准备挂载命名空间时,它必须非常小心地验证用户输入的配置信息,并确保容器根文件系统目录之外的数据不会被容器所影响。与容器挂载命名空间相关的攻击类型包括
- 基于符号链接的攻击
- 检查时间到使用时间(TOCTTOU)
此crate为容器运行时提供了几种机制,以便在为容器准备挂载命名空间时安全地处理文件系统路径。
- scoped_join():安全地将
unsafe_path
连接到root
,并确保unsafe_path
在root
的作用域下。 - scoped_resolve():将
unsafe_path
解析为一个相对路径,该路径以root
为根,并受其限制。 - struct PinnedPathBuf:是
PathBuf
的安全版本,用于防止 TOCTTOU 风格的攻击,确保以下内容:PinnedPathBuf::as_path()
的值永不改变。PinnedPathBuf::as_path()
返回的路径始终是一个符号链接。PinnedPathBuf::as_path()
所引用的文件系统对象永不改变。PinnedPathBuf::target()
的值永不改变。
- struct ScopedDirBuilder:是
DirBuilder
的安全版本,用于防止符号链接竞态和 TOCTTOU 风格的攻击,通过以下方式增强安全性:- 确保新目录在指定的
root
目录下创建。 - 在创建目录的过程中避免符号链接竞态攻击。
- 为目录的最后一层返回 [PinnedPathBuf],以便可以安全地用于其他操作。
- 确保新目录在指定的
这项工作受到了以下启发
filepath-securejoin
:用Go编写的secure_join()。- CVE-2021-30465:`runC`中的符号链接相关的TOCTTOU漏洞。
依赖项
~43KB