今天圈子里又将一个漏洞炒到了高点,Docker Remote API未授权访问漏洞,之前这个漏洞就存在,只不过没有在内部被大肆公开而已。可能之前关注这部分的人并不集中,这个方法在圈子内也被看做“一个新姿势”,漏洞的影响直接可以获取服务器的ROOT权限,影响结果可想而知。
背景知识
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的LINUX机器上,也可以实现虚拟化。
Docker swarm 是一个将docker集群变成单一虚拟的docker host工具,使用标准的Docker API,能够方便docker集群的管理和扩展,由docker官方提供。
据了解该漏洞被发现的过程是:有一位同学在使用docker swarm的时候,发现了管理的docker 节点上会开放一个TCP端口2375(docker 节点不止会开放2375端口哦,2376等等都有可能啊!),绑定在0.0.0.0上,http访问会返回 404 page not found ,然后他研究了下,发现这是 Docker Remote API,可以执行docker命令,比如访问 http://host:2375/containers/json 会返回服务器当前运行的 container列表,和在docker CLI上执行 docker ps的效果一样,其他操作比如创建/删除container,拉取image等操作也都可以通过API调用完成,然后他就开始吐槽了,这尼玛太不安全了。
于是,我就用我们自己的广谱平台(SEER)搜了下全球2375端口的历史数据,惊呆了!!!竟然有近万的数据暴露在公网上,其中还不包括2376等其它端口的数据哦!
看看历史数据中国家和城市的分布情况,国内的情况也同样堪忧啊~
了解漏洞利用
执行docker命令,比如操作container、image等
那么如果当前运行的container,或者image内有代码或者其他敏感信息,就可以继续深入了,比如果壳和蜻蜓fm的漏洞,就是深入后的结果。还可以做内网代理,进一步渗透。
通过Docker还可以直接控制宿主机。
docker是以root权限运行的,但docker执行命令只能在container内部,与宿主机是隔离的,即使是反弹一个shell,控制的也是container,除非有0day,不然是无法逃逸的到宿主机的~
那么只能从docker命令本身下手,脑洞开了下,想到docker 运行 container的时候,可以将本地文件或目录作为volume挂载到container内,并且在container内部,这些文件和目录是可以修改的。
root权限进程,并且能够写文件,是不是似曾相识?
这里的场景和前段时间的 redis + ssh 漏洞很相似,那么这里需要看一下服务器是否有ssh服务,如果有的话,那么直接把/root/.ssh目录挂载到container内,比如/tmp/.ssh,然后修改/tmp/.ssh/authorized_keys 文件,把自己的public key写进去,修改权限为600,然后就可以以root用户登录了。
注:有些服务器会配置不允许root用户直接登录,可以通过挂载 /etc/ssh/sshd_config 查看配置。这个时候,你换一个用户目录写入就行,并且挂载修改 /etc/sudoers 文件,直接配置成免密码,sudo切换root即可。
如果没有运行ssh服务,那么也可以利用挂载写crontab定时任务,比如ubuntu root用户的crontab文件在 /var/spool/cron/crontabs/root,反弹一个shell~
建议的修复方案
1.简单粗暴的方法,对2375端口做网络访问控制,如ACL控制,或者访问规则;
2.修改docker swarm的认证方式,使用TLS认证:Overview Swarm with TLS 和 Configure Docker Swarm for TLS这两篇文档,说的是配置好TLS后,Docker CLI 在发送命令到docker daemon之前,会首先发送它的证书,如果证书是由daemon信任的CA所签名的,才可以继续执行。
漏洞判断方法
1.简单方法:看看Docker Remote API 是否绑定到了 0.0.0.0 且未开启验证机制;
2.绿盟WEB应用漏洞扫描系统(NSFOCUS WVSS)和远程安全评估系统(NSFOCUS RSAS)在第一时间内已经发布了相应的应急响应插件包 wvss-plg-V6.0R03F00.42.dat和rsas-vulweb-V6.0R02F00.0206.dat,请广大用户升级对应产品的插件包进行检测,降低自身的业务风险。
如果您需要了解更多内容,可以
加入QQ群:486207500
直接询问:010-68438880-8669