본문 바로가기

📢 오류메시지 정보노출 - 실습 시뮬레이터

CWE-209: Generation of Error Message Containing Sensitive Information

KISA 소프트웨어 보안약점 진단가이드(2021) · 에러처리
💡 쉽게 말하면
오류창에 내부 경로·쿼리를 그대로 보여주면 공격자에게 설계도를 주는 셈입니다. 사용자에겐 일반 안내만, 상세는 로그로 남깁니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 정보노출 식별
  • ⬜ 로그 분리+일반화
☕ Java 코드 에디터 취약한 코드
PaymentController.java 💡 스택트레이스를 노출하지 말고 로그에 기록 후 일반 메시지를 반환하세요.
try {
    processPayment(req);
} catch (Exception e) {
    // [취약] 내부 예외/스택트레이스를 사용자에게 노출
    response.getWriter().println("Error: " + e.getMessage());
    e.printStackTrace(response.getWriter());
}
💡 수정 가이드 (KISA 기준)
1. 로그 분리 + 일반 메시지

상세는 로그, 사용자에겐 일반 안내만.

} catch (Exception e) { logger.error("결제 처리 실패", e); // 상세는 서버 로그에만 response.getWriter().println("요청을 처리할 수 없습니다."); }
📊 분석 결과 및 설명
🎯 목표

예외의 상세 정보를 사용자에게 노출하지 않고 서버 로그로만 기록합니다.

⚠️ 현재 취약점

Sensitive Error Disclosure

스택트레이스/예외 메시지로 시스템 내부 구조가 노출됩니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 정보노출 식별
  • ⬜ 로그 분리+일반화
🐍 Python 코드 에디터 취약한 코드
views.py 💡 traceback을 응답에 넣지 말고 logging으로 기록하세요.
try:
    process_payment(req)
except Exception as e:
    # [취약] 예외 상세/트레이스백을 응답에 노출
    return f"Error: {e}\n{traceback.format_exc()}"
💡 수정 가이드 (KISA 기준)
1. logging + 일반 메시지

상세는 로그로, 응답은 일반 안내.

except Exception: logging.exception("결제 처리 실패") # 서버 로그에만 상세 기록 return "요청을 처리할 수 없습니다."
📊 분석 결과 및 설명
🎯 목표

예외 상세를 사용자 응답에서 제거하고 로그로만 남깁니다.

⚠️ 현재 취약점

Sensitive Error Disclosure

트레이스백 노출로 내부 구현이 드러납니다.

📰 실제 사고사례 & 표준 매핑
상세 에러·스택트레이스 노출로 DB 구조와 쿼리, 내부 경로가 공격자에게 드러난 사례가 흔합니다.
🏷️ CWE-209 OWASP A04 Insecure Design
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류