## CVE-2014-3499 docker.socket world accessible
## 漏洞类型
设计错误 本地权限提升
## 漏洞分析
Docker 1.0.0使用全局可读可写的管理套接字,这种设计会允许本地用户利用写套接字,获得特殊的权限。
## 具体分析
docker.socket 在docker 1.0.0版本时,并没有限制读写socket的权限,导致本地用户任何socket读写都能够完成。
本地用户使用构造的恶意请求写入到socket中会导致root权限执行任意代码。
## 具体过程
在init/systemd中, docker.socket是指/var/run/docker.sock这个管理套接字,主要作用为docker client与docker deamon通信提供支持。在docker中,整个命令的传输全部都依靠socket,在管理套接字的读写问题上,如果可以读写管理套接字
那么docker client与docker deamon的信息流都可以读取和伪造,并可以构造相应的数据包来让deamon执行相关的命令。
关于为什么docker需要root权限的问题,可见[Why we don't let non-root users run Docker in CentOS, Fedora, or RHEL](http://www.projectatomic.io/blog/2015/08/why-we-dont-let-non-root-users-run-docker-in-centos-fedora-or-rhel/)
## 漏洞验证方式
docker 版本小于1.0.0均存在
## 影响版本
docker version <= 1.0.0
## 修复方案
官方限制了套接字的权限:
在文件contrib/init/systemd/socket-activation/docker.socket配置中
[Socket]
ListenStream=/var/run/docker.sock
# 对socket的权限进行了控制
+SocketMode=0660
+SocketUser=root
+SocketGroup=docker
[Install]
WantedBy=sockets.target
详情,可见[Fix the systemd socket activation socket permissions](https://github.com/docker/docker/pull/6873/files)
## 参考链接
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3499
- https://github.com/docker/docker/issues/6836
暂无评论