파일 업로드 취약점 (File Upload Vulnerability)
파일 업로드 기능을 이용할 때 정상파일이 아닌 비정상 파일을 업로드 하는 것을 말한다.
정상과 비정상의 기준 : 서버 사이드 스크립트로 작성된 웹쉘인지 아닌지에 따라 나뉘게 된다.
파급력 있는 OS Command Injection과 동일한 효과를 나타낼 수 있는 취약점이다.
확장자 검증 : 파일에 대해서 정상, 비정상적 파일의 확장자인지 검증.
이미지 검증 : 파일이 이미지인지 아닌지 검증.
파일 사이즈 검증 : 업로드되는 파일의 사이즈가 정해진 사이즈를 초과하는지에 대한 검증.
블랙 리스트 방식 : 업로드할 때 확장자에 대해서 악의적인 확장자를 가지고 있는 파일이 존재한다면 업로드를 허용하지 않는 방식이다. (예 : jsp, php ...)
화이트 리스트 방식 : 허용할 확장자만 업로드할 수 있도록 하는 방식 (예 : jpg, png, gif)
업로드하려는 파일의 파일명을 받는다.
파일명에서 확장자를 파싱한다.
확장자 검증(화이트 or 블랙)을 통해 검증하여 파일 업로드 여부를 결정한다.
검증되지 않는 확장자 사용
test.php
를 test.html
로 변경하여 업로드빈값 검증 미흡
test.php.
test.php[공백]
대문자 검증 미흡
test.phP
잘못된 확장자 파싱
1. 파일명에 대한 검증
확장자 검증 : 확장자 검증 방식은 역방향으로 해야 하며 화이트 리스트 방식을 사용하는 것이 좋다.
서버 측에서 파일명 생성 : 시간-밀리세컨드 또는 랜덤 문자열로 저장하여 사용자가 변조를 하지 못 하도록 한다.
2. 올바른 업로드 경로 설정