社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

嘶吼专业版 • 4 年前 • 656 次点击  

研究人员发现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
 
656 次点击