Apptainer安全漏洞深度解析:SELinux与AppArmor配置失效的技术细节与修复方案

本文详细分析了CVE-2025-65105漏洞的技术细节,该漏洞影响Apptainer容器平台,导致通过--security参数配置的SELinux和AppArmor安全限制可能被恶意容器绕过。文章涵盖了漏洞原理、技术架构、修复方案以及相关的安全补丁信息。

CVE-2025-65105 - Apptainer无效应用selinux和apparmor –security选项

漏洞概述

CVE-2025-65105是Apptainer容器平台中的一个安全漏洞,影响1.4.5之前的所有版本。该漏洞导致通过--security选项配置的SELinux和AppArmor安全限制可能无法正确应用于容器进程,从而使预期的安全限制失效。

技术细节

漏洞原理

Apptainer是一个开源容器平台,支持通过--security=apparmor:<profile>--security=selinux:<label>参数为容器进程应用Linux安全模块(LSM)限制。这些限制本应通过对容器内/proc文件系统的写操作来实现。

然而,在受影响版本中,恶意容器可以通过以下方式绕过这些安全限制:

  1. 挂载重定向攻击:攻击者可以构造恶意容器镜像,将/proc挂载重定向到共享挂载的目标位置
  2. 写入操作劫持:当Apptainer尝试向/proc/self/attr/exec写入LSM标签时,这些写入可能被重定向到无效位置(如/proc/self/sched),导致安全配置静默失效
  3. 符号链接攻击:通过符号链接重定向/proc路径,绕过安全检查

技术架构影响

该漏洞涉及Apptainer的多个安全子系统:

  1. SELinux集成:在RHEL-based发行版上默认启用
  2. AppArmor集成:在Debian-based发行版上默认启用
  3. 安全配置流程:涉及security.Configure()函数的执行流程
  4. 进程标签写入机制:通过/proc文件系统接口应用LSM限制

漏洞严重性

CVSS 3.1评分为4.5(中等),攻击向量为本地(AV:L),需要高攻击复杂度(AC:H)和用户交互(UI:R)。漏洞关联的CWE包括:

  • CWE-61:UNIX符号链接跟随
  • CWE-706:使用错误解析的名称或引用

修复方案

补丁详情

该漏洞已在Apptainer 1.4.5版本中修复,主要修复包括:

  1. 提交4313b42:修复AppArmor配置文件写入问题

    • 使用pathrs-lite/procfs确保向真实的/proc文件系统写入
    • 防止写入操作被重定向到无效位置
    • 关键代码更改:使用procfs.OpenProcRoot()proc.OpenThreadSelf("attr/exec")替代直接的os.OpenFile("/proc/self/attr/exec", ...)
  2. 提交82f1790:修复安全选项应用失败处理

    • 当请求的安全选项无法应用时,将警告升级为致命错误
    • 确保安全配置失败时容器不会继续执行
    • 影响security.Configure()函数中对SELinux和AppArmor的检测逻辑
  3. 拉取请求#3226:更新opencontainers依赖项

    • 更新containers/selinux依赖以包含上游修复
    • 解决GHSA-cgrx-mc8f-2prm中相关漏洞的修复

修复代码示例

以下是修复后的关键代码片段:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 修复后的AppArmor配置文件加载函数
func LoadProfile(profile string) error {
    // 使用安全的procfs API确保写入真实的procfs文件
    proc, err := procfs.OpenProcRoot()
    if err != nil {
        return err
    }
    defer proc.Close()
    
    attrExec, closer, err := proc.OpenThreadSelf("attr/exec")
    if err != nil {
        return err
    }
    defer closer()
    defer attrExec.Close()
    
    f, err := pathrs.Reopen(attrExec, unix.O_WRONLY|unix.O_CLOEXEC)
    if err != nil {
        return err
    }
    // ... 其余代码保持不变
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// 修复后的安全配置错误处理
func Configure(config *specs.Spec) error {
    if config.Process.SelinuxLabel != "" {
        if selinux.Enabled() {
            if err := selinux.SetExecLabel(config.Process.SelinuxLabel); err != nil {
                return err
            }
        } else {
            // 从警告改为致命错误
            return fmt.Errorf("selinux requested, but is not enabled or supported on this system")
        }
    }
    // ... 类似处理AppArmor和seccomp
}

相关漏洞

上游依赖漏洞

  1. runc中的GHSA-cgrx-mc8f-2prm(CVE-2025-52881)

    • 类似的/proc写入重定向问题
    • 可能被用于容器逃逸和拒绝服务攻击
    • 影响runc 1.2.8、1.3.3和1.4.0-rc.3之前的版本
  2. Singularity中的GHSA-wwrx-w7c9-rf87

    • Singularity容器平台的类似问题
    • 影响SingularityCE 4.3.5和SingularityPRO 4.1.11/4.3.5之前的版本

攻击模式(CAPEC)

与该漏洞相关的常见攻击模式包括:

  • CAPEC-27:通过符号链接利用竞争条件
  • CAPEC-48:将本地文件名传递给期望URL的函数
  • CAPEC-159:重定向对库的访问
  • CAPEC-177:创建与受保护文件同名的文件
  • CAPEC-641:DLL侧加载攻击

影响范围与缓解措施

受影响版本

  • Apptainer所有低于1.4.5的版本

修复建议

  1. 立即升级:将Apptainer升级到1.4.5或更高版本
  2. 配置验证:验证安全选项配置是否按预期工作
  3. 权限限制:对非特权用户应用适当的限制
  4. 监控警告:关注容器运行时的安全警告信息

替代方案

  1. 系统级LSM策略:定义系统范围的AppArmor/SELinux策略
  2. 根容器限制:注意该漏洞主要影响非特权用户容器
  3. 安全审计:定期审计容器安全配置和运行环境

总结

CVE-2025-65105暴露了容器运行时在应用Linux安全模块限制时存在的深层次安全问题。通过精心构造的挂载重定向攻击,恶意容器可以绕过预期的安全限制,使安全配置失效而不会引起明显错误。

该漏洞的修复强调了在容器安全实现中需要更加严格的路径验证和错误处理机制。安全配置失败应当导致明确的错误和操作中止,而不是静默降级。容器平台开发者需要从该漏洞中吸取教训,加强对/proc文件系统操作的安全检查,防止类似的安全绕过问题。

对于用户而言,及时更新容器运行时、验证安全配置的有效性,以及实施深度防御策略,是保护容器环境安全的关键措施。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计