CVE-2018-1000001 linux kernel

前置知识

一个名称空间将全局系统资源封装在一个抽象中,使其在名称空间内的进程中出现,它们有自己独立

的全局资源实例。对全局资源的更改在其他进程中是可见的,但其他进程是不可见的。名称空间的一

个用途是实现容器。

“mount point”:locations in the file hierarchy where file systems have been mounted to

"mounts":安装文件系统的集合/文件系统已安装到的文件层次结构中的位置集。

"to mount":将文件系统安装到文件层次结构中的操作。

Dos Attack

简称拒绝服务攻击, denial-of-service (DoS) attack

userns

SUID,SGID and Sticky Bit

SUID,SGID和Stiky Bits和对所有者/组/其他人的读/写/执行权限一样,都属于文件的属性

Stiky Bit:一旦有关程序被执行,它应当驻留在内存中,比如:当一个用户刚刚使用完一个

程序,另外一个用户想要启动相同程序时,不必再次重新初始化。

SUID Bit:此程序的SUID若被置为root,那么无论任何用户都能以root的权限运行该程序。

SGID Bit:和SUID类似

Introduction

漏洞成因:在应用程序编写完成后再改变文档会引入安全问题。

Linux kernel side

Linux 内核并不完全遵循POSIX规范。它更改了getcwd,但是此时glibc已经实现了

下面的文档某种程度上有矛盾

如果当前目录不在当前进程的root文件下(比如进程通过chroot设置了一个新的文件系统根目录)

从Linux2.6.36,将会返回"(unreachable)",非特权用户更改当前目录到另一个挂载命名空间

当遇到来自不可信任源的路径时,这些函数的调用者应当确保返回的路径以'/'或者'('开始。

getcwd遵循POSIX.1-2001,但POSIX.1-2001并没有明确如何处理buf为NULL的情况

文档明确指明了"unreachable"的使用,但是并不遵循POSIX规范。至少违反了POSIX 2004和2008

规范。而POSIX.1-2001并不能免费获得。根据IEEE Std 1003.1-2008对getcwd的定义:

getcwd()函数应将当前工作目录的绝对路径名放置在buf指向的数组中,并返回buf。路径名不包

含点或点,或符号链接。

似乎,由于Linux内核方面的接口规范的更改而导致的结果并没有得到所有受影响的各方的认可。

realpath()函数依赖于使用getcwd()来解析相对路径名。另外,manpage不反映底层getcwd()调用的更改。

Libc side

glibc依然假定getcwd将返回绝对路径:

realpath()拓展所有符号链接并解析,生成一个规范化的绝对路径名。

当解析一个相对路径,realpath会使用当前的工作目录。假设它以a/.开始,这个函数从getcwd文件

名称从一个斜线到前一个斜线的的../符号链接,它并不检查缓存区的边界。所以,在string缓存区

被用作创建规范化的绝对路径之前,可能会以一个斜线结尾。因此,用getcwd()返回

(ubreachable)/,来解析上面提到的链接名称,已经将指针移动到缓存区前,会更改缓存区前一个字节为'/',下一部分x将被复制到这个位置。

方法

为了实现提权,mount,unmount这类SUID程序,是最合适的目标:他们使用realpath处理函数路径

不会降权,也能被所有用户使用。选择unmount,因为它每次运行允许处理多个挂载点,从而多次遍

历问题代码,打败ASLR。

