界: Input Validation and Representation

輸入驗證和表示法問題是由中繼字元、替代編碼和數值表示法引起的。信任輸入會導致安全問題。問題包括:「Buffer Overflows」、「Cross-Site Scripting」攻擊、「SQL Injection」及其他許多問題。

Android Class Loading Hijacking

Abstract
從不可信賴的資源或在不可信賴的環境中載入類別,可能會導致應用程式代表攻擊者執行惡意指令。
Explanation
Android Class Loading Hijacking 弱點有以下兩種形式:

- 攻擊者可以變更程式為載入類別而搜尋的目錄名稱,從而指向處於其控制下之某個目錄的路徑:攻擊者明確控制應該從其中搜尋類別的路徑。

- 攻擊者可以篡改載入類別的環境:攻擊者間接控制路徑名稱代表的意義。

在此案例中,我們著重於第一種情況,即攻擊者可以控制為要載入之類別而搜尋的目錄的可能性。在以下情況下,會發生此類型的 Android Class Loading Hijacking 弱點:

1. 資料從不可信賴的來源進入應用程式。



2. 資料用作代表程式庫目錄的整個字串或一部分字串,以便搜尋要載入的類別。



3. 藉由從程式庫路徑執行程式碼,應用程式會給予攻擊者不應該擁有的權限或能力。

範例 1:以下程式碼使用使用者可變更的 userClassPath 來決定搜尋要載入的類別所在的目錄。


...
productCategory = this.getIntent().getExtras().getString("userClassPath");
DexClassLoader dexClassLoader = new DexClassLoader(productCategory, optimizedDexOutputPath.getAbsolutePath(), null, getClassLoader());
...


此程式碼能夠透過修改 userClassPath 的結果來指向所控制的其他路徑,從而讓攻擊者利用應用程式的提升權限,載入程式庫並潛在地執行任意程式碼。因為程式不會驗證從環境讀取的值,所以如果攻擊者可以控制 userClassPath 的值,則攻擊者便可使用與原始應用程式相同的權限,愚弄應用程式,讓應用程式指向他們所控制的目錄,從而載入他們所定義的類別。

範例 2:以下程式碼使用使用者可變更的 userOutput 來決定應寫入最佳化 DEX 檔案的目錄。


...
productCategory = this.getIntent().getExtras().getString("userOutput");
DexClassLoader dexClassLoader = new DexClassLoader(sanitizedPath, productCategory, null, getClassLoader());
...



此程式碼可讓攻擊者指定最佳化 DEX 檔案 (ODEX) 的輸出目錄。然後,此程式碼還會讓惡意使用者將 userOutput 值變更為他們所控制的目錄,如外部儲存裝置。一旦完成竄改,便只需將輸出的 ODEX 檔案替換為惡意 ODEX 檔案,就可以使用與原始應用程式相同的權限執行該動作。
References
[1] Android Class Loading Hijacking Symantec
desc.dataflow.java.android_class_loading_hijacking