研究人员发现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/如若转载,请注明原文地址: