728x90
- 신뢰되지 않은 소스나 신뢰되지 않은 환경으로부터 라이브러리를 적재하거나 명령을 실행하면, 악의적인 코드가 실행될 수 있다.
- 프로그램 내에서 라이브러리를 적재할 때 절대경로를 사용한다.
안전하지 않은 코드 ▼
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);
}
}
}
}
728x90
'△ > SecureCoding' 카테고리의 다른 글
적절한 인증 없는 중요기능 허용 (0) | 2022.11.21 |
---|---|
무결성 점검 없는 코드 다운로드 (0) | 2022.11.21 |
크로스 사이트 스크립트 공격 취약점: DOM (0) | 2022.11.18 |
SQL 삽입공격 : mybatis Data Map (0) | 2022.11.18 |
보호 메커니즘을 우회할 수 있는 입력값 변조 (0) | 2022.11.18 |
댓글