OWASP 類別:MASVS-STORAGE:儲存空間
總覽
如果攻擊者可以控制路徑的特定部分,卻在未驗證的情況下將其傳遞至檔案系統 API,就會發生路徑周遊安全漏洞。這可能導致未授權的檔案系統運作。舉例來說,攻擊者可能會利用特殊字元 (例如 ../
),周遊至目標目錄之外,從而意外變更資源目標。
影響
影響有很多種,具體取決於作業性質和檔案內容,但一般都會導致檔案遭到覆寫 (寫入檔案時)、資料外洩 (讀取檔案時) 或權限變更 (變更檔案/目錄權限時)。
因應措施
使用 File.getCanonicalPath()
將路徑標準化,並比對前置字串與預期目錄:
Kotlin
@Throws(IllegalArgumentException::class)
fun saferOpenFile(path: String, expectedDir: String?): File {
val f = File(path)
val canonicalPath = f.canonicalPath
require(canonicalPath.startsWith(expectedDir!!))
return f
}
Java
public File saferOpenFile (String path, String expectedDir) throws IllegalArgumentException {
File f = new File(path);
String canonicalPath = f.getCanonicalPath();
if (!canonicalPath.startsWith(expectedDir)) {
throw new IllegalArgumentException();
}
return f;
}
另一種最佳做法是使用驗證功能,確保僅出現預期的結果。相關示例包括:
- 檢查檔案是否已存在,以免發生意外覆寫的情形。
- 檢查指定檔案是否為預期的目標,以免資料外洩或權限變更出錯。
- 檢查目前的作業目錄是否與標準路徑的傳回值完全相同。
- 確保權限系統明確限定在作業範圍內,例如檢查該系統並非以根層級執行服務,並確認目錄權限的範圍僅限於指定的服務或指令。
為您推薦
- 注意:系統會在 JavaScript 關閉時顯示連結文字
- Zip 路徑遍歷