Comodo是一家位于美国的软件公司,总部设在新泽西州泽西城,成立于1998年,是世界著名的IT安全服务提供商和SSL证书的供应商之一。
研究人员在Comodo Antivirus / Comodo Antivirus Advanced等产品中发现多个漏洞,CVE编号为CVE-2019-3969、CVE-2019-3970、CVE-2019-3971、CVE-2019-3972、CVE-2019-3973。除CVE-2019-3973只影响11.0.0.6582及低版本外,其他漏洞都影响至12.0.0.6810版本。
CVE-2019-3969: CmdAgent.exe本地权限提升漏洞
CmdAgent.exe验证来自Cmdagent.exe的请求接口的COM客户端使用的是签名的二进制文件。攻击者可以通过修改PEB(Process Environment Block)中客户端的进程名或用恶意代码来process hollowing一个Comodo/Microsoft签名进程来绕过签名检查机制。这是因为CmdAgent的签名检查机制使用的来自COM客户端PID的EnumProcessModules / GetModuleFilename。只要通过可信的二进制文件检查,攻击者就可以获取IServiceProvider的实例。有了IServiceProvider,攻击者就可以查询到SvcRegKey 的接口通过Out-Of-Proc COM服务器来进行注册表表操作,以完成本地权限itself。
关于CVE-2019-3969漏洞的更多细节参见:https://medium.com/tenable-techblog/comodo-from-sandbox-to-system-cve-2019-3969-b6a34cc85e67
CVE-2019-3970: 任意文件写漏洞(修改AV签名)
Comodo将病毒定义数据库(virus definition database)保存在硬盘的受保护文件夹中,但Cavwp.exe可以以没有ACL的Global Section Objects来加载签名,允许低权限的进程在内存中进行修改。修改这一section object会修改Cavwp.exe翻译的AV定义,攻击者就可以创建假阳性结果或通过删除或修改数据库数据来绕过AV签名。
CVE-2019-3971: DoS (CmdVirth.exe)
DoS攻击发生在CmdVirth.exe的LPC端口cmdvrtLPCServerPort处。低权限的进程可以连接到该端口并发送LPC_DATAGRAM,由于用于memcpy source address(内存复制源地址)硬编码为NULL,因此会触发Access Violation。最终导致CmdVirth.exe和其子svchost实例终止。
CVE-2019-3972:越界读漏洞(CmdAgent.exe)
CmdAgent.exe会从名为"Global\{2DD3D2AA-C441-4953-ADA1-5B72F58233C4}_CisSharedMemBuff"的Section Object读取内容,这是everyone都可以写的Windows组。内存的内容为Comodo SharedMemoryDictionary结构。修改该结构数据会引发越界读,最终导致CmdAgent.exe奔溃。
CVE-2019-3973: 越界写漏洞(Cmdguard.sys)
Cmdguard.sys会暴露一个名为\cmdServicePort的过滤端口。一般来说只有CmdVirth.exe可以连接,而且MAX_CONNECTION(最大连接数)为1。但低权限的进程可以使CmdVirth.exe奔溃来减少端口的连接数,然后用恶意代码来process hollow一个CmdVirth.exe的副本来获取port handle。如果这些都发生了,然后用filtersendmessage API来发送一个精心伪造的消息给cmdServicePort,如果lpOutBuffer参数接近缓存边界,那么就会触发越界写漏洞。利用一个小的dwOutBufferSize(在lpOutBuffer边界范围内)就可以绕过ProbeForWrite检查,然后执行memset操作,将提供的地址设置为超出lpOutBuffer边界的0x734字节就会导致kernel crash。
目前Comodo还没有发布任何关于这些漏洞的补丁。
PoC
PoC代码见:https://github.com/tenable/poc/tree/master/Comodo