linux内核2018,CVE-2018-1000001 linux kernel相关推荐

  1. linux内核启动停止在booting the kernel.

    linux内核启动停止在Uncompressing Linux................................................................ done ...

  2. 【Linux 内核】编译 Linux 内核 ① ( 下载指定版本的 Linux 内核源码 | Linux 内核版本号含义 | 主版本号 | 次版本号 | 小版本号 | 稳定版本 )

    文章目录 一.下载 Linux 内核 1.下载最新版本 Linux 内核 2.下载指定版本 Linux 内核 二.Linux 内核版本号含义 一.下载 Linux 内核 1.下载最新版本 Linux ...

  3. 移植linux内核-映像文件,移植Linux内核-映像文件

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://tigerwang202.blogbus.com/logs/43927976.html 首先从Blackfin uCli ...

  4. linux内核分为四个子系统,linux操作系统的内核有哪几个子系统构成,简要说明各子系统的作用...

    Linux是一个一体化内核(monolithic kernel)系统."内核"指的是一个提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件.一个内核不是一套完整的操作系统. ...

  5. Linux内核态之间进程通信,Linux 系统内核空间与用户空间通信的实现与分析[转载]...

    [https://www.ibm.com/developerworks/cn/linux/l-netlink/index.html] 多数的 Linux 内核态程序都需要和用户空间的进程交换数据,但 ...

  6. 升级 Ubuntu Linux 内核的几种不同方法 | Linux 中国

    转载自:升级 Ubuntu Linux 内核的几种不同方法 | Linux 中国 升级 Ubuntu Linux 内核的几种不同方法 | Linux 中国 译者/Ping Yang  Linux  2 ...

  7. Linux内核编程(二)-----------Linux内核初探

    写在前面:本篇主要介绍Linux内核的开发模式.linux代码的组成.vmlinux  zImage  uImage的区别,以及编译下内核. 正文: 一.Linux内核的开发模式 1.git:是一个分 ...

  8. Linux 编译时查找错误字符,编译Linux内核时出现“fatal error: linux/netfilter/xt_dscp: No such file or directory”...

    编译Linux内核时出现"fatal error: linux/netfilter/xt_dscp: No such file or directory".下面开始查找原因. 第一 ...

  9. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  10. linux 内核 课程,Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频教 ......

    课程名称 Linux内核分析课程-全面剖析Linux内核技术 揭开Linux内核的面纱 Linux内核学习视频 课程目录 (1)\1, 计算机是如何工作的?:目录中文件数:0个 (2)\2, 操作系统 ...

最新文章

  1. 如何理解Memory leak
  2. 云上的可观察性数据中台,如何构建?
  3. sublime text3配置Python2、Python3的编译环境
  4. java uipath_10.3 UiPath如何调用Java
  5. python多线程操作列表_详解Python多线程下的list
  6. 【MySQL】mysql 数据库名称 中间带有中划线问题
  7. Dapper的动态查询生成器
  8. 利用Linux系统生成随机密码的8种方法
  9. 全网首发:DeepStream中,获得视频帧数据的代码
  10. 物联网常用无线模块 接收灵敏度及发射功率简化测量方法
  11. 爆火GitHub 的十大最火 Python 项目,三天收藏突破10w+
  12. java 富文本 过滤xss_富文本XSS过滤
  13. 【笔记】wincap收集并统计网络流量
  14. UDP网络基础知识简介
  15. NEO改进协议提案9(NEP-9)
  16. dd命令测试磁盘读写速度
  17. 吉林大学计算机伦理学,王爱民-吉林大学计算机科学与技术学院
  18. C++ Awkward Digits
  19. 树莓派(ubuntu系统)连接后使用HDMI-VGA,VGA无信号
  20. 了解TSP(Tik Tok Shop Partner),这篇详细阅读不容错

热门文章

  1. 阿里云OSS Multipart Upload上传实例
  2. spring整合mybatis是如何配置事务的?
  3. windows2008下 IIS7 HTTP 错误 404.2 - Not Found 解决方法(图文)
  4. linux mkdir错误,thinkphp在linux下报mkdir()错误
  5. php7.0康乐安装_Linux环境PHP7.0安装
  6. as3 java 交互_求大佬用 Java 实现这段 AS3 的 socket 通讯功能
  7. python出现的次数最多的元素_Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算...
  8. 抖音提示需要转换为mp4_如何将MP4文件转换为MP3格式?万兴优转帮你轻松完成转换...
  9. 3331付款方式怎么写_拼多多怎么刷单 为什么要刷单
  10. mysql5.6 忘记root密码后,如何找回密码?