본문 바로가기

🎭 부적절한 예외처리 - 실습 시뮬레이터

CWE-396: Declaration of Catch for Generic Exception

KISA 소프트웨어 보안약점 진단가이드(2021) · 에러처리
💡 쉽게 말하면
모든 예외를 한 바구니에 담아 똑같이 처리하면, 심각한 오류가 사소한 것에 묻힙니다. 유형별로 나눠 처리합니다.
✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 포괄 예외 식별
  • ⬜ 구체적 예외 분리
☕ Java 코드 에디터 취약한 코드
DbService.java 💡 포괄 Exception 대신 구체적 예외 타입을 처리하세요.
// [취약] 모든 예외를 포괄(Exception)하여 동일 취급 → 원인 구분 불가
try {
    conn = pool.get();
    conn.query(sql);
} catch (Exception e) {
    retry();
}
💡 수정 가이드 (KISA 기준)
1. 구체적 예외

유형별로 catch를 나눕니다.

} catch (SQLTransientException e) { retry(); // 일시적 오류만 재시도 } catch (SQLException e) { logger.error("DB 오류", e); throw new ServiceException(e); }
📊 분석 결과 및 설명
🎯 목표

포괄적 예외 처리 대신 구체적 예외 유형에 맞는 처리를 합니다.

⚠️ 현재 취약점

Generic Exception Catch

원인 구분 없는 처리로 심각한 오류가 은폐됩니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 포괄 예외 식별
  • ⬜ 구체적 예외 분리
🐍 Python 코드 에디터 취약한 코드
db_service.py 💡 except Exception 대신 구체적 예외를 처리하세요.
# [취약] 광범위한 except로 모든 예외를 동일 처리
try:
    conn = pool.get()
    conn.query(sql)
except Exception:
    retry()
💡 수정 가이드 (KISA 기준)
1. 구체적 예외

유형별로 except를 나눕니다.

except OperationalError: retry() # 일시적 DB 오류만 재시도 except ConnectionError as e: logging.error("연결 오류: %s", e) raise
📊 분석 결과 및 설명
🎯 목표

포괄 except 대신 구체적 예외별 처리를 합니다.

⚠️ 현재 취약점

Generic Exception Catch

원인 미구분 처리로 오류가 은폐됩니다.

📰 실제 사고사례 & 표준 매핑
부적절한 예외처리로 보안 점검이 우회되거나 비정상 흐름이 그대로 진행된 사례가 보고됐습니다.
🏷️ CWE-248
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류