路徑遍歷漏洞是什么?
為了識別位於受限的父目錄下的文件或目錄,軟件使用外部輸入來構建路徑。由於軟件不能正確地過濾路徑中的特殊元素,能夠導致訪問受限目錄之外的位置。
許多文件操作都發生在受限目錄下。攻擊者通過使用特殊元素(例如,“..”、“/”)可到達受限目錄之外的位置,從而獲取系統中其他位置的文件或目錄。例如”../”作為一種常見的特殊字符串,在大多數操作系統中被解釋為當前位置的父目錄,這種使用特殊元素../的路徑遍歷漏洞又被稱為相對路徑遍歷。路徑遍歷還包括使用絕對路徑名(如"/usr/local/bin"),用於訪問非預期的文件,這稱為絕對路徑遍歷。
路徑遍歷漏洞的構成條件有哪些?
1、數據從不可靠來源(包括但不局限於不可靠用戶的輸入信息或是不可靠用戶可能更改的文件)進入應用程序;
2、該數據被用於構造新的文件目錄,進一步進行訪問或修改。
路徑遍歷漏洞會造成哪些后果?
關鍵詞:執行未經授權的代碼或命令;讀取、修改文件或目錄;崩潰,退出或重啟
1、攻擊者可能創建或覆蓋關鍵文件。例如程序或庫,並用於執行;
2、攻擊者繞過安全機制獲取重要數據。例如,在可訪問的文件路徑末尾附加”../”等路徑並重定向到本無權限的重要數據,這可能允許攻擊者繞過身份驗證;
3、攻擊者可能能夠覆蓋,刪除或損壞關鍵文件。例如程序,庫或重要數據。這可能會阻止軟件完全工作,並且在諸如認證之類的保護機制的情況下,它有可能鎖定軟件的每個用戶。
路徑遍歷漏洞的一些防范和修補建議:
從實現角度,進行輸入驗證:對輸入的信息進行驗證。使用嚴格符合規范的可接受輸入的白名單。拒絕任何不嚴格符合規范的輸入,或將其轉換為具有相應規格的輸入。
路徑遍歷漏洞的樣例(以Java為例):
下面的代碼嘗試檢查給定的輸入路徑,並在驗證安全之后刪除給定的文件。在本例中,如果路徑以字符串“/safe_dir/”開頭,則認為該路徑是安全的。
然而這樣驗證也是有風險的,攻擊者可以提供這樣的輸入:
由於有“/safe_dir/”的限定,程序假定path就是可信的。
當攻擊者輸入/safe_dir/../important.dat,則導致程序誤刪父目錄下的文件important.dat。