잘못된 디렉터리 경로 제한 ('경로 탐색')

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

설명

경로 탐색(Path Traversal) 취약점은 애플리케이션이 사용자 입력을 파일 경로로 직접 사용하여 파일을 읽거나 저장할 때 발생합니다. 공격자는 상대 경로(../ 또는 ..\\)를 이용하여 시스템의 민감한 파일에 접근할 수 있습니다.

잠재적 영향

  • 민감한 파일 노출: /etc/passwd, C:\Windows\system32\ 등의 시스템 파일에 접근하여 중요 정보를 탈취할 수 있습니다.

  • 권한 우회: 다른 사용자의 데이터나 설정 파일을 무단으로 읽거나 수정할 수 있습니다.

  • 원격 코드 실행: 애플리케이션이 읽은 파일을 실행하는 경우 악성 코드 실행이 가능할 수 있습니다.

해결 방법

  1. 사용자 입력값을 직접 파일 경로로 사용하지 않기

    • 사용자 입력을 검증하고, 허용된 디렉터리 내에서만 파일을 접근할 수 있도록 제한합니다.

  2. 파일 경로 검증 수행하기

    • Path.resolve()를 사용하여 베이스 디렉터리 내의 파일인지 확인합니다.

    • canonical path를 비교하여 허용된 경로를 벗어나지 않도록 합니다.

  3. 파일 이름을 안전한 값으로 변환하여 사용하기

    • UUID 또는 해시 기반의 안전한 파일명을 생성하여 사용합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 신뢰할 수 없는 사용자 입력을 경로로 직접 사용하는 것은 위험합니다. 공격자는 '../'를 사용하여 상위 디렉터리로 나가 제한된 영역 밖의 파일에 접근할 수 있습니다.

  • 안전한 코드: 경로를 정규화하고, 시작 디렉터리를 확인하여 접근이 제한된 영역 내에 있는지를 검사함으로써 경로 탐색 공격을 막습니다. 이는 접근을 제한된 디렉터리 내의 파일로 안전하게 제한합니다.

관련 CVE

참조

Last updated