CWE-22:Path Traversal
CWE-22:Path Traversal(路徑跳脫漏洞)
Web 應用程式中若允許使用者輸入檔案路徑而未加限制,就可能導致 Path Traversal(路徑跳脫)攻擊。攻擊者可利用 ../ 等字串跳離預期目錄,存取系統上任何可讀取的檔案
例如:
1 | |
一、漏洞發生位置與程式碼示例
程式碼如下:
1 | |
這段程式碼問題在於直接使用外部傳入的 filePath
完全沒有:
- 白名單(allowlist)限制
- 禁止 ../ 等跳脫字串
- 限制只能存取固定資料夾
- 任何編碼或過濾
二、可能造成的風險
任意檔案讀取
攻擊者可讀取:
- 伺服器設定檔
- 環境參數
- API 金鑰
- Log 檔案
- 系統帳戶設定(例如 /etc/passwd)
目錄瀏覽
攻擊者可列出目錄內容,以了解伺服器架構。
調用開檔流程,引發進一步攻擊
若該程式會解析 Excel,攻擊者可上傳惡意檔案,誘使應用程式執行危險流程。
三、修補建議
使用Allowlist限制可讀取的資料夾
只允許後端存取特定目錄:
1 | |
禁止危險字串
阻擋(或正規化後比對):
- ..
- / 或 \ 開頭
- URL decode 後的 %2e%2e%2f
移除使用者指定的完整路徑
- 使用者只能提供檔名,後端自行決定路徑。
1
2String safeFileName = StringUtils.cleanPath(uploadFile.getOriginalFilename());
Path uploadPath = Paths.get("/opt/file_upload/" + safeFileName);
使用既有框架的安全路徑工具
例如 Spring:
1 | |
可自動處理跳脫字串。