趨勢科技發現 Apache Cordova 應用程式框架存在一個漏洞,攻擊者只要透過點擊網址就能修改應用程式的行為。修改範圍從干擾應用程式使用者到徹底讓應用程式崩潰都有可能。
這個編號為CVE-2015-1835的高危險漏洞影響Apache Cordova 4.0.1以下的所有版本。Apache已經發布一個安全公告確認此漏洞。這代表著大多數基於Cordova的應用程式(佔 Google Play上所有應用程式的5.6%)都可能受此漏洞影響。
該漏洞被存在於Cordova的一個功能內,讓Secondary Configuration Variables(也就是偏好設定)可以由Base Activity的Intent Bundles設定。此功能是Apache在2010年11月所發布程式碼更新(也就是Github的提交)的一部分,Cordova Android也更新為0.9.3。
我們的研究顯示,如果Base Activity沒有被適當的防護且偏好設定設成預設值,攻擊者可以改動偏好設定和和竄改應用程式本身的外觀和行為。
漏洞攻擊成功的先決條件
只要符合兩個條件就能成功地利用此漏洞:
- 應用程式至少有一個元件延伸自Cordova的Base Activity:CordovaActivity或設定Cordova框架(像java)沒有被適當的防護,也就是說可以被應用程式外部存取。
- 至少一個Cordova支援的偏好設定(除了LogLevel的和ErrorUrl)未在設定檔案(xml)中被定義。
它如何運作
要了解該漏洞如何運作,要先來看看應用程式的偏好設定如何設置。
Secondary Configuration Variables(也就是偏好設定)是一組保留給開發者設定他們應用程式的變數。它們是基於Cordova應用程式內建特性的來源,也只應該由應用程式開發者控制。在運行初始化時對這些變數進行任何篡改都肯定會搞亂應用程式的正常行為。
Android上的Apache Cordova框架(直到4.0.1)支援以下偏好設定:
- Fullscreen
- DisallowOverscroll
- BackgroundColor
- Orientation
- KeepRunning
- LoadUrlTimeoutValue
- SplashScreen
- SplashScreenDelay
- InAppBrowserStorageEnabled
- LoadingDialog
- LoadingPageDialog
- ErrorUrl
- ShowTitle
- LogLevel
- SetFullscreen
- AndroidLaunchMode
- DefaultVolumeStream
這些偏好設定在Cordova框架裡可以設定在config.xml,或是不加定義而使用預設值。重要的是許多開發者其實都會採取後者的作法,因為並非所有的偏好設定都為其應用程式所需要。一旦偏好設定沒有被明確地設定在config.xml,Cordova框架會用Base Activity的Intent Bundle設定。
圖1、在CordovaActivity初始化過程中,應用程式載入Intent Bundle並將其複製到偏好設定
圖2、當不存在於config.xml時,應用程式從Bundle載入偏好設定值
應用程式開發者通常會被指引去延伸應用程式內的CordovaActivity好讓這種混合架構可以運作。
圖3、延伸自CordovaActivity的子類別開啟網頁
不幸的是,在此種情況中,這一常見的開發者指引讓應用程式出現會受到攻擊的弱點。延伸Activity代表它可以從應用程式外部存取,因此讓攻擊者可以注入惡意Intent Bundles到Activity來篡改應用程式的內建特性,可能來自遠端網頁伺服器或本機上的有害應用程式。
我們發現這些偏好設定(除了LogLevel的和ErrorUrl)都可能受到影響。Cordova框架用特別方式來處理這兩個偏好設定,使得它們不受此漏洞影響。
我們相信這漏洞很有可能遭受攻擊,因為要滿足攻擊成功所需的條件是常見的開發者做法。大多數基於Cordova的應用程式會延伸「CordovaActivity」,也很少明確地在其設定檔中定義所有偏好設定。此外,所有用Cordova命令列介面(CLI)打造的基於Cordova應用程式都自動滿足前面所提到的漏洞攻擊成功先決條件,也因此都會受到影響。
概念證明
我們已經製作一個典型的遠端Intent注入攻擊示範,它利用一個有漏洞的Android設備(華為T950E手機)上之前所揭露的Intent URL Scheme漏洞。
底下是位在遠端伺服器上的HTML程式碼:
<html>
<body bgcolor=white text=red>
<font size=10>Your Cordova APP</center>
<br>
<font size=20> is hacked!!</font>
<script>
setTimeout(function()
{location.href=”intent:#Intent;S.loadingpagedialog=hacked,haha..blabla..please contact with www.trendmicro.com.cn or send to seven_shen@trendmicro.com.cn for solotion ;SEL;component=com.trendmicro.justademo/.MainActivity;end;”},5000);
</script>
</body>
</html>
只要透過設備上的瀏覽器連上網頁,本機設計好的基於Cordova應用程式會被注入不想要的對話框跟派送文字訊息。以下是如何運作的示範影片:
我們還可以修改其他應用程式偏好設定,並且將這些狀況製作成影片:
- 漏洞攻擊SplashScreen及SpalshScreenDelay來以「res/drawable」下的資源注入啟動畫面到基於Cordova的應用程式,並隨意控制顯示時間。
- 漏洞攻擊BackgroundColor來篡改基於Cordova應用程式的背景顏色。
- 漏洞攻擊SefFullScreen來篡改基於Cordova應用程式的顯示設定。
- 漏洞攻擊DefaultVolumeStream來篡改音量按鈕控制器的基本功能(例如將原本預設的手機音量大小控制改成媒體音量控制)
我們還發現可以透過注入特殊資料到Intent Bundle來遠端讓基於Cordova的應用程式崩潰。
adb shell am start -n com.trendmicro.justademo/.MainActivity –es backgroundcolor ffffff
這攻擊會導致Cordova框架異常並強制應用程式關閉。
圖4、應用程式因為漏洞攻擊而崩潰
可能的影響
到目前為止,我們已經發現此漏洞會對基於Cordova的應用程式和其使用者造成以下可能影響:
- 篡改應用程式外觀
- 注入彈出視窗和文字訊息
- 注入啟動畫面
- 修改基本功能
- 讓應用程式崩潰
這個漏洞不僅會影響應用程式,也對數千個Apache Cordova第三方外掛程式帶來很大的風險,特別是因為它們的功能高度依賴偏好設定。
解決方案
我們已經將此漏洞回報給Apache,他們已經發布關於此漏洞的正式公告。我們建議Android應用程式開發者將Cordova框架更新到最新版本(4.0.2版),重建新的應用程式版本。這可以防止應用程式遭受針對此漏洞的攻擊者修改。
@原文出處:Trend Micro Discovers Apache Cordova Vulnerability that Allows One-Click Modification of Android Apps作者:Seven Shen(行動威脅分析師)