seKUrity

File Download Vulnerability란?

곽도우너 2023. 3. 30. 22:33

파일 다운로드 취약점(File Download Vulnerability)

: 파일명 혹은 경로 값으로 전달되는 사용자 입력 값에 경로 이동 문자 또는 경로 변조를 통해 정상적인 파일이 아닌 비 정상적인 파일을 받는 행위를 뜻한다.

+) 비정상적인 파일과 정상적인 파일 : 웹 서비스 혹은 개발자가 의도한 바운더리 내에 존재하는 파일을 다운 받는 지에 따라서 결정된다.

→ 업로드 경로에 맞는 파일이면 정상적인 파일 / 업로드 경로에서 벗어났다면 비정상적인 파일이다.

 

- 파일 다운로드 기능이 존재하는 웹에서 허용되지 않은 파일을 다운 받을 수 있고, 임의의 위치에 있는 파일을 열람하거나 다운 받는 것을 가능하게 하는 취약점이다.

 

- 사용자가 입력 가능한 파일명 혹은 경로 값에 "../" 또는 "..\"를 입력하여 변조 후 공격자가 의도한 파일을 받는다.

 

- 데이터베이스에 대한 자격 증명이 포함된 구성 파일과 같은 중요한 파일이 의도치 않게 노출될 수 있다.

 

 

 

<원인>

- 파일 다운로드 시 파일의 절대경로 또는 상대경로가 노출되는 경우

- 다운로드 모듈이 파일의 경로나 이름을 파라미터로 사용하는 경우

- 파일 경로와 파일명 필터링이 미흡하여 ../를 이용해 상위 디렉토리에 접근이 가능한 경우

- 다운로드 경로가 노출되지 않더라도 구조가 단순하여 파라미터 변조를 통해 접근이 허용되지 않는 파일에 접근이 가능한 경우

 

 

 

<공격 과정>

1. Download.jsp라는 페이지가 있다고 가정하자. 

(Download.jsp는 웹 서버의 upload 폴더에 존재하는 파일의 이름을 file이라는 파라미터로 입력 받으면 그 파일을 다운로드 해준다.)

 

2. 해당 url을 통해 요청하면, test라는 웹 서버는 upload 폴더 안에 abc.txt 라는 파일을 찾아 다운로드 시켜준다.

 hxxp://gsinfo.kr/Download.jsp?file=../../../../../../etc/passwd

→ upload 폴더에서 상위 폴더로 계속 올라가다가 루트 폴더에 도달하 etc/passwd를 요청하고, 그 사용자는 웹 서버의 시스템 파일을 획득한다.

 

 

 

<진단 방법>

- 업로드 된 파일의 속성 정보를 확인하여 해당 파일의 경로 노출 여부 확인한다.

- 사용되는 파라미터 중 변조에 의해 다른 파일에 접근이 가능한 부분이 있는지 확인한다.

- 파일명으로 다운로드 하는 것을 확인 후 상위경로로 이동하는 명령어(../)를 삽입한다.

- 다운로드한 주요 파일을 바탕으로 시스템 정보를 수집한다.

 

 

 

<대응방안>

1. 사용자 제공 입력으로 파일 경로 문자열을 작성하지 말아야 한다.

 

2. 사용자 제공 입력을 파일 시스템 API에 전달하는 것이 절대적으로 필요한 경우 개발자는 다음을 확인한다.

- 허용 목록에 대해 잘 알려지고 평판이 좋은 후보를 엄격하게 수락하여 사용자 입력의 유효성을 검사한다.

- 허용 목록에 대한 유효성 검사가 가능하지 않은 경우 유효성 검사는 최소한 허용된 콘텐츠만 입력에 포함되도록 해야 한다.

 

3. 더 높은 방어를 위해서는 root 권한으로 서버 구성 요소를 실행해서는 안된다.

→ 중요한 시스템 파일에 대한 액세스 권한이 없는 권한이 낮은 사용자를 사용하여 서버 구성 요소를 실행해야 한다.

(악의적인 행위자가 암호화 키 및 레지스트리를 포함한 모든 파일 또는 폴더에 액세스 할 수 있기 때문)