360代码卫士帮助Linux内核发现多个安全漏洞

日前,360代码卫士“开源项目检测计划”发现了多个Linux内核的安全漏洞(CVE-2018-7566、CVE-2018-9858、CVE-2018-9865),并在第一时间将漏洞信息提交给了Linux内核组织,协助其进行漏洞修复。

360开源项目检测计划是360代码卫士团队负责运营的一个公益计划,该计划旨在帮助开源项目提升代码安全质量,并通过知识分享让广大开发者关注和了解软件源代码安全问题,提高软件安全开发意识和技能。

截止目前,360开源项目检测计划已检测各类开源项目2200多个,测试代码超过3亿行,协助各类开源项目修复了众多源代码安全缺陷和漏洞,其中帮助开源项目修复的漏洞已有40多个被CVE收录。



Linux内核组织已经对编号为CVE-2018-7566的漏洞完成了修复,下面是对该漏洞的简要技术分析。

CVE-2018-7566是ALSA(Advanced Linux Sound Architecture,高级Linux声音架构)的音序器核心未能对事件池进行正确初始化所引入的一个高危竞争条件漏洞,该漏洞的CVSS评分为7.8。下面结合源代码对该漏洞进行更详细的分析。

什么是竞争条件

由于两个或者多个进程竞争使用不能被同时访问的资源,使得这些进程有可能因为时间上推进的先后原因而出现问题,这叫做竞争条件(Race Condition)。

该漏洞的触发点位于/sound/core/seq/seq_clientmgr.c文件的snd_seq_write函数中。如图所示,在该函数的1021行中,当第一次写操作发生并且事件池为空时,会调用snd_seq_pool_init函数对事件池进行初始化。

但是,如果攻击者通过并发地调用ioctl()函数,恶意地对事件池的长度进行修改,那么就可能进一步的造成越界访问或者释放后再使用的安全问题。



Linux内核项目组对该漏洞进行了修复:通过引入互斥锁的机制,将snd_seq_pool_init函数的调用保护起来,从而避免了竞争条件的发生。具体修复如下图所示:



什么是互斥锁

在计算机科学中,如果两个或多个进程彼此之间没有直接的联系,但是由于要抢占使用某个临界区(critical section,不能被多个进程同时使用的资源,如打印机、变量)而产生制约关系,那么这种关系被称之为互斥(mutex)。而互斥锁(Mutex Lock)则是用来实现这种制约关系的数据结构。

关于360代码卫士:

“360代码卫士”是360企业安全集团旗下专注于软件源代码安全的产品线,能力涵盖了源代码缺陷检测、源代码合规检测、源代码溯源检测三大方向,分别解决软件开发过程中的安全缺陷和漏洞问题、代码编写的合规性问题、开源代码安全管控问题。“360代码卫士”系列产品可支持Windows、Linux、Android、Apple iOS、IBM AIX等平台上的源代码安全分析,支持的编程语言涵盖C、C++、C#、Objective-C、Java、JSP、JavaScript、PHP、Python等。目前360代码卫士已应用于上百家大型机构,帮助用户构建自身的代码安全保障体系,消减软件代码安全隐患。
免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。查看原文

为您推荐