【Redis升级】---修复代码注入漏洞、缓冲区错误漏洞
👈【上一篇】 |
💖The Begin💖 点点关注,收藏不迷路💖
| 【下一篇】👉 |
🔻 一、漏洞组件详情
1.1 ⛳ 组件名称----Redis
1.2 ⛳ 组件版本----V4.0.8
1.3 ⛳ 是否合规----否
1.4 ⛳ 漏洞类型----中间件漏洞
1.5 ⛳ 漏洞类型----涉及漏洞编号
CVE编号:
CVE-2022-0543
CNNVD编号:CNNVD-202202-1622
----Redis 代码注入漏洞
CVE编号:
CVE-2022-24735
CNNVD编号:CNNVD-202204-4527
----Redis Labs Redis 代码注入漏洞
CVE编号:
CVE-2022-31144
CNNVD编号:CNNVD-202207-1675
----Redis Labs Redis 缓冲区错误漏洞
1.6 ⛳ 受影响版本区间
版本<6.2.7
7.0.0≤版本<7.0.4
1.7 ⛳ 漏洞简介
Redis 代码注入漏洞:
Redis Labs Redis是美国Redis Labs公司的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。
Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。
Redis Labs Redis 代码注入漏洞 :
Redis 6.2.7 和 7.0.0 之前版本存在代码注入漏洞,该漏洞源于Lua 脚本执行环境存在问题。攻击者利用该漏洞可以实现以另一个Redis用户的权限执行脚本。
Redis Labs Redis 缓冲区错误漏洞:
Redis 7.0.4 之前版本存在安全漏洞,该漏洞源于针对特定状态的流键的特制 XAUTOCLAIM 命令可能导致堆溢出,并可能导致远程代码执行。
🔻 二、Redis版本升级(redis-4.0.8升级至redis-7.0.9)
🚩 注:本次升级环境为CentOS Linux release 7.9.2009 (Core)
。
2.1 ⛳ Redis当前版本查看、gcc版本查看
[root@zyl-docker ~]# redis-cli -v
redis-cli 4.0.8
[root@zyl-docker ~]#
[root@zyl-docker ~]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Redis 7.0.9 安装要求的gcc版本比较高,升级gcc版本见【linux离线升级gcc版本—gcc4.8.5–>gcc12.2.0】
2.2 ⛳ 旧版本数据及配置文件备份
2.2.1🍁 插入数据以便做升级测试
[root@zyl-docker init.d]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379>
2.2.2 🍁 旧版本数据及配置文件备份(有备无患)-升级说明
旧版安装目录:
/usr/local/bin
旧版配置文件(需备份
):/etc/redis/6379.conf
旧版数据存储目录(需备份
):/var/lib/redis
日志文件:/var/log/redis/redis.log
###备份旧版配置文件
[root@zyl-docker ~]# cp /etc/redis/6379.conf /etc/redis/6379.conf_bak
###备份旧版数据文件
[root@zyl-docker ~]# cp /var/lib/redis/dump.rdb /var/lib/redis/dump.rdb_bak
[root@zyl-docker ~]#
###备份旧版启动文件
[root@zyl-docker src]# cd /etc/init.d/
[root@zyl-docker init.d]# mv redisd redisd_bak
2.2.3 🍁 停止旧版redis服务
###
停止redis服务
[root@zyl-docker init.d]# service redisd stop
Stopping …
Redis stopped
[root@zyl-docker init.d]#
###redis进程查看,没有redis有关进程后再编译新版本
[root@zyl-docker init.d]# ps -ef | grep redis
2.3 ⛳ 编译安装新版redis-7.0.9
2.3.1 🍁 上传解压redis-7.0.9.tar.gz
###解压至/usr/local目录
[root@zyl-docker ~]# tar -zxvf redis-7.0.9.tar.gz -C /usr/local
2.3.2 🍁 编译redis-7.0.9
####cd 到新版redis-7.0.9解压目录
[root@zyl-docker ~]# cd /usr/local/redis-7.0.9/
###执行命令进行编译
[root@zyl-docker redis-4.0.8]# make MALLOC=libc
2.3.3 🍁 make test
#####安装前检查
[root@zyl-docker redis-7.0.9]# make test
…
\o/ All tests passed without errors!
Cleanup: may take some time… OK
make[1]: Leaving directory `/usr/local/redis-7.0.9/src’
[root@zyl-docker redis-7.0.9]# make test
可能会出现报错,tcl 版本过低原因,下载安装高版本tcl即可,可在【Redis编译安装】—redis-4.0.8篇—1.3.4小节 🍁 安装tcl-8.5 查看解决办法
报错:You need tcl 8.5 or newer in order to run the Redis test make: *** [test] Error 1
2.3.4 🍁 安装升级redis-7.0.9
有关报错解决
####cd src 目录安装redis
[root@zyl-docker redis-7.0.9]# cd src && make install
报错:which: no python3 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
Hint: It’s a good idea to run ‘make test’ ; )
INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
[root@zyl-docker src]#
解决:查看Python版本和离线升级Python环境
###步骤一
、查看本机Python版本,本机为Python 2.7.5,版本太低导致[root@zyl-docker Python-3.6.5]# python --version
Python 2.7.5
[root@zyl-docker Python-3.6.5]#
###步骤二
、 下载 Python-3.6.5.tgz ,并上传解压
[root@zyl-docker ~]# tar -zxvf Python-3.6.5.tgz
###步骤三
、配置、检查,指定安装到/usr/local/python3
[root@zyl-docker Python-3.6.5]# ./configure --prefix=/usr/local/python3
###步骤四
、安装Python-3.6.5,
[root@zyl-docker Python-3.6.5]# make && make install
再次报错:zipimport.ZipImportError: can't decompress data; zlib not available
####查看zlib,大概率是少安装了一些依赖包,猜测和zlib有关的那就是zlib-devel,尝试安装zlib-devel
[root@zyl-docker Python-3.6.5]# rpm -qa|grep zlib
zlib-1.2.7-18.el7.x86_64
[root@zyl-docker Python-3.6.5]#
###—下载安装zlib-devel—####
zlib-devel-1.2.7-18.el7.x86_64.rpm 下载
[root@zyl-docker ~]# rpm -i zlib-devel-1.2.7-18.el7.x86_64.rpm
[root@zyl-docker ~]# rpm -qa|grep zlib-devel
###检查zlib-devel
zlib-devel-1.2.7-18.el7.x86_64
[root@zyl-docker ~]#
####再次执行 make && make install
###步骤五
、建立软连接
####cd /usr/bin/python,查看旧版python
python是一个软链接,可以直接删除,不影响原文件。
[root@zyl-docker bin]# pwd
/usr/bin
[root@zyl-docker bin]#
[root@zyl-docker bin]# rm -rf python
#####建立python3.6软连接
[root@zyl-docker python3.6]# ln -s /usr/local/python3/bin/ /usr/bin/python3
[root@zyl-docker python3.6]# ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
[root@zyl-docker python3.6]#
###步骤六
、Python版本检查(已成功升级至Python-3.6.5)[root@zyl-docker bin]# python --version
Python 3.6.5
[root@zyl-docker bin]#
2.3.5 🍁 再次安装redis-7.0.9
##cd /usr/local/redis-7.0.9 目录安装redis
[root@zyl-docker redis-7.0.9]# cd src && make install
[root@zyl-docker redis-7.0.9]# cd src && make install
Hint: It’s a good idea to run ‘make test’ 😉
INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
[root@zyl-docker src]#
###redis版本检查(已成功升级至redis-cli 7.0.9)
[root@zyl-docker src]# redis-cli -v
redis-cli 7.0.9
[root@zyl-docker src]#
2.3.6 🍁 将redis-7.0.9启动脚本复制一份放到/etc/init.d目录下(开机自启)
[root@zyl-docker init.d]# cp /usr/local/redis-7.0.9/utils/redis_init_script /etc/init.d/redisd
###执行开机自启命令###
[root@zyl-docker init.d]# chkconfig redisd on
2.4 ⛳ 启动新版redis-7.0.9
测试
###启动redis
[root@zyl-docker init.d]# service redisd start
Starting Redis server…
[root@zyl-docker init.d]#
###redis进程查看
[root@zyl-docker init.d]# ps -ef | grep redis
root 21752 1 0 11:48 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root 21789 1944 0 11:50 pts/0 00:00:00 grep --color=auto redis
[root@zyl-docker init.d]#
###停止redis
[root@zyl-docker init.d]# service redisd stop
Stopping …
Redis stopped
[root@zyl-docker init.d]#
2.4.1 🍁 检查版本及数据
###检查步骤2.2.1中插入的数据(k1,v1),(k2,v2)
[root@zyl-docker init.d]# redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> get k1
“v1”
127.0.0.1:6379> get k2
“v2”
127.0.0.1:6379>
###检查版本
[root@zyl-docker ~]# redis-server -v
Redis server v=7.0.9 sha=00000000:0 malloc=libc bits=64 build=2f97593622c6128
[root@zyl-docker ~]#
[root@zyl-docker ~]# redis-cli -v
redis-cli 7.0.9
[root@zyl-docker ~]#
#######💞升级成功💞#######
🔻 总结—温故知新
❓ 本篇由实际工作中的问题延伸并解决,模拟生产环境而来
❓ redis代码注入漏洞了解
❓ 安装升级`redis-7.0.9`有关报错解决(Python3.6.5离线升级、zlib-devel-1.2.7-18.el7.x86_64 离线安装)
❓ redis有关目录详细了解和参数配置
👈【上一篇】 |
💖The End💖 点点关注,收藏不迷路💖
| 【下一篇】👉 |