Files
llm-wiki/raw/official-docs/owasp-path-traversal.md

104 lines
9.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: OWASP Path Traversal — dot-dot-slash attack and encoding bypasses
source_type: official-doc
url: https://owasp.org/www-community/attacks/Path_Traversal
archive_url:
status: raw
confidence: high
related_branches: [feature-file-resource-handling-contract]
related_projects: [ca-skeleton-operational-contract]
tags: [ca-security, path-traversal, owasp, directory-traversal, allowlist, encoding-bypass, official-doc]
created: 2026-05-27
last_reviewed: 2026-05-27
---
# OWASP Path Traversal
> Layer: `raw/official-docs/` — OWASP community 발행 path traversal attack 분류 페이지. ca-tmpl file resource handling contract 의 path traversal 방어 결정 (filename allowlist + URL decode 후 검증 + canonicalization) 의 1차 근거.
## Parent / 활용 branch (필수)
| Branch | 이 자료가 정당화하는 결정 |
|---|---|
| [[raw/branch-notes/feature-file-resource-handling-contract]] | path traversal 방어 결정 — `../` sequence + URL encoded variant (`%2e%2e%2f`) + null byte (`%00`) + absolute path 모두 거부, "accept known good" allowlist 접근 (sanitize 금지) 근거 |
## 컨텍스트 / 왜 저장했는지
ca-tmpl 의 file download / static resource serving 결정에서 "왜 filename sanitize 가 아닌 allowlist 가 권고되는가", "왜 URL decode 후 검증해야 하는가 (%2e%2e%2f bypass)", "왜 null byte 종료 공격을 고려해야 하는가" 결정의 1차 근거. 본 페이지는 attack 분류 (definition) 페이지로 cheatsheet 와는 다름.
## 출처 / Source
- 원본 URL: https://owasp.org/www-community/attacks/Path_Traversal
- 아카이브 URL: (미수집)
- 저자 / 조직: OWASP Foundation (community wiki — attack 분류)
- 발행일: rolling docs
- 마지막 확인일: 2026-05-27 (WebFetch verbatim 확인)
## 핵심 인용 / Key quotes (verbatim, captured 2026-05-27)
> [§Overview] "A path traversal attack (also known as directory traversal) aims to access files and directories that are stored outside the web root folder."
> [§Overview] "By manipulating variables that reference files with 'dot-dot-slash (../)'sequences and its variations or by using absolute file paths, it may be possible to access arbitrary files."
> [§How to protect yourself] "Validate the user's input by only accepting known good do not sanitize the data."
> [§Request variations] "%2e%2e%2f represents ../ [and] %2e%2e%5c represents ..\\"
> [§Description - OS specific] "In many operating systems, null bytes %00 can be injected to terminate the filename."
> [§Example 4] "The repeated ../ characters after /home/users/phpguru/templates/ has caused include() to traverse to the root directory."
> [§Absolute Path Traversal] "When the web server returns information about errors in a web application, it is much easier for the attacker to guess the correct locations."
## Claims Extracted / 추출된 주장
| Claim ID | Claim (이 자료가 직접 말하는 것) | Evidence quote | Strength | Applies to | Does not prove |
|---|---|---|---|---|---|
| OWASP-PT-C1 | path traversal (= directory traversal) 은 **web root 밖** 의 파일/디렉토리에 접근하려는 공격 | [§Overview] "A path traversal attack (also known as directory traversal) aims to access files and directories that are stored outside the web root folder." | `official-reference` (OWASP community wiki — 표준 아님) | path traversal 공격 분류 결정 | web root 안의 unauthorized file 접근 (예: 다른 user 의 file) 도 별도 — IDOR/BOLA 영역 |
| OWASP-PT-C2 | 공격 벡터: `../` (dot-dot-slash) sequence 와 그 variation, 또는 **absolute file path** 로 임의 파일 접근 가능 | [§Overview] "By manipulating variables that reference files with 'dot-dot-slash (../)'sequences and its variations or by using absolute file paths, it may be possible to access arbitrary files." | `official-reference` | filename 입력 검증 시 `../` + absolute path 모두 차단 결정 | `..` 만 차단해도 안전하다는 뜻은 아님 — variation (%2e%2e%2f 등) 별도 |
| OWASP-PT-C3 | 방어 원칙: 사용자 입력은 **"known good only" allowlist 로 검증** — sanitize **하지 말 것** | [§How to protect yourself] "Validate the user's input by only accepting known good do not sanitize the data." | `official-reference` | filename allowlist (예: `^[a-zA-Z0-9_-]+\.(jpg|png|pdf)$`) 접근 결정 — blacklist sanitize (`../` 제거) 금지 | sanitize 가 절대 불가능하다는 뜻은 아님 — defense in depth 로 sanitize + allowlist 둘 다 가능 |
| OWASP-PT-C4 | URL encoded variation: `%2e%2e%2f` = `../`, `%2e%2e%5c` = `..\` — encoding 으로 bypass 가능 | [§Request variations] "%2e%2e%2f represents ../ [and] %2e%2e%5c represents ..\\" | `official-reference` | URL decode 후 검증 결정 (decode 전 검증은 bypass 가능) | double encoding (`%252e%252e%252f`) 같은 nested encoding 은 본 인용 범위 밖 — 별도 고려 필요 |
| OWASP-PT-C5 | 많은 OS 에서 **null byte `%00`** 을 inject 하여 filename 을 종료시켜 검증 우회 가능 | [§Description - OS specific] "In many operating systems, null bytes %00 can be injected to terminate the filename." | `official-reference` | filename 검증 시 null byte 거부 결정 | 모든 modern runtime (Java NIO 등) 이 null byte 에 취약하다는 뜻은 아님 — legacy C-based file API 위주 |
| OWASP-PT-C6 | `../` 반복으로 root directory 까지 traverse 가능 (예: `/home/users/phpguru/templates/../../../../etc/passwd`) | [§Example 4] "The repeated ../ characters after /home/users/phpguru/templates/ has caused include() to traverse to the root directory." | `official-reference` | path traversal 의 destructive 잠재력 인지 — `/etc/passwd`, application config 등 노출 | application 이 file system root 권한을 갖지 않으면 영향 제한 — 본 인용은 권한 가정 |
| OWASP-PT-C7 | web server 가 error 정보에서 file path 를 노출하면 공격자가 정확한 location 을 추측하기 훨씬 쉬워짐 | [§Absolute Path Traversal] "When the web server returns information about errors in a web application, it is much easier for the attacker to guess the correct locations." | `official-reference` | error response 에 file path 노출 금지 결정 (generic error message 정책) | error path 노출이 단독 취약점이라는 뜻은 아님 — information disclosure 보조 요인 |
## Usage Boundaries / 적용 경계
- **이 자료가 직접 증명하는 것** (2026-05-27 WebFetch verbatim 확인):
- `OWASP-PT-C1`: path traversal 정의 (web root 밖 접근)
- `OWASP-PT-C2`: 공격 벡터 (`../` + absolute path)
- `OWASP-PT-C3`: 방어 원칙 (allowlist, not sanitize)
- `OWASP-PT-C4`: URL encoded variation
- `OWASP-PT-C5`: null byte injection
- `OWASP-PT-C6`: root directory traversal 예시
- `OWASP-PT-C7`: error response 의 path 노출 위험
- **이 자료가 증명하지 않는 것**:
- 구체적 framework (Spring, Express, Django) 별 안전한 file API 권고 — 본 페이지는 attack 분류만
- canonicalization 함수 (Java `Path.normalize()`, `realpath()` 등) 의 안전성 보장 — 별도 cheatsheet / 벤더 doc 위임
- double encoding / Unicode normalization 같은 advanced bypass — 본 인용 범위 밖
- WAF rule 로 path traversal 차단의 효과 — 본 페이지는 application layer 방어만
- OWASP community wiki 는 **공격 분류 + 권고** 이며 강제 표준 아님.
- **내 프로젝트에 적용하려면 추가 확인이 필요한 것**:
- ca-tmpl 의 file serving 경로에서 Spring Resource API (`Resource.getFile()`, `Path.resolve()`) 의 canonicalization 동작 확인
- filename allowlist regex 의 구체적 정의 (확장자 + 문자 집합)
- URL decode 처리 순서 — Spring `@PathVariable` 자동 decode 후 검증 vs raw path 검증
- error response 에서 file path 가 노출되는 경로 (stack trace, 404 message 등) 점검
## 메모 / Notes
- **다른 OWASP 자료와의 관계**: 본 페이지는 공격 분류, [[raw/official-docs/owasp-file-upload-cheat-sheet]] 는 upload 방어, OWASP Input Validation Cheat Sheet 는 일반 input 검증. 세 자료가 path traversal 의 서로 다른 측면을 커버.
- **CWE 매핑**: CWE-22 (Improper Limitation of a Pathname to a Restricted Directory). 본 페이지에는 CWE 번호 명시 없지만 일반적으로 매핑됨.
- **"allowlist not sanitize" 의 의미** (`C3`): sanitize 는 blacklist 기반 ("../" 제거) 이라 bypass variation 에 취약. allowlist 는 "known good 패턴" 만 허용 → 새로운 bypass 에도 안전. ca-tmpl 의 file resource 에서는 allowlist 우선 권고.
## Related / 관련
- 같은 주제 다른 official-doc:
- [[raw/official-docs/owasp-file-upload-cheat-sheet]] (upload 방어 — 본 자료와 짝)
- OWASP Input Validation Cheat Sheet — 별도 raw 작성 후보
- CWE-22 (MITRE) — 별도 raw 작성 후보
- 인용하는 branch:
- [[raw/branch-notes/feature-file-resource-handling-contract]]
- 인용하는 project:
- [[raw/project-notes/ca-skeleton-operational-contract]]
- 인용한 wiki 요약: (미작성)