Secure Coding Guide | 경로 조작 및 자원 삽입


정의

검증되지 않은 외부 입력값이 시스템 자원 접근 경로 또는 자원 제어에 사용되는 경우 공격자가 입력값을 조작해 공격할 수 있는 보안약점이다.

영향

공격용 툴을 외부로부터 업로드하거나, 업로드된 툴에 대해 실행 권한 부여 및 관리자 권한을 획득하여 서버 제어 가능해 진다.

원인 및 조치 방법

파라미터로 파일 경로를 입력 받아 파일 시스템에서 검증없이 사용할 경우에 발생한다.

안전하지 않은 코드 일부

public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String filepath = request.getParameter("filepath");

    if (filepath == null)
        return;

    filepath= PathUtil.getHome() + "/web/board_attach/" + filepath;

    DownloadUtil.download(response, filepath);
}

안전한 코드 일부

public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String filepath =request.getParameter("filepath");

    if (filepath == null)
        return;

    filepath = filepath.replaceAll("/","");
    filepath = filepath.replaceAll ("\\\\","");
    filepath = filepath.replaceAll ("\\.","");
    filepath = filepath.replaceAll ("&","");
    filepath = PathUtil.getHome() + "/web/board_attach/" + filepath;

    DownloadUtil.download(response, filepath);
}