ScrutisWeb曝出嚴重漏洞,可遠程控制全球ATM!
2023年年初,Synack Red Team (SRT) 成員 Neil Graves、Jorian van den Hout 和 Malcolm Stagg 發現了CVE-2023-33871、CVE-2023-38257、CVE-2023-35763 和 CVE-2023-35189 漏洞 。
2023年7月,總部位于法國的軟件公司 Iagona 在其 ScrutisWeb 網絡應用程序的 2.1.38 版本中修補了這些漏洞。
一直以來,Synack 紅隊(SRT)全球安全研究人員經常會在 Synack 客戶的基礎架構和網絡服務器中發現漏洞,在某些 Synack 目標上,SRT 成員可以相互協作,最大限度地發揮廣泛的技能組合。
在最近與 Synack 客戶的一次合作中,SRT 某團隊發現了 ScrutisWeb 中存在的軟件缺陷,ScrutisWeb 是一種用于監控銀行和零售 ATM 機群的安全解決方案。
ScrutisWeb的開發商Iagona表示,ScrutisWeb可通過任何瀏覽器訪問,幫助全球各組織監控自動取款機,并在出現問題時縮短響應時間。ATM 機群可包括支票存款機等敏感設備以及連鎖餐廳的支付終端。
ScrutisWeb 具有一系列功能:
- 重新啟動或關閉一個終端或整個機群
- 檢索銀行服務信息
- 監控(ATM)銀行卡讀卡器
- 發送和接收文件(至 ATM)
- 遠程修改數據(在自動取款機上)
目標枚舉
Synack 客戶在此次合作中有超過 1,000 個唯一 IP 地址需要評估。在初步偵查期間,安全研究人員注意到有一個網絡服務器向訪問者發送了一個超大的 23MB JavaScript 文件。該文件中包含一個允許客戶端下載服務器 webroot 中完整路徑的函數:
this.window.location.href = "/Download.aspx?folder=" + name;
安全研究人員發現,提供"/"的文件夾名稱會導致 ScrutisWeb 壓縮整個網絡根,并將其作為下載文件發送到瀏覽器。于是他們按照設計的功能使用該功能下載了網絡根目錄。在檢查 Download.aspx 時發現它調用了 "Scrutis.Front.dll "庫,該庫似乎負責處理大部分用戶功能。
CVE-2023-33871: 絕對路徑遍歷
安全研究人員還注意到 "Download.aspx "的參數為 "文件 "或 "文件夾"。同時,他們還很快就找到了真正有趣的部分,即處理單個文件下載的字符串:
str = !path1.Contains(":") ? this.Server.MapPath(path1) : path1.Contains(":");
這段代碼查看的是作為 URL 的 "file "參數傳遞給該方法的 "path1 "變量。如果參數中不包含冒號,網絡服務器將返回與網絡根相關的文件,例如,"https://example.com/Download.aspx?file=thisfile.txt "將下載位于 "https://example.com/thisfile.txt "的文件。但是,如果參數中包含冒號,網絡服務器就會返回與系統相關的文件,例如 "https://www.example.com/Download.aspx?file=c:\file.txt" 將下載服務器上位于 "c:\file.txt "的文件。成功!我們可以從服務器上下載配置、日志和數據庫。
CVE-2023-35189: 遠程代碼執行
安全研究人員進一步檢查 Scrutis.Front.dll 后,發現了 AddFile() 方法。AddFile() 接受多部分表單 POST 請求,并將上傳的文件存儲到網絡目錄"/Files/telechar/"中。
這意味著未經身份驗證的用戶可以上傳任何文件,然后通過網絡瀏覽器再次查看。其中一個問題是,最終存放上傳文件的目錄已被配置為允許解釋和執行上傳的腳本。我們創建了一個運行簡單命令 "ipconfig /all "的概念驗證(poc.asp),并將其上傳到服務器。隨后,他們訪問了 "https://[redacted]/poc.asp "網站,服務器執行了系統命令 "ipconfig /all "并返回了響應,成功命令注入。
通常,人們會認為 RCE 是漏洞利用鏈的高潮。在這種情況下,通過利用其余漏洞獲取 ATM 控制器的用戶訪問權限,可以實現更大的惡意價值。可以在 Scrutis.Front.dll 中找到每個有漏洞的調用,并在未經身份驗證的情況下使用。
CVE-2023-38257: 不安全的直接對象引用
安全研究人員發現 GetUserDetails 方法原型是將單個整數作為 HTTP POST 請求的輸入。[HttpPost]public UIUser GetUserDetails([FromBody] int idUser)
同時, idUser 參數似乎是一個從數字 1 開始的連續整數值。通過向該函數發送數字為 1 的 POST,服務返回了用戶 "administrateur "的信息,包括加密密碼。
CVE-2023-35763 硬編碼加密密鑰
由于密碼顯然已加密,安全研究人員決定嘗試逆向工程加密機制。在方法名稱中搜索 "crypt "一詞,顯示了一個解密函數,該函數將密碼文本作為輸入,并返回一個明文 UTF8 字符串。該函數中有一行披露了明文字符串,該字符串被用作加密/解密用戶密碼的加密密鑰:
public static string Decrypt(string cipherString, bool useHashing)
{
...
numArray = cryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes("ENCRYPTIONKEY"));
...
return Encoding.UTF8.GetString(bytes);
}
安全研究人員編寫了一個簡單的 python 腳本,它可以獲取使用 CVE-2023-38257 發現的加密密碼,并將密碼解密為明文。至此已經可以以管理員身份登錄 ScrutisWeb了。
影響
CVE-2023-38257 和 CVE-2023-35763 這兩個漏洞讓以管理員身份登錄 ScrutisWeb 管理控制臺成為可能。惡意行為者可以監控機群中各個自動取款機的活動。控制臺還允許將 ATM 降為管理模式、上傳文件、重新啟動和完全關閉。需要進行進一步檢查,以確定是否可以將定制軟件上載到個別自動取款機上,以執行銀行卡外滲、Swift 轉賬重定向或其他惡意活動。不過,此類額外測試不在評估范圍之內。
CVE-2023-35189 還可用于清除 ScrutisWeb 上的日志,并刪除惡意行為者曾在那里活動的證據。從客戶端基礎架構中的這一立足點可能會發生額外的漏洞利用,使其成為惡意行為者面向互聯網的支點。
修復漏洞:盡快更新至 ScrutisWeb 2.1.38 版本
值得一提的是,Iagona 非常重視安全問題,在及時向研究人員通報進展的同時,還迅速解決了四個發現的問題。