程式碼安全測試第三期:路徑遍歷漏洞的防範與檢測

zktq2021發表於2021-05-20

路徑遍歷漏洞是什麼?

為了識別位於受限的父目錄下的檔案或目錄,軟體使用外部輸入來構建路徑。由於軟體不能正確地過濾路徑中的特殊元素,能夠導致訪問受限目錄之外的位置。

許多檔案操作都發生在受限目錄下。攻擊者透過使用特殊元素(例如,“..”、“/”)可到達受限目錄之外的位置,從而獲取系統中其他位置的檔案或目錄。例如”../”作為一種常見的特殊字串,在大多數作業系統中被解釋為當前位置的父目錄,這種使用特殊元素../的路徑遍歷漏洞又被稱為 相對路徑遍歷。路徑遍歷還包括使用絕對路徑名(如"/usr/local/bin"),用於訪問非預期的檔案,這稱為 絕對路徑遍歷

路徑遍歷漏洞的構成條件有哪些?

1、資料從不可靠來源(包括但不侷限於不可靠使用者的輸入資訊或是不可靠使用者可能更改的檔案)進入應用程式;

2、該資料被用於構造新的檔案目錄,進一步進行訪問或修改。

路徑遍歷漏洞會造成哪些後果?

關鍵詞:執行未經授權的程式碼或命令;讀取、修改檔案或目錄;崩潰,退出或重啟

1、攻擊者可能建立或覆蓋關鍵檔案。例如程式或庫,並用於執行;

2、攻擊者繞過安全機制獲取重要資料。例如,在可訪問的檔案路徑末尾附加”../”等路徑並重定向到本無許可權的重要資料,這可能允許攻擊者繞過身份驗證;

3、攻擊者可能能夠覆蓋,刪除或損壞關鍵檔案。例如程式,庫或重要資料。這可能會阻止軟體完全工作,並且在諸如認證之類的保護機制的情況下,它有可能鎖定軟體的每個使用者。

路徑遍歷漏洞的一些防範和修補建議:

從實現角度,進行輸入驗證:對輸入的資訊進行驗證。使用嚴格符合規範的可接受輸入的白名單。拒絕任何不嚴格符合規範的輸入,或將其轉換為具有相應規格的輸入。

路徑遍歷漏洞的樣例(以Java為例):

下面的程式碼嘗試檢查給定的輸入路徑,並在驗證安全之後刪除給定的檔案。在本例中,如果路徑以字串“/safe_dir/”開頭,則認為該路徑是安全的。

然而這樣驗證也是有風險的,攻擊者可以提供這樣的輸入:

由於有“/safe_dir/”的限定,程式假定path就是可信的。

當攻擊者輸入/safe_dir/../important.dat,則導致程式誤刪父目錄下的檔案important.dat。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2773114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章