오류 메시지 정보노출

  • 에러 처리를 충분히 하지 않아 에러 메시지를 통해 일반 사용자에게는 불필요한 정보가 보여지는 취약점
try {
    rd = new BufferedReader(new FileReader(new File(filename)));
} catch (IOException e) {
    // 에러 메시지를 통해 스택 정보가 노출됨
    e.printStackTrace();
}
  • 위 처럼 코드를 구성하면 에러 메세지를 통해 스택정보가 노출됨
try {
    BufferedReader rd = new BufferedReader(new FileReader(new File(filename)));
} catch (IOException e) {
    // 에러 코드와 최소 정보만 로깅
    logger.error("ERROR-01: Failed to open file.");
}
  • 에러코드 와 정보를 별도로 정의하하고 최소 정보만 로깅해야 취약점을 제거 가능

오류상황 대응부재

  • 오류가 발생할 수 있는 부분에 대해 예외 처리를 하지 않았을 때, 공격자가 오류 상황을 악용하여 개발자가 의도하지 않은 방향으로 프로그램이 동작하도록 조작
protected Element createContent(WebSession s) {
    try {
        String username = s.getParser().getRawParameter(USERNAME);
        String password = s.getParser().getRawParameter(PASSWORD);

        if (!"webgoat".equals(username) || !password.equals("webgoat")) {
            s.setMessage("Invalid username and password entered.");
            return makeLogin(s);
        }
    } catch (NullPointerException e) {
        // 아무런 조치 없음
        // 인증 통과
    }

    // 요청 파라미터에 PASSWORD가 존재하지 않을 경우 Null Pointer Exception이 발생하고
    // 해당 오류에 대한 대응이 존재하지 않아 인증이 된 것으로 처리
}
  • 위의 인증과정에서 에러처리를 제대로 해주지 않아 인증이 된 것으로 처리
protected Element createContent(WebSession s) {
    try {
        String username = s.getParser().getRawParameter(USERNAME);
        String password = s.getParser().getRawParameter(PASSWORD);

        if (!"webgoat".equals(username) || !"webgoat".equals(password)) {
            s.setMessage("Invalid username and password entered.");
            return makeLogin(s);
        }

        // 인증 성공 시 추가 작업
        s.setMessage("Welcome, " + username + "!");
        return proceedToDashboard(s); // 가정: 인증 성공 후의 처리 함수
    } catch (NullPointerException e) {
        // 예외 발생 시 로그를 남기고, 인증 실패 처리
        System.err.println("A NullPointerException occurred: " + e.getMessage());
        s.setMessage("Invalid username and password entered.");
        return makeLogin(s);
    } catch (Exception e) {
        // 다른 예외 처리 (필요 시 추가 가능)
        System.err.println("An unexpected error occurred: " + e.getMessage());
        s.setMessage("An unexpected error occurred. Please try again.");
        return makeLogin(s);
    }
}
  • 위의 코드와 같이 성공했을때 예외 상황이 발생했을때 처리해줄 수 있는 코딩이 필요함

대응방안

  • 별도의 에러 페이지를 제작하여 다양한 에러들이 발생했을 때 제작한 에러페이지로 리다이렉션 되도록 설정
  • 시큐어 코딩을 통해 예외 이름이나 오류추적 정보를 출력하지 않도록 소스코드 수정

'CERT' 카테고리의 다른 글

Proxy 프록시  (0) 2024.08.16
웹취약점: 권한인증 취약점  (0) 2024.08.16
SQL Injection 취약점  (0) 2024.08.16
XSS(크로스 사이트 스크립트) 취약점  (0) 2024.08.16
웹 쉘  (0) 2024.08.16

+ Recent posts