受影響產品總結
Pritunl VPN 用戶端服務存在一個任意檔案寫入漏洞,攻擊者可以以SYSTEM 身分在Windows 系統上執行。此漏洞源自於Pritunl ProgramData 資料夾的不安全目錄權限。攻擊者可以利用該任意檔案寫入漏洞進行特權提升,因為特權的Pritunl VPN 服務在未指定可執行檔完整路徑的情況下以SYSTEM 身分執行指令。
影響:在Windows 上提升特權至SYSTEM。
- 廠商: Pritunl
- 產品: Pritunl VPN 用戶端
- 確認受影響版本: 1.2.3019.52
- 修復版本: 1.2.3019.52a
- 產品連結: Pritunl VPN 用戶端安裝
- 確認受影響平台: Windows
什麼是Pritunl VPN?
Pritunl 是一個分散式VPN 伺服器,允許企業透過站點到站點的連接以及遠端使用者存取將其資料中心和多個雲端環境連接在一起。作為一個開源項目,它是尋求OpenVPN 相容性但具備更大規模和雲端相容性的公司的常見選擇。
連接到Pritunl VPN 提供了一些選項。雖然伺服器頁面聲明“所有OpenVPN 用戶端均受支援”,但使用Pritunl OpenVPN 用戶端提供了額外的整合。
安全性也是該應用程式的重點。在其安全頁面上,Pritunl 自稱為“最安全的VPN 伺服器”,並將其開源程式庫作為“保證網路安全的唯一手段”進行推廣。
作為滲透測試人員,我們多次接觸到Pritunl,通常是在連接AWS/GCP/Azure 雲端環境時。
以SYSTEM 身分的任意檔案寫入技術細節
使用者將VPN 設定檔匯入Pritunl VPN 用戶端後,會寫入檔案至「%APPDATA%\pritunl\profiles[profile_ID].ovpn」。當使用者嘗試連線到該設定檔時,VPN 設定檔會移除危險的OpenVPN 指令,然後由Pritunl VPN 服務寫入「%PROGRAMDATA%\Pritunl[profile_ID].ovpn」。檔案寫入後,Pritunl VPN 服務會作為openvpn.exe 可執行檔的包裝器執行OpenVPN,並在「–config」 參數中提供經過清理的設定檔。
由於預設情況下,任何使用者都可以在%PROGRAMDATA%\Pritunl* 中建立新文件,因此可以不斷寫入包含危險OpenVPN 指令的設定檔到該目錄中,匹配的設定檔ID 會導致Pritunl VPN 服務最終以修改後的設定檔執行openvpn.exe。
儘管openvpn.exe 是以“–security-script 1” 標誌執行的,以防止外部命令執行,但這仍然允許使用“log” OpenVPN 命令,該命令會將日誌輸出寫入任何指定的文件,並且可以控制日誌輸出的部分內容。
在匯入名為「privesc」 的設定檔後,可以使用下列PowerShell 命令並在循環運行時不斷點擊「連線」:
powershell
$profile_id = ((Select-String '{"name":"privesc"' $env:APPDATA\pritunl\profiles\*).filename).split('.')[0];
while (1) {
"client`ntls-client`ndev TUN`nlog `"C:\\Program Files (x86)\\Pritunl\\ipconfig.bat`"`nauth-user-pass`nca `"INJECTED CONTENT`"" | Add-Content "C:\ProgramData\Pritunl\$profile_id"
}
利用檔案寫入進行完全特權提升
可以透過以下方式利用以SYSTEM 身分的任意檔案寫入漏洞來取得以SYSTEM 身分執行命令的權限。
每次使用Pritunl VPN 用戶端嘗試連線時,Pritunl VPN 服務會以SYSTEM 身分呼叫「ipconfig」 指令。執行“ipconfig” 的命令列未指定可執行檔的完整路徑。由於此指令是在「C:\Program Files (x86)\Pritunl\」 的工作目錄中執行,因此可以利用上述任意檔案寫入漏洞將指令寫入「C:\Program Files (x86)\Pritunl\ipconfig .bat」。然後,透過再次嘗試使用Pritunl VPN 用戶端連接,將以SYSTEM 身分執行該批次檔。
結論
揭露時間軸
雖然這是我們在VPN 用戶端中發現的眾多問題之一(更多資訊將在不久後發布),但這是唯一一個開源專案。
這也提醒我們,雖然開源軟體確實提供了透明度的好處,但並不是安全的萬靈藥。
感謝Zachary Huff 和Pritunl 團隊在披露後迅速修復漏洞。
- 2022年2月17日:向Pritunl 報告
- 2022年2月17日:廠商修復提交至GitHub 倉庫
- 2022年3月29日:Pritunl 客戶端v1.2.3019.52a 發布並由廠商宣布
- 2022年4月5日:完全揭露(部落格文章)發布