关于Docker Engine AuthZ 插件授权绕过漏洞 (CVE-2024-41110)

一、漏洞概述

漏洞名称:Docker Engine AuthZ 插件授权绕过漏洞 (CVE-2024-41110)

漏洞等级:高危

漏洞描述:DockerEngine是Docker的核心组件,是一 个开源的容器引擎,负责构建、运行和管理容器。Docker Engine 的 AuthZ 插件是一种用于实现Docker访问控制机制 的插件,可以实现对Docker API的细粒度访问控制,增强 Docker 的安全性。当配置为使用AuthZ插件时存在授权绕过 漏洞,威胁者可以通过将 Content-Length 设置为 0 的 API 请求来利用该漏洞,导致 Docker 守护进程将没有正文 的请求转发给AuthZ 插件,AuthZ插件可能会错误地批准该 请求,从而导致执行未授权操作,如权限提升等。

二、影响范围

Docker Engine >= v19.03.x 且使用AuthZ 插件的用户 易受该漏洞影响,不使用AuthZ插件或运行旧版 Docker Engine 的用户不易受到影响,以下产品可能包含受影响的 Docker Engine 版本:

  Docker-CE <= v19.03.15
  Docker-CE <= v20.10.27
  Docker-CE <= v23.0.14
  Docker-CE <= v24.0.9
  Docker-CE <= v25.0.5
  Docker-CE <= v26.0.2
  Docker-CE <= v26.1.4
  Docker-CE <= v27.0.3
  Docker-CE <= v27.1.0
  Docker Desktop <= v4.32.0

注:Docker Engine 的 AuthZ 插件在DockerCE或Docker Desktop 中通常是可选插件。Docker EE v19.03.x 和 Mirantis Container Runtime 所有版本不受该漏洞影响

三、修复建议

升级版本 目前该漏洞已经修复,受影响用户可升级到以下版本: Docker Engine:升级到最新修复版本。 Docker-CE:升级到v27.1.1 及更高版本,或升级到相应分支版本的补丁版本。 Docker Desktop:升级到Docker Desktop 4.33(暂未发布)或更高版本。

下载链接: https://download.docker.com/linux/

临时措施 如无法立即更新,可实施以下缓解措施:

1.避免使用 AuthZ 插件。

2.确保只有受信任的实体能够访问DockerAPI,并遵循 最小权限原则。

参考链接: https://github.com/moby/moby/security/advisories/GHSA-v23v-6jw2-98fq

四、扩展信息

Moby 项目与 Docker 的关系
  • Docker 与 Moby: Docker 项目最初是从 Moby 项目中分离出来的,但后来两者之间的界限变得模糊。实际上,Docker 现在使用 Moby 项目中的组件作为其核心部分。

  • Docker CE: Docker Community Edition (CE) 是基于 Moby 项目构建的,它包含了 Moby 项目中的核心组件。

  • Moby 项目的独立性: Moby 项目可以独立于 Docker 运行,这意味着您可以使用 Moby 项目中的组件构建自己的容器化解决方案。

我们无法从Docker 产品发版信息处看到修复“CVE-2024-41110”的信息,但是从最新版本Moby可以看到修复了该漏洞,Moby的最新版本是25.0.6,而Docker CE的最新版本是v27.1.1。

Docker的插件

https://docs.docker.com/engine/extend/legacy_plugins/

Docker没有自己设计一套权限管理机制,而是设计了一套权限管理插件的机制,允许第三方的开发者自行设计权限管理的架构、模型、策略格式,然后通过统一的插件接口接入Docker,为Docker提供权限管理的服务。

Docker设计定义了Network plugins、Volume plugins、Authorization plugins三类插件的接口。插件的实现由第三方来完成。本次漏洞涉及的插件就是Authorization plugins,从官网信息上可知,有两类AuthZ实现。本次漏洞应该不是第三方插件实现本身有漏洞,否则也不会跟Docker Engine有关,应该是Docker定义的接口的漏洞。所以,不配置插件,也不会触发漏洞。

这里需要介绍一下Casbin项目。Casbin是一个国产开源项目,专注于解决Go语言中的权限管理问题。Casbin由北京大学罗杨博士在2017年4月发起,罗杨博士的研究方向为云计算访问控制,目前已发表数十篇相关学术论文,曾经在ICWS、IEEE CLOUD、ICICS等多个顶级学术会议进行论文宣讲。Casbin项目则是其研究成果的落地。Casbin(https://github.com/casbin/casbin)作为目前Golang语言中最主流的访问控制、权限管理开源库,也实现了一个Docker的Authorization Plugin,叫做:Casbin-authz-plugin

另外,默认Docker并不会开启远程访问,只通过本机的socket,接受Docker命令访问。而Authorization plugins,不只是进行远程访问控制,对本地docker命令也会进行控制。例如定义了访问控制策略之后:

https://github.com/casbin/docker-casbin-plugin

 basic_policy.csv
 p, /v1.27/images/json, GET

上面的策略表示:grants anyone to perform GET on /v1.27/images/json,and deny all other requests. 所以效果如下:

 $ docker images
 REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
 hello-world         latest              48b5124b2768        3 months ago        1.84 kB
 ​
 $ docker info
 Error response from daemon: authorization denied by plugin casbin-authz-plugin: Access denied by casbin plugin

Docker 是否安装插件,可以通过 docker plugins ls查看,或者直接查看如下路径:

/run/docker/plugins

/etc/docker/plugins

/usr/lib/docker/plugins

https://docs.docker.com/engine/extend/plugins_authorization/

本来打算安装一下插件,但是需要FanQ(你懂的~~),就打消了这个念头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值