Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-31133 — CVE-2025-31133 PoC | Kitploit
工具/GitHubGitHub/skynet-f-nvidia/cve-2025-31133
权限提升漏洞分析漏洞利用渗透测试红队容器逃逸
GitHubskynet-f-nvidia/cve-2025-31133

CVE-2025-31133

CVE-2025-31133 PoC

查看仓库
212210个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2025-31133 PoC 利用

本文档说明所提供的 runc 漏洞 CVE-2025-31133 的 Proof-of-Concept (PoC) 脚本的功能。

摘要

  • 漏洞: CVE-2025-31133 - runc 中 maskedPaths 处理的一个符号链接条件竞争漏洞。
  • 影响: 恶意容器可以绕过 maskedPaths 的保护,从而允许写入宿主机上的敏感文件。这构成了一次容器逃逸。
  • PoC 目标: 安全地演示漏洞:从容器内部修改宿主机的 /proc/sys/kernel/core_pattern 文件。
  • 安全性: 此 PoC 是非破坏性的。它仅向目标文件写入字符串 "pwned",并且不在宿主机上执行任意代码。它还提供了恢复原始值的说明。

漏洞解释

容器的 OCI 规范 (config.json) 中的 maskedPaths 功能是一种安全机制,旨在防止容器访问敏感的宿主系统文件。其工作原理是将 /dev/null(一个空设备文件)通过绑定挂载覆盖容器内的敏感路径,从而使其无法读取和写入。

漏洞 (CVE-2025-31133) 是一个检查时间到使用时间 (TOCTOU) 的竞争条件。利用过程如下:

  1. 缺陷: 当 runc 设置容器时,它准备使用容器根文件系统中的 dev/null 文件作为绑定挂载的源,以遮蔽敏感路径(例如 /proc/sys/kernel/core_pattern)。
  2. 竞争窗口: 在 runc 解析 rootfs/dev/null 的路径与实际执行挂载操作之间存在一个短暂的时间窗口。
  3. 利用: 攻击者可以在宿主机上创建一个脚本,持续且快速地交换 rootfs/dev/null 文件,使其在合法的设备节点和指向宿主机目标文件 (/proc/sys/kernel/core_pattern) 的符号链接之间切换。
  4. 赢得竞争: 如果时机完美,runc 会在 rootfs/dev/null 恰好是符号链接的那一刻执行挂载操作。这导致内核跟随符号链接,从而针对 /proc/sys/kernel/core_pattern 的预期遮蔽操作失败。
  5. 容器逃逸: 由于遮蔽失败,容器内的路径不再受保护。在容器内运行的进程现在可以写入 /proc/sys/kernel/core_pattern,这会直接修改宿主机的文件,实现容器逃逸。

此 PoC 利用此技术写入 /proc/sys/kernel/core_pattern,这是一个常见的目标,因为修改它可以在进程崩溃时导致宿主机上执行任意代码。然而,此 PoC 仅写入一个无害字符串,以证明写入原语的存在。


PoC 脚本工作原理

poc.sh 脚本自动执行上述整个过程。

  1. 设置与清理:

    • 定义 runc 二进制、容器名称和根文件系统路径的变量。
    • 包含一个健壮的 cleanup 函数,确保删除脚本先前创建的任何容器或文件。该函数在退出、中断或终止时自动调用。
  2. 准备:

    • 将宿主机 /proc/sys/kernel/core_pattern 的原始内容保存到一个临时文件中。稍后用于验证利用是否成功,并帮助用户恢复系统。
    • 创建一个最小的容器根文件系统 (./rootfs) 和一个 config.json 文件。
    • config.json 在 maskedPaths 中显式列出 /proc/sys/kernel/core_pattern——这正是该利用试图绕过的功能。
  3. 竞争函数 (symlink_race)

    • 这是利用的核心。它设计为在后台运行。
    • 进入一个持续 20 秒的紧密循环。
    • 在循环内部,它重复执行:
      1. 删除 rootfs/dev/null。
      2. 创建一个从 rootfs/dev/null 到目标宿主机文件 (/proc/sys/kernel/core_pattern) 的符号链接。
      3. 暂停一小段时间(500 微秒)。
      4. 删除符号链接。
      5. 使用 mknod 将 rootfs/dev/null 重新创建为一个正确的字符设备。
      6. 暂停稍长一点的时间(5000 微秒)。
    • 这种快速切换为竞争条件的发生创造了机会窗口。
  4. 执行:

    • symlink_race 函数作为后台进程启动。
    • 紧接着,脚本执行 runc run ... 来创建并启动容器。这是 runc 尝试应用 maskedPaths 的时刻。
    • 容器运行后,脚本使用 runc exec 在容器内部执行命令:echo 'pwned' > /proc/sys/kernel/core_pattern。
  5. 验证:

    • 脚本等待后台竞争进程结束并清理容器。
    • 然后读取宿主机 /proc/sys/kernel/core_pattern 的当前内容。
    • 将当前内容与预期的 "pwned" 字符串以及原始值进行比较。
    • 根据结果,打印清晰的 [+] EXPLOIT SUCCEEDED! 或 [-] Exploit did not succeed. 消息。

使用方法

前提条件:

  • 存在漏洞版本的 runc。
  • 已安装 busybox-static(用于容器的 Shell)。
  • 拥有 root 权限 (sudo) 以运行 runc 和修改 /proc。

步骤:

  1. 将脚本保存为 poc.sh。
  2. 赋予执行权限:chmod +x poc.sh。
  3. 使用 sudo 运行:sudo ./poc.sh。

解释输出

  • 成功: 如果看到 [+] EXPLOIT SUCCEEDED! 消息,说明竞争条件获胜。宿主机上的 /proc/sys/kernel/core_pattern 已成功从容器内部被修改,确认了漏洞存在。
  • 失败: 如果看到 [-] Exploit did not succeed.,表示本次尝试未赢得竞争。竞争条件是概率性的,严重依赖于系统时序和负载。请多运行几次脚本。

恢复系统(成功运行后)

PoC 会修改一个系统文件。要将其恢复为原始状态,请运行脚本提示的命令:

# 原值 'ORIGINAL_PATTERN' 将是你系统中的实际值
echo 'original_core_pattern_value' | sudo tee /proc/sys/kernel/core_pattern
下载工具