| 제목 | FlowCI flow-core-x v1.23.01 Path Traversal |
|---|
| 설명 | flow-ci's LocalFileManager implementation constructs file paths with Paths.get(dir.toString(), fileName) and passes them directly to filesystem operations. The fileName parameter is not sanitized: there is no detection of .., no normalize() call, and no startsWith(base) boundary check. Java's Paths.get(a, b) preserves .. path components, so a filename such as ../../../../cve02_browser_escape.txt can escape the intended storage directory when the operating system resolves the path.
Five vulnerable sinks exist:
1. `exist()` — L56: `Paths.get(dir.toString(), fileName)` — traversal-aware existence check.
2. `save()` — L67: `Paths.get(dir.toString(), fileName)` — arbitrary file write.
3. `read()` — L75: `Paths.get(dir.toString(), fileName)` — arbitrary file read.
4. `remove(fileName, ...)` — L87: `Paths.get(dir.toString(), fileName)` — arbitrary file delete.
5. `remove(filePath)` — L94: `Paths.get(filePath)` — deletes a fully attacker-controlled path. |
|---|
| 원천 | ⚠️ https://glacier-tarsal-711.notion.site/Flow-ci-Path-Traversal-in-flow-ci-LocalFileManager-via-Unsanitized-fileName-Parameter-3f7b25e24b368031bf2cc0afd9166896 |
|---|
| 사용자 | Zy0t1 (UID 100983) |
|---|
| 제출 | 2026. 10. 13. AM 10:33 (26 날 ago) |
|---|
| 모더레이션 | 2026. 11. 07. PM 08:35 (25 days later) |
|---|
| 상태 | 수락 |
|---|
| VulDB 항목 | 432650 [FlowCI flow-core-x 까지 1.23.49 LocalFileManager LocalFileManager.java exist/save/read/remove fileName 디렉토리 순회] |
|---|
| 포인트들 | 17 |
|---|