Docker所有版本都中招!重大漏洞允许攻击者获得主机 root 访问权限
发布时间:
2019-05-31 09:45
Docker当前的所有版本均存在该漏洞,该漏洞导致攻击者可对宿主机上对任何路径进行读写访问。该漏洞是docker竞争条件导致(Race Condition)的,目前docker官方已经给出修补补丁,但未集成进系统。
该漏洞是docker软件本身操作宿主机的一些符号链接文件导致,这些符号链接文件可以访问其他的目录和文件。安全研究员Aleksa Sarai发现在一些场景下,攻击者可以在路径解析时间和操作时间之间的极短的时间窗口将自己的符号链接插入到路径中。该漏洞TOCTTOU问题的一个变种,特别是“docker cp”命令,它可以将文件从主机复制到容器,或从容器复制到主机。
该漏洞利用的前提是FollowSymlinkInScope(一个docker源码中的类)遭受到TOCTTOU攻击。FollowSymlinkInScope的任务是让进程感觉像在容器里,获取给定路径并安全地解析。完整路径被解析出来之后,解析出来的路径要被传进docker,然后稍后才会被执行。
如果攻击者可以在路径解析出来后,未被操作之前将符号链接组件添加到路径,那么攻击者最终可能会以root用户身份解析主机上的符号链接路径组件。在“docker cp”的情况下,这使攻击者可以对主机上的任何路径进行读写访问。
POC下载地址:
https://www.openwall.com/lists/oss-security/2019/05/28/1/1
文档类型 [application/x-xz]
https://www.openwall.com/lists/oss-security/2019/05/28/1/2
文档类型 [application/pgp-signature]
如何修复:
安全研究员Aleksa Sarai已经提交了针对该漏洞的修复建议,其中包括在使用文件系统时暂停容器。这个问题最完整的解决方案是修改 chrootarchive,这样所有的存档操作都将以根目录作为容器 rootfs 进行 (而不是父目录,因为父目录是由攻击者控制的,所以导致了这个漏洞)。不过,要对 Docker 核心部分做更改几乎是不可能完成的事情。退而求其次,可以在使用文件系统时暂停容器。这种方法能够阻止最基本的攻击,但是在某些攻击场景下无法发挥作用,例如 shared volume mounts。目前cyphar为了解决更安全地解析不受信任根中的路径,正在研究一些新的内核特性。并且考虑添加 filepath-securejoin
的支持来解决该问题。
备注:
1、TOCTOU解释:代码先检查某个前置条件(例如认证),然后基于这个前置条件进行某项操作,但是在检查和操作的时间间隔内条件却可能被改变,如果代码的操作与安全相关,那么就很可能产生漏洞。这种安全问题也被称做TOCTTOU(time of check and the time of use)
2、Race Condition中文翻译是竞争条件,是指多个进程或者线程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关的现象。换句话说,就是线程或进程之间访问数据的先后顺序决定了数据修改的结果,这种现象在多线程编程中是经常见到的。
参考链接:
[1]: https://github.com/docker/docker/pull/39252
[2]: https://bugzilla.suse.com/show_bug.cgi?id=3D1096726
[3]: https://github.com/docker/docker/pull/5720
[4]: https://github.com/docker/docker/pull/6000
[5]: https://github.com/cyphar/filepath-securejoin
[6]:https://bugzilla.suse.com/show_bug.cgi?id=1096726
[7]: https://www.openwall.com/lists/oss-security/2019/05/28/1
上一页
下一页
上一页
下一页