[FINDBUGS] 자원삽입 | PATH_TRAVERSAL_IN | PATH_TRAVERSAL_OUT
2022. 11. 18. 18:32
728x90
반응형
자원삽입
- 외부 입력값을 검증하지 않고 시스템 자원에 대한 식별자로 사용되는 경우, 공격자는 입력값 조작을 통해
시스템이 보호하는 자원에 임의로 접근하거나 수정할 수 있고 잘못된 입력값으로 인해 자원 사이 충돌 발생
RULES NAME
- PT_ABSOLUTE_PATH_TRAVERSAL
- PT_RELATIVE_PATH_TRAVERSAL
- PATH_TRAVERSAL_IN
- PATH_TRAVERSAL_OUT
- SCALA_PATH_TRAVERSAL_IN
- SPRING_FILE_DISCLOSURE
- STRUTS_FILE_DISCLOSURE
- TEMPLATE_INJECTION_FREEMARKER
- JSP_INCLUDE
- JSP_SPRING_EVAL
- SCALA_PLAY_SSRF
- WEAK_HOSTNAME_VERIFIER
- WEAK_TRUST_MANAGER
- TAPESTRY_ENDPOINT
- WICKET_ENDPOINT
예시)
// 안전하지 않은 코드 예시
public void service() throws IOException {
int def = 1000;
ServerSocket serverSocket;
Properties props = new Properties();
String fileName = "file_list";
FileInputStream in = new FileInputStream(fileName);
props.load(in);
//외부에서 입력한 데이터를 받는다.
String service = props.getProperty("Service No");
int port = Integer.parseInt(service);
//외부에서 입력받은 값으로 소켓을 생성한다.
if(port != 0) {
serverSocket = new ServerSocket(port + 3000);
} else {
serverSocket = new ServerSocket(def + 3000);
}
}
- 외부의 입력(service)을 소켓 번호로 그대로 사용
- 공격자가 서비스 번호로 -2920 지정 시 기존 80포트에서 구동하는 서비스와 충돌되어 에러 발생 가능
// 안전한 코드 예시
public void service() throws IOException
{
ServerSocket serverSocket;
Properties props = new Properties();
String fileName = "file_list";
FileInputStream in = new FileInputStream(fileName);
String service = "";
if (in != null && in.available() > 0) {
props.load(in);
// 외부로부터 데이터를 입력받는다.
service = props.getProperty("Service No");
}
// 외부의 입력을 기본적인 내용 검사를 한다.
If (“”.equals(service)) service = “8080”;
int port = Integer.parseInt(service);
// 외부 입력에서 포트번호를 검사한 후 리스트에서 적합한 값을 할당
switch (port){
case 1:port = 3001; break;
case 2:port = 3002; break;
case 3:port = 3003; break;
default: port = 3000;
}
// 서버소켓에 검사완료된 포트를 할당한다.
serverSocket = new ServerSocket(port);
}
- 외부 입력에서 포트번호를 검사한 후 리스트에서 적합한 값을 직접 할당
728x90
반응형