freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

CVE-2022-0847:Dirty pipe Linux本地提权漏洞
2023-05-19 09:12:29
所属地 北京

管道pipe是一种特殊的文件系统,可以将两个独立的程序连接在一起,使得它们能够通过管道来进行数据传输。

利用该漏洞,对创建的管道进行某些操作后,可达到篡改只读文件缓存的目的,当系统读取此文件时,便会访问到被篡改的内容,达到修改无写入权限文件的效果。

Part1 漏洞状态

漏洞细节漏洞POC漏洞EXP在野利用

Part2 漏洞描述

‍漏洞名称

Dirty Pipe Linux本地提权漏洞

CVE编号CVE-2022-0847
漏洞类型本地权限提升
漏洞等级7.8 高危 (High)
公开状态公开
漏洞描述

通过对创建的pipe进行操作,可篡改只读文件缓存,进行权限提升。

时间线

2022-3-10 NVD发布

2022-2-21 漏洞被修复

影响版本

Linux内核版本大于5.8,小于5.16.11、5.15.25 和 5.10.102版本

分析环境:

Centos8 内核版本5.9.1

Part3 漏洞分析

进行漏洞验证,验证程序运行前为cve账户权限,通过该漏洞,将只读文件/etc/passwd内root账户密码修改为"aaron",成功后使用su root,输入修改后的密码,手动切换至root账户,提升权限。

图片

查看Linux pipe源码,在pipe.c内,在管道进行写入时, pipe_write()函数内,会将pipe缓冲区的flags置为"PIPE_BUF_FLAG_CAN_MERGE",表示该管道可被写入。此处修改于linux 5.8被引入。

图片

此漏洞的利用还需要使用splice()函数,该函数可通过管道,在文件描述符之间进行数据拷贝,实现零拷贝的效果。使用该函数的使用主要目的为将文件映射进管道,关键点在于,该函数会将目标文件的物理页直接赋值给管道缓冲区,并且不会将缓存flag进行修改,这导致再次向管道内写入数据时,因buf->flag为"PIPE_BUF_FLAG_CAN_MERGE",后续的数据写入,会继续写入到该缓冲区内。

该漏洞的利用逻辑为:

1.创建管道。

2.通过pipe_write(),将所有页面缓存flag置为"PIPE_BUF_FLAG_CAN_MERGE"。

3.通过pipe_read()清空管道图片

4.通过splice()将有读权限的目标文件,部分读入管道。

图片

5.使用pipe_write(),向管道内继续写入内容,达到篡改目标文件缓存。

完成后,在访问该文件时,一定时间内,系统会优先访问缓存内的内容,达到越权的目的。该漏洞已于Linux 5.16.11、5.15.25 和 5.10.102版本修复。

图片

在Splice()的调用链内,对buf->page置0,避免了此问题发生。

Part4 修复建议

升级Linux内核至5.16.11、5.15.25、5.10.102及以上版本。

# 漏洞 # 渗透测试 # 工控安全 # 漏洞分析
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录