CVE漏洞复现-CVE-2019-5021 镜像漏洞利用

CVE-2019-5021 镜像漏洞利用

随着容器技术的普及,容器镜像也成为软件供应链中非常重要的一个组成的部分。人们像使用 pip 等工具从仓库获取各种编程软件库一样,可以从 Docker Hub 或 第三方仓库拉取镜像,在其基础上进行开发,从而实现所需功能,最后打包发布

然而,业务依赖的基础镜像可能存在问题——无论是开发者无心导致的安全漏洞还是攻击者故意埋下的恶意代码,这种“内生风险”的潜在危害比黑客从外部发起攻击严重的多,且更不易被发现。

下面我们来介绍一种容器软件供应链攻击:镜像漏洞利用

镜像漏洞利用

镜像漏洞利用指的是镜像本身存在漏洞时,使用镜像创建并运行的容器也通常会存在相同漏洞,攻击者可以利用镜像中存在的漏洞去攻击容器,往往具有事办功倍的效果

列如,Alpine 是一个轻量化的 Linux 发行版,基于 musl libc 和 busybox 构建而成。由于其体积小,因此以Alpine为基础构建的软件是非常流行的。但 Alpine 镜像曾爆出过一个漏洞: CVE-2019-5021。在 3.3~3.9 版本的Alpine 镜像中,root 用户的密码被设置为空,攻击者可能在攻入容器后借此提升到容器内部的 root 权限

这个漏洞看起来很简单,但是 CVSS3.0评分高达9.8分。我们拉取一个3.3版本的镜像,然后构建容器并检查一下密码信息文件 “/etc/shadow” ,如图所示,可以 shadow 文件记录的 root 密码确实为空

#拉取alpine:3.3的镜像
docker pull alpine:3.3
#查看shadow 文件记录的 root 密码
docker run -it --rm alpine:3.3 cat /etc/shadow | grep root

在这里插入图片描述

Alpine 镜像使用 busybox 作为核心工具链,通过 /etc/securetty 文件限制了可以登陆 root 用户的 tty 设备。除非是用户主动安装 shadow 和 linux-pam 来代替默认工具链,否则这个漏洞将很难利用。接下来,我们来模拟一下这个场景。基于3.5版本的Apline 创建一个镜像,添加一个普通用户 non_root,并安装 shadow(https://github.com/brant-ruan/cloud-native-security-book/0303-供应链攻击/01-CVE-2019-5021-alpine)

漏洞复现

我们编写如下的Dockerfile:

FROM alpine:3.5RUN apk add --no-cache shadow
RUN adduser -S non_rootUSER non_root

创建好后,在 Dockerfile文件 的同一目录下执行如下的命令构建镜像:

docker build -t alpine:cve-2019-5021 .

在这里插入图片描述

然后运行一个容器,尝试执行su 切换为 root 用户,切换成功如图所示:

#运行一个容器
docker run -it --rm alpine:cve-2019-5021 /bin/sh
#查看当前用户
whoami
#且换为root用户
su -

在这里插入图片描述

整个过程非常简单,在现实中,如果用户使用了旧版本的 Alpine,同时安装了 shadow,一旦攻击者利用 Web服务获得了一个容器内的低权限的shell,就可以凭借此漏洞直接提升为容器内的root权限。

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

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

相关文章

网络基础1

文章目录 网络基础11. 计算机网络背景1.1 网路发展1.2 认识 "协议" 2. 网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型协议栈与OS的关系 3. 网络传输基本流程3.1 同一个局域网两台主机通信3.2 同一个路由器的两个子网通信 4. 网络中的地址管理4…

WebGL: 几个入门小例子

本文罗列几个WebGL入门例子,用于帮助WebGL学习。 一、概述 WebGL (Web Graphics Library)是一组基于Open ES、在Web内渲染3D图形的Javascript APIs。 Ref. from Khronos Group: WebGL WebGL™ is a cross-platform, royalty-free open web standard for a low-lev…

flink1.17 eventWindow不要配置processTrigger

理论上可以eventtime processtime混用,但是下面代码测试发现bug,输入一条数据会一直输出. flink github无法提bug/问题. apache jira账户新建后竟然flink又需要一个账户,放弃 bug复现操作 idea运行代码后 往source kafka发送一条数据 a,1,1690304400000 可以看到无限输出…

python的下载和安装步骤,python下载安装教程3.10.0

大家好,给大家分享一下python下载安装教程3.10.0,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 第一步:下载Python安装包 在Python的官网 www.python.org 中找到最新版本的Python安装包,点击进行下载&a…

探究Spring事务:了解失效场景及应对策略

在现代软件开发中,数据的一致性和完整性是至关重要的。为了保证这些特性,Spring框架提供了强大的事务管理机制,让开发者能够更加自信地处理数据库操作。然而,事务并非银弹,存在一些失效的情景,本文将带您深…

AtcoderABC227场

A - Last CardA - Last Card 题目大意 一共 K 张卡片分发给 N 个人,这些人的编号为 1, 2, …, N 从第 A 个人开始,按照顺序依次将卡片发给以下人员:A, A1, A2, …, N, 1, 2, …问最后一个卡片将发给哪个人? 具体来说,…

2023年C++面试宝典

目录 第一章:C基础知识1.1 C语言起源与发展1.2 C的重要特点和优点1.3 C的数据类型和变量1.4 函数和命名空间1.5 运算符和表达式 第二章:面向对象编程2.1 类与对象的概念2.2 封装、继承和多态2.3 构造函数和析构函数2.4 静态成员和常量成员2.5 虚函数和纯…

34 从磁盘读取数据到内存的调试

前言 我们大多数的文件是存储在磁盘上面的 然后 我们通过 open read/write 相关 api 是控制的是 磁盘 和 内存 之间的数据交互 磁盘 到 内存, 或者 内存 到 磁盘 我们这里 来大致看一下 磁盘到 内存的这一个过程 调试读取磁盘数据到 page 的流程 这里的流程主要是包含…

【FAQ】EasyGBS平台通道显示在线,视频无法播放并报错400的排查

EasyGBS是基于国标GB28181协议的视频云服务平台,它可以支持国标协议的设备接入,在视频能力上能实现直播、录像存储、检索与回放、云台控制、告警上报、语音对讲、平台级联等功能,既能作为业务平台使用,也能作为能力层平台调用。 我…

装饰器模式(Decorator)

装饰器模式是一种结构型设计模式,用来动态地给一个对象增加一些额外的职责。就增加对象功能来说,装饰器模式比生成子类实现更为灵活。装饰器模式的别名为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。 Decor…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十七天 47/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一, 2014年由Simonyan和Zisserman提出, 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为: 通过运行结果可以发现,在眼疾筛查数据集iChallenge-PM上使用VGG…