[安全性] 两个未同步的 Redis 安全性修复,影响 KeyDB
作者: dkgkdfg65创建于 2026年5月18日更新于 2026年7月23日
□ 总结
KeyDB的来源包含两个安全漏洞,在Redis上游静默地被固定(没有CVE,没有GHSA——通过承诺日志分析发现). 修正尚未移植到 KeyDB 。
□ 第1期:在RM RegisterClusterMessage Receivever中免费使用
** 严重性**:高(UAF,模块触发) ** 位置**: " src/module.cpp " 线路6225 ** Redis 固定号**:执行`303667a40cdf5032b1044e94dfc6860a15414e03'(2026年4月23日)
当模块解除对集群消息接收器(召回=NULL)的注册时,去掉头节点会更新错误指针:
翻译: // src/module.cpp:6222-6225 (可变) . 如果(预) prev->next =r->next; (中文(简体) ). 其他情况 组回历 [类型] - > 下个 = r- >后; // BUG zfree(r) ; (中文(简体) ).
在 " zfree(r) " 后, " ClusterReceivers[类型] " 仍然指向释放的记忆。 任何后续的反向偏移都会给一个被忽略的指针.
** Fix**: 将“集群检索器”[类型]->后期=r->后期;`改为“集群检索器[类型]=r->后期;'
□ 第2期:通过SENTINEL SET进行哨兵配置注射
** Severity **: HH(在哨兵重启时通过配置注射执行代码)
** 地点**:`src/sentinel.cpp'`sentinelSetCommand ()'行~4001,特别是认证-通过(4084-4089)、认证-用户(4090-4095)、通知-说明(4055-4063)、客户-重新定性-说明(4064-4083)
** Redis 固定号**:执行`3e1afec688dc3f9354277ce6ad522996ee4f2a6'(2026年5月5日)
** 类型**:CWE-93-CWE-94
KeyDB的 SENTINEL SET 处理器在用户控制的字符串字段中接受任意控制字符(包括QQr\n'),并在不逃跑的情况下将其粘接到 Sentinel 配置文件上. 使用SENTINEL SET访问的经认证的攻击者可以注入任意的配置指令:
SENTINEL SET 我的大师授权通过 "秘密\r\ nnotification -scription /tmp/evil.sh"
在下次哨兵重启时,持续配置包含一个被注入的"通知-标语"行,在故障后的事件中执行.
(来自Redis):
1. 在SENTINEL SET/监测员/CONFIG SET入境点加上`SentinelStringControlChars ()'——拒绝0x00-0x1F和0x7F
2. 增加`SentinelSdscat ConfigArg()'——在价值需要逃避时使用`sdscatrepr'(深度防卫)
^ 参考文献
- Redis无声固定303667a40:<https://GitHub.com/ZRedis/ZRedis/commit/303667a40>
- Redis无声固定3e1afec68:<https://GitHub.com/ZRedis/Redis/commit/3e1afec68>
注:由于KeyDB没有安全数据,所以报告GitHub。 请告知是否喜欢私人频道 .内容来源: Snapchat/KeyDB