파일다운로드 취약점 - Path Traversal

2023. 5. 31. 16:44개발자료/Security


반응형

다운로드 대상 파일의 디렉토리를 벗어나 다른경로에 있는 파일까지 접근해 파일을 다운로드하거나 접근 가능한 것.

조치가이드
  • 파일 다운로드시 허용된 경로 이외의 접근을 차단하고 특정 디렉토리의 파일만 다운로드가 가능하도록 설정
  • 파일 경로 및 파일명을 데이터베이스에 저장하여 파일 다운로드 수행시, 파일 경로와 이름을 검증하도록 조치
  • 다운로드 시 사용자 요청 메시지에 포함된 경로 조작 문자(.., /, \) 필터링

 

조치 - Path Traversal 문자열 체크

@ 서버단에서 상위 디렉토리로 이동하는 ../ 또는 ..\\ 문자열 존재여부를 확인한다.

// Java
String strFullPath = request.getParameter("filePath") + request.getParameter("fileName");
if(strFullPath.contains("../") || strFullPath.contains("..\\")){
	// Path Traversal 취약점 확인
}

 

@ 전달받은 경로와 실제 경로의 값이 같은지 확인한다.
getCanonicalPath 반환값과 getAbsoutePath 반환값을 비교해서 Path Traversal 문자열이 존재하는지 확인한다.
getCanonicalPath : ./, ../ 등의 경로를 정리하고 절대 경로만 표현 => /path1/path2/file1.txt 
getAbsoutePath : 입력된 경로만 표현 => /path1/path2/path3/../file1.txt

// Java
String strFullPath = request.getParameter("filePath") + request.getParameter("fileName");
File file = new File(strFullPath);
String strPathCanonical;
String strPathAbsolute;
try{
	strPathCanonical = file.getCanonicalPath();
	strPathAbsolute = file.getAbsolutePath();
	if (strPathCanonical.equals(strPathAbsolute) == false){
		// Path Traversal 취약점 확인
	}
}catch (IOException e){
}
반응형

'개발자료 > Security' 카테고리의 다른 글

모바일 딥링크 취약점  (0) 2023.08.10
KISA - JavaScript 시큐어코딩 가이드  (0) 2023.06.01
XSS(Cross Site Scripting)  (0) 2023.05.31
MITMProxy - OSX  (0) 2020.01.29