유형 | 에러처리 |
보안약점 | 오류 메시지 정보노출 |
개요 |
응용프로그램이 실행환경, 사용자 등 관련 데이터에 대한 민감한 정보를 포함하는 오류 메시지를 생성하여 외부에 제공하는 경우, 공격자의 악성 행위를 도울 수 있다.
예외발생 시 예외이름이나 스택 트레이스를 출력하는 경우, 프로그램 내부구조를 쉽게 파악할 수 있기 때문이다.
|
보안대책 |
오류 메시지는 정해진 사용자에게 유용한 최소한의 정보만 포함하도록 한다.
소스코드에서 예외상황은 내부적으로 처리하고 사용자에게 민감한 정보를 포함하는 오류를 출력하지 않도록 미리 정의된 메시지를 제공하도록 설정한다.
|
진단방법 |
해당 취약점에서 시스템 환경, 유저정보, 민감한 정보 등에 대한 기준을 정적도구가 판단하기 어려움에 따라 진단원이 출력함수 등으로 외부에 출력되는 값 중 민감한 정보 등을 판단할 필요가 있다.
오류메시지를 출력하는 경우 해당 오류에 시스템 환경, 유저정보, 데이터 등 민감한 정보가 포함되어 있는지 확인한다.
|
연관된 설계단계 기준 | - |
코드예제
● 안전하지 않은 코드 예 (Java)
try {
rd = new BufferedReader(new FileReader(new File(filename)));
} catch(IOException e) {
// 에러 메시지로 스택 정보가 노출됨
e.printStackTrace();
}
● 안전하지 않은 코드 예 (Java)
} catch(IOException e) {
// 오류발생 시 화면에 출력된 시스템 정보로 다른 공격의 빌미를 제공한다.
System.err.print(e.getMessage());
}
● 안전한 코드 예 (Java)
try {
rd = new BufferedReader(new FileReader(new File(filename)));
} catch(IOException e) {
// 에러 코드와 정보를 별도로 정의하고 최소 정보만 로깅
logger.error("ERROR-01: 파일 열기 에러");
}
● 안전하지 않은 코드 예 (C#)
try {
//do something
} catch (CustomException e) {
Console.WriteLine(e);
}
● 안전한 코드 예 (C#)
● 안전한 코드 예 (C#)
try {
//do something
} catch (CustomException e) {
_log.Debug("ERROR-01 : error information");
}
진단방법

해당 취약점에서 시스템 환경, 유저정보, 민감한 정보 등에 대한 기준을 정적도구가 판단하기 어려움에 따라 진단원이 출력함수 등으로 외부에 출력되는 값 중 민감한 정보 등을 판단할 필요가 있다.
오류메시지를 출력하는 경우(①) 해당오류에 시스템 환경, 유저정보, 데이터 등 민감한 정보가 포함되어 있는지 확인한다.
● 일반적인 진단의 예
public static void main(String[] args) {
String urlString = args[0];
try {
URL url = new URL(urlString);
URLConnection cmx =
url.openConnection();
cmx.connect();
} catch (Exception e) {
e.printStackTrace(); ····················①
}
}
● 정탐코드
<%@ page language="java" contentType="text/html; charset=UTF-8" buffer="none"%>
<%@page import="egovframework.com.utl.fda.ucc.service.EgovUnitCalcUtil" %>
<%
String sCmd = request.getParameter("cmd") == null ? "" : (String) request.getParameter("cmd");
double nResult=0.0;
try {
if(!sCmd.equals("")) {
EgovUnitCalcUtil egovUnitCalcUtil= new EgovUnitCalcUtil();
….
}
……
} catch(Exception e) {
e.printStackTrace();
}
%>
오류 메시지로 환경, 사용자, 관련 데이터 등의 내부 정보가 유출될 경우 취약하다.
● 오탐코드
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF8"));
String line = null;
while ((line = br.readLine()) != null) {
// …
}
} catch (IOException e) {
logger.error(e, e);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
logger.error(e, e);
}
}
}
오류 메시지로 환경, 사용자, 관련 데이터 등의 내부 정보가 유출될 경우 취약하다.
'소프트웨어(SW) 보안약점 진단원 > 구현단계 보안약점 제거 기준' 카테고리의 다른 글
구현단계 보안약점 기준 - 부적절한 예외 처리 (0) | 2025.06.04 |
---|---|
구현단계 보안약점 기준 - 오류상황 대응 부재 (1) | 2025.06.04 |
구현단계 보안약점 기준 - 종료되지 않는 반복문 또는 재귀 함수 (0) | 2025.06.04 |
구현단계 보안약점 기준 - 경쟁조건: 검사시점과 사용시점(TOCTOU) (0) | 2025.06.04 |
구현단계 보안약점 기준 - 신뢰할 수 없는 데이터의 역직렬화 (0) | 2025.06.04 |