6 月初,被广泛使用的 GNU C Library (glibc) 发布补丁修复了一个相对较小的安全漏洞(CVE-2021-33574)。修复安全问题本应是一件好事,但不幸的是,这个安全补丁引入了一个新的且更严重的漏洞(CVE-2021-38604)。
红帽软件工程师 Siddhesh Poyarekar 表示,如果攻击者想利用最初的安全漏洞来发起最小的攻击,他需要许多先决条件才可以利用漏洞来使程序崩溃。尽管如此,既然发现了安全漏洞就需要被解决。
然而 glibc 在打上修复此安全漏洞的补丁后,引起了更严重且更容易被利用的漏洞。在检查补丁时,来自 CloudLinux TuxCare 团队的 Nikita Popov 发现了问题,新的漏洞有可能导致在库内出现触发段错误 (segmentation fault) 的情况,从而导致任何使用 glibc 库的程序崩溃,产生拒绝服务 (DoS) 问题。更重要的是,这个漏洞比旧的漏洞更容易触发。
红帽在其通用漏洞评分系统 (CVSS) 中给这个漏洞打了 7.5 分,此分数已经属于“高分”,意味着使用该漏洞的攻击很容易构建并且不需要特权。
此漏洞因上游的修复补丁而被引入,尤其是 mq_notify.c 文件:
@@ -133,8 +133,11 @@ helper_thread (void *arg)
(void) __pthread_barrier_wait (¬ify_barrier);
}
else if (data.raw[NOTIFY_COOKIE_LEN - 1] == NOTIFY_REMOVED)
- /* The only state we keep is the copy of the thread attributes. */
- free (data.attr);
+ {
+ /* The only state we keep is the copy of the thread attributes. */
+ pthread_attr_destroy (data.attr);
+ free (data.attr);
+ }
Nikita Popov 在执行“将 CVE-2021-33574 的安全补丁移植到所支持的发行版的常规程序”时发现了这个问题,他发现在某些情况下可以传递空指针。
Nikita Popov 认为,glibc 提供了主要的系统原语 (system primitives),并与大多数其他 Linux 应用程序相关联,包括其他语言编译器和解释器。它是系统中仅次于内核的第二个最重要的组件,所以 glibc 如果出现问题会造成非常大的影响。
目前关于此漏洞 (CVE-2021-38604),以及针对它的修复补丁已经提交给 glibc 开发团队,并已整合至 glibc 库。此外,一个新的测试已经提交至 glibc 的自动测试套件,以发现这种情况并防止它在未来再次发生。glibc 开发团队建议使用者升级到最新的 glibc 2.34 或更高的稳定版本。