支援全球2億人病歷的開源電子健康紀錄系統OpenEMR,遭Project Insecurity揭露存在多個嚴重等級高的安全性漏洞,從身分驗證旁路、SQL資料隱碼、遠端程式碼執行以及任意檔案操作等漏洞都有,OpenEMR社群已積極處理漏洞問題,使用者務必進行OpenEMR版本更新。

研究團隊從GitHub上下載了OpenEMR 5.0.1.3程式碼進行安全性測試,發現了許多嚴重的漏洞。報告一開始提到的漏洞是病患入口頁面的身分驗證旁路漏洞,受影響的共有15個Php頁面,沒有經過身分驗證的攻擊者,可以簡單的瀏覽登入頁面並修改請求網址後,繞過登入頁面存取想訪問的頁面,這個漏洞造成的影響,會讓網頁程式隨機展示真實病患資料。

OpenEMR也有嚴重的SQL資料隱碼漏洞,總共有8個Php程式受到影響,未經授權的用戶可以插入SQL查詢指令,查看特定資料庫資料,甚至執行特定資料庫功能。像是對Search_code.php在發送POST請求時,可以在容易受攻擊的文字參數中,使用有效負載進行SQL資料隱碼,文字參數在沒有任何消毒處理下,直接被用於SQL查詢中,駭客可以利用此漏洞對OpenEMR介面進行身份驗證。

另外一個SQL資料隱碼的例子,則是OpenEMR程式碼的品質不一,在Anything_simple.php的SQL查詢,有使用占位符來防止SQL資料隱碼攻擊,但是在Forms.inc中的getProviderIdOfEncounter函式,卻沒有使用相同的方法來防範攻擊,把來自使用者輸入的參數,透過getProviderIdOfEncounter函式傳遞直接放入SQL查詢中,使網頁應用程式容易受到SQL資料隱碼攻擊。 

Project Insecurity研究團隊對OpenEMR,做了多個遠端程式碼執行攻擊的概念性驗證,而且因為OpenEMR其他Php程式安全性不夠高,導致攻擊更加容易成功。研究團隊舉例,其中一個遠端程式碼執行漏洞落在Sl_eob_search.php中,不過要完成攻擊必須獲得Print_command全域變數,不過攻擊者可以從Edit_globals.php這個程式輕易的取得Print_command。

另外,數個病患入口頁面的POST變數,在Import_template.php中被定義,而這些變數在使用者輸入後,沒經過消毒處理的情況下,就直接被以函式傳遞,使攻擊者有機可乘,可以用病患權限從系統上傳、修改、存取或是刪除檔案。研究團隊以任意檔案寫入為例,攻擊者可以從入口頁面製造請求,上傳任何型態的檔案包括Php檔案,而這將幫助攻擊者達成程式碼執行以及特權提升。攻擊者不只可以寫入任意檔案,甚至可以讀取及刪除任意檔案。

Project Insecurity在2018年7月7日通報漏洞給OpenEMR,7月20日OpenEMR官方就推送了漏洞補丁更新,研究團隊提到,OpenEMR以非常積極的態度處理漏洞問題。

熱門新聞

Advertisement