[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
반응형

BELATED ARTICLES

more