【Critical】docker unauthorized 2375

bash 复制代码
Description
Utilizing Docker via unprotected tcp socket (2375/tcp, maybe 2376/tcp with tls but without tls-auth), an attacker can create a Docker container with the '/' path mounted with read/write permissions on the host server that is running the Docker container. As the Docker container executes command as uid 0 it is honored by the host operating system allowing the attacker to edit/create files owned by root. This exploit abuses this to creates a cron job in the '/etc/cron.d/' path of the host server. The Docker image should exist on the target system or be a valid image from hub.docker.com.
Impact
Unauthorized users can directly access all information in the database, causing serious information leakage.
Solution
Bind 2375 to 127.0.0.1

一、问题描述

这个漏洞描述了通过未保护的 Docker TCP 套接字(2375/tcp,可能是 2376/tcp 但没有启用 TLS 身份验证)来攻击,攻击者可以创建一个 Docker 容器并将宿主机的根路径 (/) 挂载到容器中,且容器有读写权限。由于容器中的进程通常以 uid 0(即 root 用户身份)运行,攻击者可以利用这一点修改宿主机上的文件,创建一个 cron 任务等恶意操作,进一步持久化攻击。

二、攻击过程:

  1. 暴露的 Docker 套接字: Docker 的 API 可以通过 TCP 端口(如 2375/2376)暴露。如果这些端口没有适当的身份验证机制,攻击者可以远程访问 Docker Daemon。
  2. 挂载宿主机的根目录 (/): 攻击者可以将宿主机的根文件系统挂载到容器中,从而获取对宿主机的完全访问权限。如果容器以 root 权限运行,攻击者就能修改宿主机上的文件,包括关键系统文件(如 /etc/cron.d/)。
  3. 持久化操作: 攻击者可以修改宿主机的定时任务(cron)配置文件等,从而让恶意命令在宿主机上定期执行,维持对宿主机的控制。

三、解决方案:

1. 保护 Docker 套接字(2375/2376 端口):

  • **禁用远程 Docker API 访问:**如果没有特定需要,应该完全禁用通过 TCP 暴露 Docker 的功能。将 Docker 只绑定到 Unix 套接字(/var/run/docker.sock),这样可以减少暴露风险。
  • **启用 TLS 加密:**如果必须远程访问 Docker API,确保启用 TLS 加密,并要求客户端认证。可以配置 Docker 在 2376 端口上启用 TLS 加密。
    配置 Docker 启动时启用 TLS(假设已设置证书):
bash 复制代码
DOCKER_OPTS="--host=tcp://0.0.0.0:2376 --tlsverify --tlscert=/etc/docker/cert.pem --tlskey=/etc/docker/key.pem --tlscacert=/etc/docker/ca.pem"

这样可以确保只有持有有效证书的客户端能够连接到 Docker 服务。

2. 限制容器权限:

  • 避免容器以 root 用户运行: 除非绝对必要,否则应避免以 root 用户运行 Docker 容器。可以通过在 Dockerfile 中设置 USER 指令,或在启动容器时使用 --user 参数指定运行的非 root 用户。
  • 使用 Docker 安全配置:
    • AppArmor 或 SELinux:使用 AppArmor(Ubuntu)或 SELinux(CentOS/RHEL)对容器进行安全策略的约束,限制容器的权限。
    • Seccomp: Docker 提供了内置的 Seccomp 配置文件,可以限制容器可调用的系统调用。建议使用默认的 Seccomp 配置文件,或者根据需要定义更严格的配置文件。

3.限制对 Docker Daemon 的访问:

  • -Unix 套接字权限: 限制 /var/run/docker.sock 的权限,只允许必须的用户(通常是 root 或 docker 组的成员)访问 Docker 套接字。
  • 防火墙限制: 如果必须启用 TCP 访问,可以使用防火墙(例如 iptables)限制访问 Docker 套接字的 IP 地址或子网。

4.监控 Docker 容器活动:

  • Docker 内容信任(DCT): 使用 Docker 内容信任来签署和验证 Docker 镜像,防止使用未验证的镜像。
  • 监控容器活动: 使用如 Docker 审计日志 等工具,或使用第三方监控解决方案(如 Falco、Aqua Security、Sysdig)来实时检测不安全的行为。

5.将 Docker 放在隔离环境中:

  • 使用虚拟机或容器内容器: 考虑将 Docker 运行在虚拟机中,或使用更强的隔离机制来限制攻击的传播。
  • 只读文件系统: 对关键文件(如 /etc)使用 Docker 挂载时设置为只读,防止容器修改宿主机上的重要文件。

6. 定期更新 Docker 和宿主操作系统:

  • 确保 Docker 和宿主操作系统的安全更新,及时修复已知的漏洞。
  • 使用 Docker 的最新版本,避免使用存在已知漏洞的旧版本。

Docker 安全命令示例:
1、禁用远程访问(只绑定到 Unix 套接字):

编辑 /etc/docker/daemon.json:

bash 复制代码
{
  "hosts": ["unix:///var/run/docker.sock"]
}

然后重启 Docker:

bash 复制代码
sudo systemctl restart docker

2、以非 root 用户运行容器:

例如,运行容器时指定用户:

bash 复制代码
docker run --user 1001:1001 myimage

3、使用 SELinux 或 AppArmor 配置:

运行容器时使用 --security-opt 指定安全配置文件:

bash 复制代码
docker run --security-opt seccomp=default.json myimage

4、设置 Docker 套接字权限:

限制对 /var/run/docker.sock 的访问:

bash 复制代码
sudo chmod 660 /var/run/docker.sock
sudo chown root:docker /var/run/docker.sock
相关推荐
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy5 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭5 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩6 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵6 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1117 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽8 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康9 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn8612 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
JLWcai2025100913 天前
铸造领域树脂砂轮|金利威多场景解决方案,20 + 配方覆盖全需求
mongodb·zookeeper·eureka·spark·rabbitmq·memcached·storm