✍️ 부적절한 전자서명 확인 - 실습 시뮬레이터

CWE-347: Improper Verification of Cryptographic Signature

✅ 학습 진행도
  • 진단 시작
  • 무조건 True 반환 제거
  • verify() 결과 확인
✏️ Java 코드 에디터 취약한 코드
SignatureVerifier.java
import java.security.Signature;

public class SignatureVerifier {
    public boolean verifySignature(byte[] data, byte[] sign, java.security.PublicKey key) throws Exception {
        Signature verifier = Signature.getInstance("SHA256withRSA");
        verifier.initVerify(key);
        verifier.update(data);
        
        // [취약점] verify() 메서드를 호출하지만 그 결과를 확인하지 않고
        // 무조건 true를 반환하여 서명 검증을 우회함
        verifier.verify(sign);
        return true; 
    }
}
💡 수정 가이드
1. verify() 반환값 확인

verify() 메서드는 서명이 유효하면 true, 아니면 false를 반환합니다. 이 값을 리턴하세요.

return verifier.verify(sign);
📊 분석 결과
🎯 목표

전자서명 검증 기능은 데이터의 무결성과 인증을 보장합니다. 서명 검증 함수의 결과값을 무시하고 무조건 성공(true)을 반환하는 코드를 수정하여 실제 검증 결과를 반환하도록 하세요.

✅ 학습 진행도
  • 진단 시작
  • verify() 예외 처리 추가
🐍 Python 코드 에디터 취약한 코드
verify_signature.py
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

def verify_data(public_key, signature, data):
    try:
        # [취약점] verify 함수는 서명이 유효하지 않으면 예외(InvalidSignature)를 발생시킴
        # 하지만 예외를 잡아서 처리하지 않고 통과시키거나, 로직이 누락됨
        public_key.verify(
            signature,
            data,
            padding.PKCS1v15(),
            hashes.SHA256()
        )
        # 예외가 발생해도 프로그램이 종료되지 않도록 처리 필요
        print("Verification attempted")
        return True
    except:
        # 모든 예외를 무시하고 True 반환 (매우 위험)
        return True
💡 수정 가이드
1. 예외 처리 수정

InvalidSignature 예외 발생 시 False를 반환해야 합니다.

except InvalidSignature: return False
📊 분석 결과
🎯 목표

Python의 cryptography 라이브러리는 서명 검증 실패 시 예외를 발생시킵니다. 이를 적절히 catch하여 유효하지 않은 서명일 경우 False를 반환하도록 수정하세요.