경로 조작 (Path Traversal)

Path Traversal

설명

경로 조작(Path Traversal)은 사용자 입력을 통해 파일 시스템 경로를 조작하여, 원래 의도된 파일이나 디렉토리 외부의 파일에 접근할 수 있게 하는 공격입니다. 공격자는 상대 경로(../ 등)를 사용하여 시스템의 민감한 파일에 접근할 수 있습니다.

잠재적 영향

  • 정보 유출: 공격자가 시스템의 민감한 파일을 읽어 중요한 정보를 획득할 수 있습니다.

  • 데이터 손상: 공격자가 시스템 파일을 덮어쓰거나 삭제하여 데이터 손상을 일으킬 수 있습니다.

  • 권한 상승: 공격자가 권한을 상승시키기 위해 중요한 파일을 수정할 수 있습니다.

해결 방법

  • 입력값 검증: 파일 경로에 대해 상대 경로(../)가 포함되지 않도록 검증합니다.

  • 화이트리스트: 허용된 디렉토리 내의 파일에만 접근할 수 있도록 제한합니다.

  • 보안 라이브러리 사용: 경로 조작 공격을 방지하기 위한 보안 라이브러리를 사용합니다.

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

Path Traversal via `open`

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 파일 경로로 사용하여, 공격자가 상대 경로(../)를 통해 민감한 파일에 접근할 수 있습니다.

  • 안전한 코드: os.path.normpath를 사용하여 파일 경로를 ... 과 같은 구분자를 제거하여 정규화한 후 startswith을 사용하여 지정된 경로를 벗어나지 못하도록 합니다. 이를 통해 안전한 디렉토리 내의 파일만 접근할 수 있도록 합니다.

Path Traversal via flask `send_file`

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 사용자 입력값을 검증하지 않고 파일 경로로 사용하여, 공격자가 상대 경로(../)를 통해 민감한 파일에 접근할 수 있습니다.

  • 안전한 코드: send_from_directory를 사용하여 지정된 경로를 벗어나지 못하도록 합니다. 이를 통해 안전한 디렉토리 내의 파일만 접근할 수 있도록 합니다.

참조

Last updated