沒有指定絕對路徑就加載庫會導致程序加載攻擊者提供的惡意的庫。
Process control 漏洞主要表現為以下兩種形式:
— 攻擊者可以篡改程序加載的庫的名稱:攻擊者直接地控制庫所使用的名稱。
— 攻擊者能夠篡改庫加載的環境:攻擊者間接控制庫名稱的含義。
這種情況下,我們主要考慮第二種情況,攻擊者通過程序加載指定庫的惡意版本,以此來控制環境的可能性。
1. 攻擊者為應用程序提供一個惡意的庫。
2. 應用程序因為未指定一個絕對的路徑,或未驗證加載的文件而加載了惡意的庫。
3. 通過在庫中執行代碼,應用程序授予攻擊者在一般情況下無法獲得的權限或能力。
例:以下代碼使用 System.loadLibrary() 加載了一個名為 library.dll 的本地庫中的一段代碼,它通常可以在標準系統目錄中找到。
...
System.loadLibrary("library.dll");
...
System.loadLibrary() 只會接受庫的名稱,而不接受庫的路徑。根據 Java 1.4.2 API 文檔,這個函數會進行如下操作 [1]:library.dll 放在高于應用程序需要加載的文件的位置,那么應用程序就會加載該惡意代碼,而不會選擇加載最初需要的文件。由于應用程序的這一特性,它會以較高的權限運行,這就意味著攻擊者的 library.dll 內容將以較高的權限運行,從而可能導致攻擊者完全控制整個系統。
[1] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A1 Unvalidated Input
[2] Standards Mapping - OWASP Top 10 2007 - (OWASP 2007) A4 Insecure Direct Object Reference
[3] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A4 Insecure Direct Object References
[4] Standards Mapping - Security Technical Implementation Guide Version 3 - (STIG 3) APP3510 CAT I, APP3570 CAT I
[5] Standards Mapping - Security Technical Implementation Guide Version 3.4 - (STIG 3.4) APP3510 CAT I, APP3570 CAT I
[6] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 114
[7] Java 1.4.2 API Documentation Sun Microsystems
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 6.3.1.1, Requirement 6.5.4
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 - (PCI 2.0) Requirement 6.5.8
[11] Standards Mapping - FIPS200 - (FISMA) SI