根據 Okta 最近釋出的安全公告,其 AD/LDAP 委託認證系統在2024年7月至10月期間存在一個漏洞。技術社群的分析揭示了導致這個安全問題的架構決策的深層原因。
技術根源
該漏洞源於 Okta 使用 BCrypt 生成快取金鑰的實現方式。系統將使用者ID、使用者名稱和密碼進行拼接以建立快取金鑰,但 BCrypt 的72位元組限制造成了問題。當用戶名超過52個字元時,密碼部分可能會在快取金鑰中被截斷,這可能導致僅使用使用者名稱就能透過之前儲存的快取金鑰進行認證。
發現的設計反模式
安全專家社群指出了 Okta 方案中的幾個架構問題。主要問題包括:
- 使用密碼雜湊演算法 BCrypt 來生成快取金鑰
- 在單個雜湊中混合識別符號(使用者ID、使用者名稱)和機密資訊(密碼)
- 未考慮 BCrypt 的已知長度限制
- 拼接過程中的分隔符處理不當
更好的實現方案
社群提出了幾個可以防止此漏洞的替代方案:
- 將密碼儲存與快取金鑰生成分開
- 使用 HMAC 或專用金鑰派生函式(如 HKDF)來生成快取金鑰
- 實現適當的欄位長度字首而不是使用分隔符
- 在拼接前分別對各個欄位進行雜湊處理
快取實現的考慮因素
該漏洞的利用需要特定條件:要麼 AD/LDAP 代理無法訪問,要麼高流量情況導致快取命中。這突顯了認證系統中效能最佳化和安全性之間的微妙平衡。社群強調,透過密碼更改進行快取失效可能是原始設計中的一個關鍵考慮因素,儘管實現證明是有缺陷的。
影響和解決方案
Okta 已透過將加密操作從 BCrypt 切換到 PBKDF2 來解決此漏洞。使用 Okta AD/LDAP 委託認證的組織應調查2024年7月23日至10月30日期間的系統日誌,以查詢潛在的利用情況,特別是對於使用者名稱長度為52個字元或更長的使用者。
行業反應
安全社群對 Okta 的披露時機表示關注,因為公告是在週五下午晚些時候釋出的。這引發了關於安全披露透明度以及身份和訪問管理行業需要更標準化披露實踐的討論。