1个不稳定版本

0.1.0 2022年4月22日

#566 in 文件系统

Download history 1822/week @ 2024-03-15 1337/week @ 2024-03-22 1469/week @ 2024-03-29 1365/week @ 2024-04-05 1639/week @ 2024-04-12 1460/week @ 2024-04-19 1100/week @ 2024-04-26 1142/week @ 2024-05-03 1362/week @ 2024-05-10 1530/week @ 2024-05-17 1135/week @ 2024-05-24 1133/week @ 2024-05-31 1276/week @ 2024-06-07 1231/week @ 2024-06-14 1775/week @ 2024-06-21 1037/week @ 2024-06-28

5,468次每月下载
用于 5 个Crates (直接使用2个)

Apache-2.0

50KB
859

Safe Path

CI

一个用于安全处理文件系统路径的库,通常用于容器运行时。

通常存在路径相关的攻击,例如基于符号链接的攻击,TOCTTOU攻击。`safe-path` crate提供了几个函数和实用结构来防止与路径解析相关的攻击。

支持

操作系统:

  • Linux

参考

许可证

此代码根据Apache-2.0许可证授权。


lib.rs:

一个用于安全处理文件系统路径的库,通常用于容器运行时。

Linux 挂载命名空间提供了对每个命名空间实例中进程看到的挂载列表的隔离。因此,每个挂载命名空间实例中的进程将看到不同的单目录层次结构。

容器用于从宿主机系统隔离工作负载。Linux系统上的容器依赖于挂载命名空间为每个容器构建一个独立的根文件系统,从而保护宿主机和容器之间的安全。在创建容器时,容器运行时需要为容器根文件系统/volume设置文件系统挂载。挂载/路径的配置可能通过以下方式由最终用户间接控制:

  • 容器镜像
  • Kubernetes pod规范
  • hook命令行参数

这些卷配置信息可能由最终用户/恶意攻击者控制,因此容器运行时不应该信任它们。当容器运行时为容器准备挂载命名空间时,它必须非常小心地验证用户输入的配置信息,并确保容器根文件系统目录之外的数据不会被容器所影响。与容器挂载命名空间相关的攻击类型包括

  • 基于符号链接的攻击
  • 检查时间到使用时间(TOCTTOU)

此crate为容器运行时提供了几种机制,以便在为容器准备挂载命名空间时安全地处理文件系统路径。

  • scoped_join():安全地将 unsafe_path 连接到 root,并确保 unsafe_pathroot 的作用域下。
  • 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],以便可以安全地用于其他操作。

这项工作受到了以下启发

依赖项

~43KB