Fortify Audit Workbench 筆記 Path Manipulation


Path Manipulation

Abstract

通過用戶輸入控制 file system 操作所用的路徑,借此攻擊者可以訪問或修改其他受保護的系統資源。

Explanation

當滿足以下兩個條件時,就會產生 path manipulation 錯誤: 1. 攻擊者能夠指定某一 file system 操作中所使用的路徑。 2. 攻擊者可以通過指定特定資源來獲取某種權限,而這種權限在一般情況下是不可能獲得的。 例如, 在某一程序中,攻擊者可以獲得特定的權限,以重寫指定的文件或是在其控制的配置環境下運行程序。
例 1: 下面的代碼使用來自於 HTTP 請求的輸入來創建一個文件名。 程序員沒有考慮到攻擊者可能使用像 "../../tomcat/conf/server.xml" 一樣的文件名,從而導致應用程序刪除它自己的配置文件。

String rName = request.getParameter("reportName");
File rFile = new File("/usr/local/apfr/reports/" + rName);
...
rFile.delete();

例 2: 下面的代碼使用來自於配置文件的輸入來決定打開哪個文件,並返回給用戶。 如果程序在一定的權限下運行,且惡意用戶能夠篡改配置文件,那么他們可以通過程序讀取系統中以 .txt 擴展名結尾的所有文件。

fis = new FileInputStream(cfg.getProperty("sub")+".txt");
amt = fis.read(arr);
out.println(arr);

Recommendation

防止 path manipulation 的最佳方法是采用一些間接手段:
例如創建一份合法資源名的列表,並且規定用戶只能選擇其中的文件名。 通過這種方法,用戶就不能直接由自己來指定資源的名稱了。
但在某些情況下,這種方法並不可行,因為這樣一份合法資源名的列表過於龐大、難以跟蹤。 因此,程序員通常在這種情況下采用黑名單的辦法。 在輸入之前,黑名單會有選擇地拒絕或避免潛在的危險字符。
但是,任何這樣一份黑名單都不可能是完整的,而且將隨着時間的推移而過時。 比較好的方法是創建白名單,允許其中的字符出現在資源名稱中,且只接受完全由這些被認可的字符所組成的輸入。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM