잘못된 디렉터리 경로 제한 ('경로 탐색')
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
설명
경로 탐색(Path Traversal) 취약점은 애플리케이션이 사용자 입력을 파일 경로로 직접 사용하여 파일을 읽거나 저장할 때 발생합니다. 공격자는 상대 경로(../ 또는 ..\\)를 이용하여 시스템의 민감한 파일에 접근할 수 있습니다.
잠재적 영향
민감한 파일 노출:
/etc/passwd,C:\Windows\system32\등의 시스템 파일에 접근하여 중요 정보를 탈취할 수 있습니다.권한 우회: 다른 사용자의 데이터나 설정 파일을 무단으로 읽거나 수정할 수 있습니다.
원격 코드 실행: 애플리케이션이 읽은 파일을 실행하는 경우 악성 코드 실행이 가능할 수 있습니다.
해결 방법
사용자 입력값을 직접 파일 경로로 사용하지 않기
사용자 입력을 검증하고, 허용된 디렉터리 내에서만 파일을 접근할 수 있도록 제한합니다.
파일 경로 검증 수행하기
Path.resolve()를 사용하여 베이스 디렉터리 내의 파일인지 확인합니다.canonical path를 비교하여 허용된 경로를 벗어나지 않도록 합니다.
파일 이름을 안전한 값으로 변환하여 사용하기
UUID 또는 해시 기반의 안전한 파일명을 생성하여 사용합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드: 신뢰할 수 없는 사용자 입력을 경로로 직접 사용하는 것은 위험합니다. 공격자는 '../'를 사용하여 상위 디렉터리로 나가 제한된 영역 밖의 파일에 접근할 수 있습니다.
안전한 코드: 경로를 정규화하고, 시작 디렉터리를 확인하여 접근이 제한된 영역 내에 있는지를 검사함으로써 경로 탐색 공격을 막습니다. 이는 접근을 제한된 디렉터리 내의 파일로 안전하게 제한합니다.
관련 CVE
참조
Last updated