Py学习  »  docker

CVE-2020-11492:Docker Windows桌面版权限提升漏洞

嘶吼专业版 • 3 年前 • 448 次点击  

研究人员发现Docker Windows 桌面版存在权限提升漏洞,该漏洞的根源在于Docker Desktop Service,该服务是Docker的主要Windows服务,作为客户端用命名管道来与子进程就行通信。

高权限的Docker Desktop Service可以被诱导来连接到恶意低权限进程建立的命名管道。一旦连接建立,恶意京城就可以伪装成Docker Desktop Service account (SYSTEM)并以最高权限来执行任意系统命令。

该漏洞CVE编号为CVE-2020-11492,最新的Docker Desktop版本已经修复了该漏洞。

漏洞分析

当Docker Windows桌面版安装后,就会安装一个名为Docker Desktop Service的Windows服务器。该服务是默认运行的,等待Docker Desktop应用来开启。Docker Desktop应用开启后,会创建多个子进程,允许对不同的Docker行为就行管理,比如docker镜像创建和监视进程等。

这是启动后的典型的Docker Desktop进程树:

应用启动子进程后,就会使用Windows命名管道作为进程通信(inter process communication, IPC)的一种形式。与TCP/IP类似,命名管道提供发送和接收数据的能力。在Docker中,会连接到命名管道中作为子进程之间通信的一种形式。

模拟也不是任何标准用户账户都可以执行的,而是一种分配给账户的特殊权限。这种特殊权限就叫做“Impersonate a client after authentication(认证后模拟客户端)”,是组策略编辑器中用户权限分配(User Rights Assignment)的一部分。下面是一些默认有模拟权限的账户列表:

· Administrators

• Local Service

• Network Service

• IIS AppPool Account

• Microsoft SQL Server Account

• Service

以上的许多账户都只有最小权限,比如Network Service对计算机资源的访问就非常有限。

Service Control Manager启动的所有都会自动获取模拟权限,无论是哪个账户开启了该服务。

模拟Dockmaster

当Docker Desktop启动后,会生成大量的子进程。当这些进程启动后,主Docker服务会让子进程为IPC通信创建命名管道。高权限服务就会以客户端的身份连接到这些命名空间。如果恶意代码可以在模拟权限的进程缓解下运行,就可以建立一个名为\\.\pipe\dockerLifecycleServer 的管道,并等待连接。

完整PoC视频如下所示:

https://www.youtube.com/embed/VYQm5L9zmTk

等待连接的PoC:

管道建立和监听后,就需要等待Docker Desktop开始和并连接到恶意管道。一旦docker连接后,就可以模拟连接的客户端(SYSTEM)权限,并启动一个使用CreateProcessWithTokenW API的新进程。

以SYSTEM启动的命令行:

补丁和修复

在最初漏洞提交后,Docker拒绝承认该漏洞。最终再次提交PoC后,Docker确认了这是一个安全漏洞并修复了该漏洞。在补丁中,当Docker服务进程连接到生成的子进程命名管道后,使用的是SecurityIdentification模拟级别。这允许管道获取客户端的身份和权限,但不允许模拟。

参考及来源:https://www.pentestpartners.com/security-blog/docker-desktop-for-windows-privesc-cve-2020-11492/

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/63526
 
448 次点击