sqlite字段是否存在_【漏洞预警】Linux内核存在本地提权漏洞(CVE20198912)

更多资讯和分析文章请关注启明星辰ADLab微信公众号及官方网站(adlab.venustech.com.cn)

漏洞背景

近日,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,Release:buster,Version:4.19.16-1

  • Debian,Release:sid,Version:4.19.20-1

Linux Crypto模块简介

Linux内核从版本2.5开始引入了加密机制,为内核提供加密功能,应用包括:硬件加密设备驱动、内核代码签名、硬件随机数生成器、文件系统加密等。从版本2.6.6之后,内核源码提供了丰富的密码学算法支持,并可以通过配置编译选项将加密算法作为模块编入内核。内核编译配置如下图所示:

e2446006d84fbad9d58f1b1fd6b9b701.png

但是该加密功能提供的API接口只能在内核层进行使用,用户层无法调用。2010年,有位维护者向Linux Crypto维护组提交了一份Crypato API 用户接口,类似于netlink,基于socket进行通信,便于用户层访问内核加密子系统。功能实现代码在文件crypto/af_alg.c中。

漏洞原理及溯源

漏洞存在于crypto 模块中的af_alg_release()函数中。af_alg_release()函数在进行对象释放时,未将对象置空。对应commit:9060cb719e61b685ec0102574e10337fa5f445ea补丁代码如下,补丁添加了一行代码:sock->sk = NULL; 。

982925fb19aa2138c726d72103bf93a4.png

在未添加补丁之前,如果该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()之间的条件竞争漏洞,对应commit为6d8c50dcb029872b298eea68cc6209c866fd3e14,具体先看下sockfs_setattr()函数中的补丁。补丁代码如下:

58533af4090d743161f7c6c6e7b8dfdf.png

行544,首先判断sock->sk是否为空,如果不为空,行545再将用户层传进来的iattr->ia_uid赋值为sock->sk->sk_uid。然后看sock_close ()函数中的补丁。补丁代码如下:

0ad08c3fa3f0de3a2cace2957b2093ca.png

行1186,替换成了新函数__sock_release(),该函数多了一个参数inode。__sock_release()函数实现如下:

21973a5d8eadc75b2e1b2b578566e445.png

行601,对inode进行判断,如果不为空,然后调用inode_lock()函数对其进行上锁。其实该inode本身和要进行释放的socket对象是对应的。行603,调用ops中release()函数进行释放操作。这个ops中release()函数只是一个函数指针,最终会根据用户注册哪种套接字类型决定。行604,再次判断inode是否为空,如果不为空,再进行解锁。通过对inode加锁,防止在对socket对象释放时进行其他操作。

从commit:6d8c50dcb029872b298eea68cc6209c866fd3e14提供的细节可知, sock_close()函数和sockfs_setattr()函数之间的条件竞争可以通过用户层fchownat()函数引发。根据man手册可知,该函数是用于设置文件属性的,例如uid和gid,在内核中对应的sockfs_setattr()函数,如下图所示:

2c8ced65fcb4fcf4223807b34d9806f1.png

细节中描述,该函数不会保持文件fd的引用计数,这也是导致存在条件竞争的原因。根据前文可知,sockfs_setattr()函数其实就是设置UID才操作sock->sk对象的。

如果再继续向前追溯的话,从commit:86741ec25462e4c8cdce6df2f41ead05568c7d5e提供的细节可知UID的来龙去脉。该补丁提交于2016年。由于socket 协议中的结构体struct sock在大多时候都是和用户层的sockets一一映射的,sockets对应的内核结构体为struct socket。考虑到方便操作,便通过向struct sock添加一个sk_uid字段来简化对struct socket中的UID的匹配,也因此添加了一个关键函数。如下图所示:

9532be7f3aec37188be956d0ec828857.png

由此可知,本来存在于sock_close()和sockfs_setattr之间的条件竞争已经被修复,由于crypto/af_alg.c中af_alg_release()函数没有将释放后的sock->sk及时置空,导致前面所做的安全补丁全部失效。

安全建议

该漏洞补丁已经给出,请及时升级到最新版本。https://github.com/torvalds/linux/commit/9060cb719e61b685ec0102574e10337fa5f445ea

启明星辰积极防御实验室(ADLab)

ADLab成立于1999年,是中国安全行业最早成立的攻防技术研究实验室之一,微软MAPP计划核心成员,“黑雀攻击”概念首推者。截止目前,ADLab已通过CVE累计发布安全漏洞近1000个,通过 CNVD/CNNVD累计发布安全漏洞近500个,持续保持国际网络安全领域一流水准。实验室研究方向涵盖操作系统与应用系统安全研究、移动智能终端安全研究、物联网智能设备安全研究、Web安全研究、工控系统安全研究、云安全研究。研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。

55f6fed3839a799b8a82e14e193d7263.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 实现倒计时转场动画~

元旦元旦团团圆圆、WPF开发者在此真诚的祝愿开发者们在新的一年里心想事成、万事如意!WPF开发者QQ群: 340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。01—代码如下一…

su命令的详细用法

1.命令作用 su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。 2.使用方式 su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 3.参数说明 -f , –fast:不必读启动文件&#xff0…

Partitioning Strategies

001、三种基本分区方式:Range、Hash、List。 002、Single-Level Partitioning 表以三种分区方式之一进行分区,使用一列或多列作为分区键。 Range Partitioning 范围分区将数据按照分区键的范围值分配到各个分区。这是最常见的分区方式&#…

Java类集-SortedSet接口

