📜 부적절한 인증서 유효성 검증

CWE-295: Improper Certificate Validation

✅ 학습 진행도
  • 진단 시작
  • 무조건 True 반환 제거
  • 안전한 검증 로직 적용
✏️ Java 코드 에디터 취약한 코드
TrustManager.java
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;

public class TrustAll {
    public void disableCheck() {
        // [취약점] 모든 호스트 이름을 무조건 신뢰함 (return true)
        // 중간자 공격(MITM)에 취약해짐
        HostnameVerifier allHostsValid = new HostnameVerifier() {
            public boolean verify(String hostname, SSLSession session) {
                return true; 
            }
        };
    }
}
💡 수정 가이드
1. 기본 검증 사용

취약한 HostnameVerifier를 직접 구현하는 코드를 삭제하고 기본 설정을 사용하거나, false를 반환해야 합니다.

return false; // 또는 코드 자체를 제거
📊 분석 결과
🎯 목표

SSL/TLS 연결 시 `verify()` 메서드가 무조건 `true`를 반환하면 공격자가 위조한 인증서도 통과됩니다. 이를 수정하여 호스트 검증을 수행하도록 하세요.

✅ 학습 진행도
  • 진단 시작
  • 검증 비활성화 제거
  • 필수 검증 설정
🐍 Python 코드 에디터 취약한 코드
ssl_connect.py
import ssl
import urllib.request

def connect_server():
    # [취약점] 인증서 검증을 수행하지 않음 (CERT_NONE)
    # 이는 자체 서명된 인증서나 유효하지 않은 인증서도 허용함
    context = ssl.create_default_context()
    context.check_hostname = False
    context.verify_mode = ssl.CERT_NONE
    
    response = urllib.request.urlopen("https://example.com", context=context)
    return response.read()
💡 수정 가이드
1. 호스트네임 확인 활성화
context.check_hostname = True
2. 인증서 필수 검증 설정
context.verify_mode = ssl.CERT_REQUIRED
📊 분석 결과
🎯 목표

Python의 `ssl` 모듈 사용 시 `CERT_NONE` 설정을 제거하고, `CERT_REQUIRED` 및 호스트네임 확인을 활성화하여 연결을 보호하세요.