IPBUF安全漏洞报告
English
CVE-2024-25621 CVSS 7.3 高危

CVE-2024-25621 containerd 默认目录权限过宽导致权限提升漏洞

披露日期: 2025-11-06

漏洞信息

漏洞编号
CVE-2024-25621
漏洞类型
权限配置错误
CVSS评分
7.3 高危
攻击向量
本地 (AV:L)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
containerd

相关标签

containerd权限配置错误容器安全权限提升本地攻击容器逃逸CVE-2024-25621Linux特权提升默认权限过宽

漏洞概述

containerd是一个开源容器运行时,在0.1.0至1.7.28版本、2.0.0-beta.0至2.0.6版本、2.1.0-beta.0至2.1.4版本以及2.2.0-beta.0至2.2.0-rc.1版本中存在默认权限配置过宽的安全漏洞。漏洞源于containerd在创建关键目录时设置了不正确的文件权限,导致本地低权限用户能够访问和修改containerd运行时的核心数据目录。具体受影响的目录包括/var/lib/containerd、/run/containerd/io.containerd.grpc.v1.cri和/run/containerd/io.containerd.sandbox.controller.v1.shim。这些目录可能被配置为允许组或其他用户具有读、写或执行权限,使得攻击者能够绕过容器隔离限制,访问宿主机文件系统或修改容器配置。成功利用此漏洞可导致机密性、完整性和可用性均受到高影响,攻击者可从容器内提升权限至宿主机root级别,或窃取敏感数据如密钥、证书和其他容器的配置信息。

技术细节

该漏洞的根本原因在于containerd在初始化时创建的目录权限设置过于宽松。在Linux系统中,文件权限由三位八进制数表示,分别控制所有者、所属组和其他用户的读、写、执行权限。containerd的某些版本在创建/var/lib/containerd、/run/containerd/io.containerd.grpc.v1.cri和/run/containerd/io.containerd.sandbox.controller.v1.shim目录时,使用了如777或类似允许组和其他用户访问的权限模式,而非遵循最小权限原则设置为700或750。攻击者作为本地低权限用户,只需具备用户交互(如运行恶意脚本或访问特定路径),即可利用过宽的目录权限访问containerd的socket文件、配置文件和容器状态数据。通过修改这些文件或利用containerd API,攻击者能够实现容器逃逸或权限提升至root级别。攻击者还可利用对run目录的访问权限与containerd的shim进程进行交互,进而执行任意代码。

攻击链分析

STEP 1
步骤1
攻击者获得容器内低权限用户访问权限,或通过社会工程诱导宿主机用户执行恶意操作
STEP 2
步骤2
攻击者检查containerd相关目录权限,发现/var/lib/containerd或/run/containerd目录存在过宽权限(如777或76x)
STEP 3
步骤3
攻击者利用过宽权限访问containerd socket文件和配置文件,读取容器密钥、证书或认证信息
STEP 4
步骤4
通过修改containerd配置或利用shim进程接口,攻击者向containerd daemon发送恶意请求
STEP 5
步骤5
利用containerd API创建恶意容器或修改现有容器配置,实现从容器到宿主机的权限提升
STEP 6
步骤6
攻击者获得宿主机root权限,可完全控制整个系统及运行在该宿主机上的所有容器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/bin/bash # CVE-2024-25621 PoC - containerd Permission Vulnerability # Check if containerd directories have overly permissive permissions echo "[*] Checking containerd directory permissions..." echo "[*] Target: CVE-2024-25621 - containerd Default Permission Vulnerability" echo "" # Affected paths PATHS=("/var/lib/containerd" "/run/containerd/io.containerd.grpc.v1.cri" "/run/containerd/io.containerd.sandbox.controller.v1.shim") VULNERABLE=false for path in "${PATHS[@]}"; do if [ -d "$path" ]; then echo "[+] Found directory: $path" perms=$(stat -c '%a' "$path" 2>/dev/null) echo " Permissions: $perms" # Check if group or others have write permission group_write=$(echo "$perms" | cut -c2) other_write=$(echo "$perms" | cut -c3) if [ "$group_write" -ge 2 ] || [ "$other_write" -ge 2 ]; then echo " [!] VULNERABLE: Group or others have write access" VULNERABLE=true elif [ "$group_write" -ge 4 ] || [ "$other_write" -ge 4 ]; then echo " [!] WARNING: Group or others have read access" fi # Check ownership and list contents owner=$(stat -c '%U:%G' "$path" 2>/dev/null) echo " Owner: $owner" echo " Contents:" ls -la "$path" 2>/dev/null | head -10 echo "" else echo "[-] Directory not found: $path" fi done if [ "$VULNERABLE" = true ]; then echo "[CRITICAL] System is VULNERABLE to CVE-2024-25621" echo "[*] Recommendation: Upgrade containerd to version 1.7.29, 2.0.7, 2.1.5, or 2.2.0+" echo "[*] Workaround: chmod 700 or 750 on affected directories" else echo "[+] System appears to be NOT vulnerable" fi echo "" echo "[*] Checking containerd version..." containerd --version 2>/dev/null || echo "containerd not found in PATH"

影响范围

containerd 0.1.0 - 1.7.28
containerd 2.0.0-beta.0 - 2.0.6
containerd 2.1.0-beta.0 - 2.1.4
containerd 2.2.0-beta.0 - 2.2.0-rc.1

防御指南

临时缓解措施
如果无法立即升级containerd版本,系统管理员应手动修改containerd相关目录的权限,确保/var/lib/containerd、/run/containerd/io.containerd.grpc.v1.cri和/run/containerd/io.containerd.sandbox.controller.v1.shim目录不允许组或其他用户具有访问权限。建议执行以下命令:chmod 700 /var/lib/containerd && chmod 700 /run/containerd && chmod 700 /run/containerd/io.containerd.grpc.v1.cri && chmod 700 /run/containerd/io.containerd.sandbox.controller.v1.shim。另外,可考虑使用rootless containerd模式运行容器,以减少权限提升风险。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表