SolarWinds Web Help Desk 漏洞攻擊者可訪問存儲的密碼,PoC 已發(fā)布
SolarWinds 的 Web Help Desk 軟件中存在一個嚴重漏洞(CVE-2024-28989),攻擊者可以通過其 AES-GCM 實現(xiàn)中的加密弱點解密敏感憑據(jù),包括數(shù)據(jù)庫密碼和 LDAP/SMTP 認證密鑰。該漏洞在 12.8.5 版本中得到了修復,其根源在于可預測的加密密鑰和 nonce 重用,使得即使沒有直接系統(tǒng)訪問權限,也能解密存儲的秘密信息。
Web Help Desk 加密設計缺陷
據(jù) NetSPI 團隊稱,該漏洞存在于 com.solarwinds.whd.symmetric.AESGCMSymetricCryptoProvider 類中,該類負責管理存儲在數(shù)據(jù)庫備份和配置文件中的憑據(jù)的 AES-GCM 加密。研究人員發(fā)現(xiàn)了兩個主要缺陷:
靜態(tài)且可預測的加密密鑰
默認的 AES-GCM 密鑰(defaultKey)被硬編碼在 whd-crypto.jar 文件中的 cryptconfig.properties 中。這使得無需進一步訪問系統(tǒng)即可輕松解密標記為 {AES}<base64> 的秘密信息。
例如,.whd.properties 中嵌入的 PostgreSQL 密碼使用了此密鑰:
第二個密鑰派生機制進一步加劇了風險。SecretKeyServiceImpl 類使用數(shù)據(jù)庫中 init_code 值與靜態(tài)十六進制值(0xBABEFACE)進行異或運算來生成密鑰。
由于 init_code 通常低于 0x10000,暴力破解變得計算上輕而易舉:
Nonce 重用與密鑰流恢復
AES-GCM 的安全性依賴于每次加密使用唯一的 nonce。然而,Web Help Desk 在操作中復用了 nonce,使得攻擊者可以通過已知的明文-密文對恢復密鑰流。
攻擊者可以將已知的憑據(jù)(例如 Password1)與其密文進行異或運算以提取密鑰流,然后解密使用相同 nonce 加密的其他秘密信息:
漏洞利用途徑
- 提取硬編碼密鑰: 反編譯 JAR 文件以從 cryptconfig.properties 中獲取 defaultKey。
- 暴力破解轉換后的密鑰: 計算 init_code ^ 0xBABEFACE,針對訂閱者 ID(≤ 65,535 種可能)。
- 解密秘密信息: 使用派生密鑰解密備份或 .whd.properties 中的 AES-GCM 密文。
例如,使用密鑰 19950 解密 frcLMeS3nchpg_Ucxz… 后得到了 Password1,展示了低熵密鑰如何使實際攻擊成為可能。
在一次滲透測試中,NetSPI 團隊解密了一個 oauth2_client_secret 和 LDAP 查詢賬戶密碼。這些憑據(jù)允許通過 Connect-AzAccount 訪問 Azure AD,并在網(wǎng)絡內進行橫向移動。
緩解措施
升級至 v12.8.5: SolarWinds 修復了密鑰生成邏輯并強制執(zhí)行了適當?shù)?nonce 隨機化。