现状 / 修复方向
stale-window vs 绝对滑动窗口语义评估 — 现状: 实现使用 Keycloak maxDeltaTimeSeconds 风格(last_failed_at > 15min 触发计数器 reset to 1),攻击者理论上可每 14min 尝试 4 次永不触发锁定。修复方向: 引入真实滑动窗口(ring-buffer 记录最近 N 次失败时间戳,窗口内计数超阈值即锁),或保留 stale-window 但将 window 缩短至 < lockout-TTL/threshold。触发条件: 观察到 stale-window-bypass 攻击 / 业务方要求绝对窗口语义
Files
cells/accesscore/internal/accountlockout/service.go
Trigger
观察到 stale-window-bypass 攻击 / 业务方要求绝对窗口语义
Source
PR-618 review F7
Migrated from docs/backlog/20260520/ on 2026-05-20 by scripts/migrate-backlog-to-project.sh.
Priority=P3 Estimate=Cx2 — 设置到 Project v2 fields by admin(需 project scope token)。
现状 / 修复方向
stale-window vs 绝对滑动窗口语义评估 — 现状: 实现使用 Keycloak
maxDeltaTimeSeconds风格(last_failed_at > 15min触发计数器 reset to 1),攻击者理论上可每 14min 尝试 4 次永不触发锁定。修复方向: 引入真实滑动窗口(ring-buffer 记录最近 N 次失败时间戳,窗口内计数超阈值即锁),或保留 stale-window 但将 window 缩短至 < lockout-TTL/threshold。触发条件: 观察到 stale-window-bypass 攻击 / 业务方要求绝对窗口语义Files
cells/accesscore/internal/accountlockout/service.goTrigger
观察到 stale-window-bypass 攻击 / 业务方要求绝对窗口语义
Source
PR-618 review F7
Migrated from
docs/backlog/20260520/on 2026-05-20 byscripts/migrate-backlog-to-project.sh.Priority=
P3Estimate=Cx2— 设置到 Project v2 fields by admin(需 project scope token)。