오류 메시지 정보노출
- 에러 처리를 충분히 하지 않아 에러 메시지를 통해 일반 사용자에게는 불필요한 정보가 보여지는 취약점
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 |