DeepAudit 安全审计报告
报告信息
| 属性 | 内容 |
|---|---|
| 项目名称 | Redis |
| 任务 ID | 50b9acf6... |
| 生成时间 | 2026-07-07 11:16:35 |
| 任务状态 | COMPLETED |
| 耗时 | 9.6 分钟 |
执行摘要
安全评分: 0/100 [未通过] 严重 - 需要立即进行修复
漏洞发现概览
| 严重程度 | 数量 | 已验证 |
|---|---|---|
| 高危 (HIGH) | 7 | 1 |
| 中危 (MEDIUM) | 6 | 1 |
| 低危 (LOW) | 2 | 0 |
| 总计 | 15 | 2 |
审计指标
- 分析文件数: 737 / 737
- Agent 迭代次数: 68
- 工具调用次数: 117
- Token 消耗: 2,242,647
- 生成的 PoC: 4
高危 (High) 漏洞(CVE-2022-0543(Lua 沙盒逃逸,Debian 打包问题))
HIGH-1: src/scripting.c - Lua 脚本执行环境,需关注沙箱逃逸风险
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
src/scripting.c - Lua 脚本执行环境,需关注沙箱逃逸风险
HIGH-2: src/module.c - 模块系统,动态加载模块可能引入安全风险
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
src/module.c - 模块系统,动态加载模块可能引入安全风险
HIGH-3: src/cluster.c - 集群通信,需关注节点间认证和数据加密
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
src/cluster.c - 集群通信,需关注节点间认证和数据加密
HIGH-4: MODULE LOAD 命令无路径限制 - 可加载任意共享库
[已验证] [含 PoC] | 类型:
command_injection
AI 置信度: 100%
漏洞描述:
在 src/module.c 第4844行,MODULE LOAD 命令直接使用用户提供的路径参数调用 moduleLoad(),该函数在第4745行使用 dlopen() 加载任意共享库。没有对路径进行任何验证或限制,攻击者可以通过 MODULE LOAD /tmp/malicious.so 加载恶意模块,实现远程代码执行。
Impact: 攻击者可以加载任意共享库,实现远程代码执行,完全控制 Redis 服务器
漏洞代码:
if (moduleLoad(c->argv[2]->ptr,(void **)argv,argc) == C_OK)
addReply(c,shared.ok);
修复建议:
- 限制 MODULE LOAD 命令只能从指定目录加载模块 2. 添加路径验证,禁止使用包含目录分隔符的路径 3. 要求管理员权限执行 MODULE LOAD 命令
概念验证 (PoC):
通过 MODULE LOAD 命令加载恶意共享库
复现步骤:
- 上传恶意 .so 文件到服务器
- 执行 MODULE LOAD /tmp/malicious.so
- 恶意模块的 RedisModule_OnLoad() 函数被执行
PoC 代码:
MODULE LOAD /tmp/malicious.so
HIGH-5: src/config.c:529 - requirepass 配置解析,密码长度限制为 CONFIG_AUTHPASS_MAX_LEN
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
src/config.c:529 - requirepass 配置解析,密码长度限制为 CONFIG_AUTHPASS_MAX_LEN
HIGH-6: src/server.c:2632 - 磁盘持久化失败时拒绝写命令的保护机制
[未验证] | 类型: command_injection
AI 置信度: 60%
漏洞描述:
src/server.c:2632 - 磁盘持久化失败时拒绝写命令的保护机制
HIGH-7: src/aof.c - AOF 持久化文件写入,需关注文件权限和路径遍历
[未验证] | 类型: path_traversal
AI 置信度: 60%
漏洞描述:
src/aof.c - AOF 持久化文件写入,需关注文件权限和路径遍历
中危 (Medium) 漏洞
MEDIUM-1: AOF 文件重写期间临时文件权限可能不安全
[未验证] | 类型: other
AI 置信度: 70%
漏洞描述:
在 AOF 重写过程中,临时文件使用 fopen() 创建,默认权限由 umask 控制。在重写完成后通过 rename() 替换原文件。如果系统 umask 设置不当,临时文件可能在重写期间被其他进程读取,导致数据泄露。
Impact: 如果系统 umask 设置不当,临时文件可能被其他进程读取
漏洞代码:
snprintf(tmpfile,256,"temp-rewriteaof-%d.aof", (int) getpid());
fp = fopen(tmpfile,"w");
修复建议:
确保系统 umask 设置正确(如 022),限制临时文件权限
MEDIUM-2: 网络监听配置 - TCP 和 Unix Socket
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
Redis 支持 TCP 端口监听和 Unix domain socket 监听。如果未配置任何监听地址,服务器将退出。默认配置下监听 6379 端口,需关注绑定地址配置防止未授权外部访问。
MEDIUM-3: 命令处理安全检查
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
processCommand() 实现了多层安全检查:认证检查、命令存在性验证、参数数量校验、集群重定向、内存限制检查、磁盘持久化状态检查、最小从节点数量检查。
MEDIUM-4: 集群节点间通信缺乏认证和加密
[未验证] [含 PoC] | 类型: other
AI 置信度: 70%
漏洞描述:
在 src/cluster.c 中,集群节点间的通信(clusterSendMessage 等函数)没有实现认证机制或加密传输。节点间消息以明文形式发送,攻击者如果能够接入网络,可以伪造集群消息、窃取数据或执行中间人攻击。集群总线端口(默认 +10000)没有密码保护或 TLS 加密。
Impact: 攻击者可以伪造集群消息、窃取数据或执行中间人攻击
漏洞代码:
void clusterSendMessage(clusterLink *link, unsigned char *msg, size_t msglen) {
if (sdslen(link->sndbuf) == 0 && msglen != 0)
aeCreateFileEvent(server.el,link->fd,AE_WRITABLE|AE_BARRIER,
clusterWriteHandler,link);
link->sndbuf = sdscatlen(link->sndbuf, msg, msglen);
}
修复建议:
- 实现集群节点间认证机制 2. 支持 TLS 加密传输 3. 使用 IP 白名单限制集群节点连接
概念验证 (PoC):
攻击者接入集群网络后可以监听集群总线端口
复现步骤:
- 接入集群网络
- 监听集群总线端口(默认 16379)
- 捕获所有集群通信消息
PoC 代码:
tcpdump -i any port 16379
MEDIUM-5: Lua 调试器 redis.call() 封装风险 (ldbRedis)
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
ldbRedis() 函数封装了 redis.call() 调用,允许调试用户通过调试器执行任意 Redis 命令。虽然这需要调试模式,但结合 ldbEval 的代码执行能力,攻击者可能通过构造恶意 Lua 代码执行任意 Redis 命令,包括可能修改配置或访问敏感数据。
漏洞代码:
void ldbRedis(lua_State *lua, sds *argv, int argc) {
lua_getglobal(lua,"redis");
lua_pushstring(lua,"call");
lua_gettable(lua,-2);
for (j = 1; j < argc; j++)
lua_pushlstring(lua,argv[j],sdslen(argv[j]));
ldb.step = 1;
lua_pcall(lua,argc-1,1,0);
}
修复建议:
- 限制调试模式下可执行的 Redis 命令列表
- 对调试命令进行白名单过滤
- 增加调试会话的审计日志
MEDIUM-6: CONFIG SET dir 命令可改变工作目录导致路径遍历
[已验证] [含 PoC] | 类型:
path_traversal
AI 置信度: 100%
漏洞描述:
在 src/config.c 第1003-1007行,CONFIG SET dir 命令直接调用 chdir() 改变工作目录,没有对路径进行任何限制。攻击者可以通过改变工作目录,结合后续的 BGSAVE 或 REWRITEAOF 等操作,将数据写入任意目录。虽然 dbfilename 和 appendfilename 有 pathIsBaseName() 保护,但结合 dir 配置可以绕过此限制。
Impact: 攻击者可以将 Redis 数据文件写入任意目录,可能导致敏感文件被覆盖或系统配置被篡改
漏洞代码:
config_set_special_field("dir") {
if (chdir((char*)o->ptr) == -1) {
addReplyErrorFormat(c,"Changing directory: %s", strerror(errno));
return;
}
}
修复建议:
- 对 dir 配置添加路径验证,限制只能使用特定目录 2. 或使用 chroot 限制 Redis 的文件系统访问范围
概念验证 (PoC):
通过 CONFIG SET dir 改变工作目录,结合 BGSAVE 将数据写入任意目录
复现步骤:
- CONFIG SET dir /etc
- CONFIG SET dbfilename evil.rdb
- BGSAVE
- RDB 文件被写入 /etc/evil.rdb
PoC 代码:
CONFIG SET dir /etc
CONFIG SET dbfilename evil.rdb
BGSAVE
低危 (Low) 漏洞
LOW-1: 网络连接接受无速率限制 - 潜在的 DoS 风险
[未验证] [含 PoC] | 类型: other
AI 置信度: 60%
漏洞描述:
在 src/networking.c 第726-744行,acceptTcpHandler() 使用 MAX_ACCEPTS_PER_CALL 限制每次事件循环接受的连接数,但没有全局速率限制。攻击者可以通过快速建立大量连接消耗系统资源。虽然 maxclients 配置可以限制最大连接数,但缺乏连接速率限制。
Impact: 可能导致 Redis 服务拒绝服务
漏洞代码:
void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
int cport, cfd, max = MAX_ACCEPTS_PER_CALL;
...
while(max--) {
cfd = anetTcpAccept(server.neterr, fd, cip, sizeof(cip), &cport);
修复建议:
- 添加全局连接速率限制 2. 使用 iptables 或防火墙进行速率限制 3. 配置合理的 maxclients 值
概念验证 (PoC):
攻击者可以快速建立大量 TCP 连接消耗系统资源
复现步骤:
- 使用工具快速建立大量 TCP 连接
- 消耗 Redis 的文件描述符和内存资源
- 可能导致 Redis 服务拒绝服务
PoC 代码:
for i in $(seq 1 10000); do nc -z target_ip 6379 & done
LOW-2: 密码以明文形式存储在内存中
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
Redis 的 requirepass 密码以明文形式存储在 server.requirepass 中。虽然这是 Redis 的设计选择,但攻击者如果能够读取进程内存(如通过 /proc/pid/mem 或核心转储),可以直接获取密码。此外,CONFIG REWRITE 命令会将密码写入配置文件,可能导致密码泄露。
漏洞代码:
if (server.requirepass && !c->authenticated && c->cmd->proc != authCommand) {
flagTransaction(c);
addReply(c,shared.noautherr);
return C_OK;
}
修复建议:
- 考虑使用哈希存储密码(但需注意性能影响)
- 确保配置文件权限设置正确(600)
- 避免在日志中记录密码
- 使用环境变量或外部密钥管理服务
修复优先级建议
基于已发现的漏洞,我们建议按以下优先级进行修复:
- 高优先级: 在 1 周内修复 7 个高危漏洞
- 中优先级: 在 2-4 周内修复 6 个中危漏洞
- 低优先级: 在日常维护中处理 2 个低危漏洞
本报告由 DeepAudit - AI 驱动的安全分析系统生成