1. 程式人生 > >Fortify漏洞之Path Manipulation(路徑篡改)

Fortify漏洞之Path Manipulation(路徑篡改)

繼續對Fortify的漏洞進行總結,本篇主要針對 Path Manipulation(路徑篡改)的漏洞進行總結,如下:

1、Path Manipulation(路徑篡改)                        

1.1、產生原因:

當滿足以下兩個條件時,就會產生 path manipulation 錯誤:

1. 攻擊者可以指定某一檔案系統操作中所使用的路徑。

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);

1.2、修復方案:

方案一:建立一份合法資源名的列表,並且規定使用者只能選擇其中的檔名。通過這種方法,使用者就不能直接由自己來指定資源的名稱了。 

但在某些情況下,這種方法並不可行,因為這樣一份合法資源名的列表過於龐大、難以跟蹤。因此,程式設計師通常在這種情況下采用方案二,黑名單+白名單 雙重過濾路徑的辦法。

方案二:在輸入之前,黑名單會有選擇地拒絕或避免潛在的危險字元(例如下面例子過濾了..字元)。同時建立一份白名單,允許其中的字元出現在資源名稱中,且只接受完全由這些被認可的字元組成的輸入。

技術分享圖片

 圖1.2.1:合法路徑的白名單字元

 技術分享圖片

圖1.2.2:過濾路徑的非法字元公共方法