제한 없는 위험한 파일 유형의 업로드
Unrestricted Upload of File with Dangerous Type
설명
제품이 위험한 파일 유형의 업로드 또는 전송을 허용하여, 환경 내에서 자동으로 처리될 수 있는 보안 취약점입니다. 위험한 파일 유형에 따라 파일의 악성 코드가 사용자 또는 서버측에서도 발생할 수 있습니다.
잠재적 영향
Execute Unauthorized Code or Commands (무단 코드 실행): 업로드된 파일이 코드로 해석되고 실행되는 경우, 웹 서버 확장자(.jsp, .asp, .php 등)로 인해 임의의 코드 실행이 발생할 수 있습니다. 이는 파일 시스템 권한이 실행을 명시적으로 허용하지 않더라도, 웹 서버가 JAVA, PHP등과 같은 프로그램을 자동으로 실행할 수 있기 때문입니다.
해결 방법
파일 확장자를 제한하고, 파일 업로드 후 청정지 식별을 위해 바이러스 검사 및 파일 유형 검사를 수행합니다.
업로드된 파일의 실행을 방지하기 위해 업로드 디렉토리의 실행 권한을 제거합니다.
파일 이름과 경로를 안전하게 생성하여 파일 경로 조작을 방지합니다.
업로드된 파일을 처리할 필요가 있다면, 안전한 환경에서 파일을 실행합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
@PostMapping("/upload")
public String handleFileUpload(@RequestParam("file") MultipartFile file) throws IOException {
// 파일을 서버에 저장하는 위험한 코드
String fileName = file.getOriginalFilename();
File destinationFile = new File("/uploads/" + fileName);
file.transferTo(destinationFile);
return "uploadSuccess";
}안전한 코드
설명:
취약한 코드: 위험한 코드에서는 업로드된 파일의 원본 이름을 그대로 사용하여 저장하기 때문에, web shell과 같은 악성 스크립트가 업로드되어 서버에서 실행될 위험이 있습니다.
안전한 코드: 안전한 코드에서는 파일 이름을 정리하고, 파일 확장자를 검증하여 허용된 유형의 파일만 저장하도록 제한합니다. 이는 잠재적으로 실행 가능한 파일이 서버에서 실행되지 않도록 예방합니다.
관련 CVE
참조
Last updated