본문 바로가기
Web Security/SecureCoding

프로세스 제어

by KkingKkang 2022. 11. 18.

- 신뢰되지 않은 소스나 신뢰되지 않은 환경으로부터 라이브러리를 적재하거나 명령을 실행하면, 악의적인 코드가 실행될 수 있다. 

- 프로그램 내에서 라이브러리를 적재할 때 절대경로를 사용한다.

안전하지 않은 코드 ▼

Runtime.getRuntime().loadLibrary("libraryName");

 

안전한 코드 ▼

Runtime.getRuntime().loadLibrary("/usr/lib/libraryName");

 

해시테이블을 이용해 정해진 이름의 라이브러리만이 정해진 절대경로를 통해 로딩 가능하도록 설계

import java.io.*;
import java.net.URLDecoder;
import java.sql.*;
import java.util.*;

import javax.servlet.*;

public class DocService extends HttpServlet {
	
    private final String UPLOAD_library_COMMAND = "upload_library";
    private final String library_NAME_PARAM = "library_name";
    private final String CONVERT_OPERATION_PARAM = "convert_operation";
    
    private Hashtable<String, String> additionalOperations;
    
    public DocService() {
    	additionalOperations = new Hashtable<String, String>();
        additionalOperations.put("Doc","/LIBRARY/DOC.LIB");
        additionalOperations.put("UTF","/LIBRARY/UTF.LIB");
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	String command = request.getParameter("command");
    
    	//글을 써서 올리는 요청 처리
        if(command.equals(UPLOAD_library_COMMAND)) {
        	String libraryName = request.getParameter(library_NAME_PARAM);
            String additionalOperation = request.getParameter(CONVERT_OPERATION_PARAM);
            
            //upload
            if(additionalOperation != null) {
            	//문서 format이 html이 아닐 경우, html로 변환을 수행
                String[] arguments = new String[1];
                arguments[0] = libraryName;
                
                Runtime.getRuntime().exec(additionalOperations.get(additionalOperation), arguments, null);
             }
         }
     }
}

 

 

반응형

댓글