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