大家好,我是R哥。

今天一早收到了腾讯云给我的【主机安全】漏洞通知:

好家伙,大名鼎鼎的 Redis 爆高危漏洞了,R哥的题库「Java面试库」也用到了 Redis 来缓存面试题内容,所以这一下子就引起了我的警惕,赶紧看看什么鬼。

漏洞描述

下面是漏洞描述和修复说明:

https://github.com/redis/redis/security/advisories/GHSA-whxg-wx83-85p5

这次的漏洞是因为 Lua 库引起的,用户可能会使用特制的 Lua 脚本来触发堆栈缓冲区溢出,这可能会导致「远程代码执行」漏洞。

也就是说,所有带有 Lua 脚本的 Redis 版本(\>= 2.8.18)都存在该漏洞,赶紧使用下面命令查看下你的 Redis 版本号:

$ redis-cli --version
redis-cli 7.2.5

我使用的是 Redis 7.2.5,也是受影响的版本。

Lua 扫盲:

Lua 是一种轻量级的脚本语言,Redis 中内置了 Lua 功能,可以直接运行 Lua 脚本。因为 Redis 的基本操作都是单个命令,但在某些场景下,可能需要多个操作组合成事务或执行复杂的逻辑,这时候 Lua 脚本就派上用场了,使用 Lua 脚本可以大大减少网络开锁。

说到 Lua 就不得不提 OpenResty,它是一个基于 Nginx 的高性能 Web 组件,其支持用 Lua 编写复杂逻辑,并提了许多精心编写的 Lua 模块,这就是它最大的亮点。

解决方案

升级最新安全版本

Redis 官方发布了 3 个漏洞补丁及修复版本:6.2.16, 7.2.6, 7.4.1,请评估业务是否受影响后,再酌情升级至安全版本,如果是 5.x 及以下的版本就不受支持了。

版本升级前,建议大家做好数据备份操作,云服务升级版本前最好先制作镜像/快照,避免升级不当导致数据丢失情况。

临时解决方案

1、开放指定 IP 地址

如果使用的是云服务,可以使用云上的安全组对 Redis 端口(默认:6379)设置只对指定的 IP 地址开放,如示例所示:

注意,来源这一项不要再勾选全部 IP 地址。

2、设置密码访问

强制对 Redis 实例的所有访问使用凭据,这个可以通过配置 Redis 的 requirepass 参数来设置访问密码,修改 Redis.conf 配置文件:

requirepass XXX

配置密码后,就会强制所有访问 Redis 的客户端使用密码,相信现在没人还在使用 Redis 裸奔吧?

3、设置用户权限

设置用户权限,仅允许受信任的身份运行 Lua 脚本或任何其他潜在危险的命令。

在 Redis 中,可以通过 ACL(访问控制列表) 功能设置用户权限,从而限制特定用户只能运行受信任的命令,如:禁止运行 Lua 脚本或其他潜在危险的命令

注意,ACL 功能在 Redis 6.0+ 版本中才支持,如果版本较低,请先升级 Redis。

最后,赶紧检查 Redis 版本并修复吧,确保系统安全稳定运行。

版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。

更多文章推荐:

1.Spring Boot 3.x 教程,太全了!

2.2,000+ 道 Java面试题及答案整理(2024最新版)

3.免费获取 IDEA 激活码的 7 种方式(2024最新版)

觉得不错,别忘了随手点赞+转发哦!


Java技术栈
12.8k 声望31.4k 粉丝