TreeSet实现了SortedSet接口 package iotest; import java.util.SortedSet; import java.util.TreeSet; public class sset { public static void main(String args[]){ SortedSet<String> allsnew TreeSet<String>(); alls.add("A"); alls.add("M&…

chmod 777 修改权限

在Unix和Linux的各种操作系统下&#xff0c;每个文件&#xff08;文件夹也被看作是文件&#xff09;都按读、写、运行设定权限。例如我用ls -l命令列文件表时&#xff0c;得到如下输出:-rw-r--r-- 1 apple users 2254 2006-05-20 13:47 tt.htm从第二个字符起rw-是说用户apple有…

WPF架构分析

<?xml version"1.0" encoding"UTF-8"?> 1.DisptcherObject提供了线程和并发模型&#xff0c;实现了消息系统。 2.DependencyObject提供了更改通知&#xff0c;实现了绑定&#xff0c;样式。3.Visual是托管API和非托管API&#xff08;milcore&#…

数字化架构

看过《EA企业架构》、《应用架构》和《IT与业务之间的鸿沟》文章的好多朋友给我发信息&#xff0c;能不能再写篇文章&#xff0c;各行各业的朋友都能看懂的、容易接受的&#xff0c;下面我将尽量尝试朝着这个方向努力写一篇数字化架构的文章&#xff0c;希望各界的朋友们都能有…

安卓手机运行python程序的软件-安卓手机定时运行python脚本

话说现在智能手机的计算能力严重过剩啊&#xff0c;不玩游戏、不打电话、不刷微信时&#xff0c;要充分利用手机的计算潜力为我所用。完全可以把一些台式电脑上的计算任务移到手机上来运行。python就是一个很好的跨平台的解决方案。今天谈谈安卓手机上python脚本的定时运行问题…

readonly和const的区别

readonly与const的区别1、const常量在声明的同时必须赋值&#xff0c;readonly在声明时可以不赋值2、readonly只能在声明时或在构造方法中赋值&#xff08;readonly的成员变量可以根据调用不同的构造方法赋不同的值&#xff09;3、const前面不能添加static&#xff08;因为Cons…

shell查找命令大全

1.whereis 文件名 特点:快速,但是是模糊查找,例如 找 #whereis mysql 它会把mysql,mysql.ini,mysql.*所在的目录都找出来.一般的查找都用这条命令.2.find / -name 文件名特点:准确,但速度慢,消耗资源大,例如我想找到php.ini的准确位置,就需要用#find / -name php.ini3.locate 文…

busybox怎么安装

BusyBox就好比是一个满满的工具箱&#xff0c;它包压缩了 Linux 的许多工具和命令&#xff0c;还包含了 Android 系统自带的shell。 第一步&#xff1a; 首先要把手机给Root了&#xff0c;有很多root手机的软件&#xff0c;下了之后按提示就可以把手机root了。 第二部&#…

快速理解ASP.NET Core的认证与授权

ASP.NET Core的认证与授权已经不是什么新鲜事了&#xff0c;微软官方的文档对于如何在ASP.NET Core中实现认证与授权有着非常详细深入的介绍。但有时候在开发过程中&#xff0c;我们也往往会感觉无从下手&#xff0c;或者由于一开始没有进行认证授权机制的设计与规划&#xff0…

有一个开始

初级入门&#xff1a;独上高楼&#xff0c;望尽天涯路。---------------------------------------我是分割线-----------------------------------------每天看3个以上的网页设计或者网页模版&#xff0c;说说为什么好或者不好&#xff1b;实现3个以上的特效&#xff0c;想想其…

字符用_连接的是什么加密_防水连接器外壳与铜针表面涂层有什么用?

防水连接器外壳与铜针表面涂层会关系到产品的质量&#xff0c;毕竟材料选择方面&#xff0c;以及手工劳动方面都是需要把好关的&#xff0c;这样我们才能确保做出来了的产品送至用户身上是最好的。(凌科BD系列防水连接器铜针镀金效果)1、无氰偏碱亮铜&#xff1a;在铜合金材料防…

【27前端】base标签带有href属性会让chrome里的svg元素url失效

一个chrome的问题&#xff0c;但具体原因不明。 触发条件&#xff1a;chrome浏览器base标签里href属性有值的时候 触发问题&#xff1a;svg里面的元素如果有用url的滤镜和模糊&#xff0c;则会失效&#xff0c;在firefox里和IE10没有发现这个问题。 正常状态&#xff1a; 有bas…

新成立的Scala中心将重点关注教育和Scala社区

在2016年6月的Scala Days柏林大会上&#xff0c;研究员Heather Miller在主题演讲中详细介绍了新成立的的Scala中心。这是一个非盈利性的组织&#xff0c;将重点关注教育和开源社区。\\InfoQ在最近发表的一篇文章中介绍过Scala中心&#xff0c;这里我们将介绍更多的细节。\\为什…

Android之root手机之后用busybox找到我们需要删除的文件

第一步&#xff1a;root手机 给手机root,我们可以使用kingroot 第二步&#xff1a;下载busybox 把下好的busybox放在ubuntu Desktop文件夹第三步&#xff1a;把busybox移到手机sdcard 打开Desktop终端adb push busybox-armv6l /sdcard/ 第四步&#xff1a;执行su命令 在ubun…

强大的矩阵奇异值分解(SVD)及其应用

本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用&#xff0c;但请注明出处&#xff0c;如果有问题&#xff0c;请联系wheeleastgmail.com 前言&#xff1a; 上一次写了关于PCA与LDA的文章&#xff0c;PCA的实现一般有两种&#xff0…