首页 小编推荐正文

一、缝隙布景

近来,橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天Linux笑三笑是怎么得到龙龟 git中发布一个commit补丁,该补丁对应的缝隙是一个本地提权缝隙CVE-2019-8912,缝隙影响规模较广。依据git中的commit信息可知,该缝隙出现在内核’crypto/af_alg.c’中的af_alg_release函数中,能够经过sockfs_setattr函数触发,缝隙类型是use after free,能够导致本地代码履行进行权限提高。

二、缝隙影响版别

Linux 2 .6 ~ linux 4.20.11

Red Hat Enterprise Linux 7,Package: 人世中毒沙发kernel-alt

Debian,Release:Jessie,Version:3.16.56-1+deb8u1

Debian,Release:Jessie (security),Version:3.16.56-1

Debian,Release:stretch,Version:4.9.144-3

Debian,Release:stretch (security),Version:4.9.110-3+deb9u6

Debian,Re施逸凡lease:buster,Version:4.19.16-1

霸爱小魔女
冷王专属之天降萌妃
橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天

Debian,Release:sid,Version:4.19.20-1

三、L孟崇然inux Crypto模块简介

Linux内核从版别2.5开端引入了加密机制,为内核供给加密功用,运用包含:硬件加密设备驱动、内核代码签名、硬件随机数生成器、文件体系加密等。从版别2.6.6之后,内核源码供给了丰厚的密码学算法支撑,做受并能够经过装备编译选项将加密算法作为模块编入内核。内核编译装备如下图所示:

可是该加密功用供给的API接口只能在内核层进行运用,用户层无法调用。2010年,有橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天位保护者向Linux Cryp薄其红to保护组提交了一份CrypatoAPI 用户接口,类似于netlink,依据socket进行通讯,便于用户层拜访内核加密子体系。功用完成代码在文件crypto/af_alg.橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天c中。

四、缝隙原理及溯源

缝隙存在于crypto 模块中的af_alg_release函数中。af_alg_release函数在进行目标开释时,未将目标置空。对应commit:9060cb719e61b685ec0102574e10337fa5f445ea补丁代码如下,补丁增加了一行代码:sock->sk = NUL娟妞L; 。

在未增加补丁之前,假如该sock->sk引证计数是1,当调用sock_put进行开释后没有置空,就直接回来,会发生一个sock->sk悬挂指针。

为了分析这个漏无内裤洞的来龙去脉,先分析下相关的socket代码。对每个新创立的socket,Linux内核都将在sockfs中创立一个新的inode。Sockfs_*系列函数便是用来操作sockfs文件体系的。Sockfs_setattr函数便是设置socket文件特点的。在net/socket.c文件中sockfs_setattr函数将会运用sock->sk目标。

依据提交的commit:9060cb719e61b685ec0102574e10337fa5f445ea细节可知,在该缝隙发表之前,Linux现已修正了sock_close和sockfs_setattr之间的条件竞赛缝隙,对应c上海大众santanaommit为6d8c50dcb029872b298eea68cc6209c866fd3e14,详细先看下sockfs_setattr函数中的补丁。补丁代码如下:

行544,首要判别sock->sk是否为空,假如不为空,行545再将用户层传进来的iattr->ia_uid赋值为sock->sk->sk_uid。然后看sock_close 函数中极速行进土耳其浴引发争议的补丁。补丁代码如下:

行1186,替换成了新函数__sock_release,该函数多了一个参数inode。__sock_relea奶味大哥大se函数完成如下:

行601,对inode进行判别,假如不为空,然后调用inode_lock函数对其进行上锁。其实该inode自身和要进行开释的socket目标是对应的我的网友是女鬼。行603,调用ops中release函数进行开释操作。这个ops中release函数仅仅一个函数指针,最终会依据用户注册哪种套接字类型决议。行604,再次判别inode是否为空,假如不为空,再进行解锁。经过对inode加锁,避免在对socket目标开释时进行其他操作。

从commit:6d8c50dcb029872b298eea68cc6209c866橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天fd3e14供给的细节可知,sock_close函数和sockfs橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天_setattr函数之间的条件竞赛能够经过用户层fchownat函数引发。依据man手册可知,该函数是用于设置文件特点的,例如uid和gid,在内核中对应的sockfs_setattr函数,如下图所示:

细节中描绘,该函数不会坚持文件fd的引证计数,这也是导致存在条件竞赛的原因。依据前文可知,sockfs_seta谋妻有道之毒宠无良妃ttr尼坤毒打昌珉的相片函数其实便是设置UID才操作sock->sk目标的。

假如再持续向前追溯的话,从commit:86741ec25462e4c8cdce6df2f41ead05568c7d5e供给的细节可知UID的来龙去脉。该补丁提交于2016年。因为socket 协议中橙色,Linux内核本地提权缝隙预警分析(CVE-2019-8912),刘云天的结构体structsock在大多时分都是和用户层的sockets逐个映射的,sockets对应的内核结构体为structsocket。考虑到便利操作,便经过向struct sock增加一个sk_uid字段来简化对struct socket中的UID的匹配,也因而增加了一个透明秀要害函数。如下图所示:

由此可知,原本存在于sock_close和sockfs_setattr之间的条件竞赛现已被修正,因为crypto/af_alg.c中af_alg_release函数没有将开释后的sock->sk及时置空,导致前面所做的安全补丁悉数失效。

五、安全主张

现在该缝隙补丁现已给出,请及时升级到最新版别。

https://github.com/torvalds/linux/commit/9060cb719e罗杰疑案受争议的原因61b685ec0102574e10337fa5f445ea

*本文作者:启明星斗活跃防护实验室(ADLab),转载请注明来自FreeBuf.COM

声明:该文观念仅代表作者自己,搜狐号系信息发布渠道,搜狐仅供给信息存储空间效劳。
你色
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。