Skip to content

[跨系统] Redis 故障全栈 fail-open 且无熔断器,限流失效允许 DoS #48

Description

@ULookup

问题

Redis 故障时全栈 fail-open 且无熔断器,同一反模式横跨三子系统:

  • 鉴权 is_revoked 返回 false(A3)→ 已吊销 token 复活
  • 限流 RateLimiter::allow 返回 true → 限流失效,允许 DoS
  • 去重 SETNX 异常后继续(由 DB 唯一索引兜底,dedup spec)

connect_timeout=2s 致每请求先阻塞再 fall through,连接池耗尽、延迟雪崩、DB 被打穿。其中 RateLimiter 无任何兜底(不同于去重有 DB 唯一索引)。

位置

common/auth/jwt_store.hpp:87-88common/dao/data_redis.hpp(RateLimiter);transmite/source/transmite_server.h:191-194

影响

Redis 宕机期间限流失效允许 DoS、已吊销 token 复活;延迟雪崩 + DB 被打穿。

建议

引入统一的 Redis 健康探针 + 熔断器;Redis 不可用时短路(仅服务 L1/本地),并对限流采用本地令牌桶降级而非 fail-open。

来源

跨系统基础设施评审(登录鉴权 + 多级缓存 + 分布式锁,2026-07-07)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Severity/S1area/infra跨系统基础设施bugSomething isn't workingsecurity安全类缺陷(凭据泄露/鉴权绕过/fail-open)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions