본문 바로가기 ← 메인

🔢 정수형 오버플로우 - 실습 시뮬레이터

CWE-190: Integer Overflow or Wraparound

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 오버플로우 위험 식별
  • ⬜ 사전 검증 로직 추가
✏️ Java 코드 에디터 취약한 코드
CalcService.java 💡 Integer.MAX_VALUE를 사용하여 연산 전 범위를 확인하세요.
public int add(int a, int b) {
    // [취약한 코드] 입력값에 대한 검증 없이 덧셈 수행
    // a=2147483647, b=1 일 때 오버플로우 발생 -> -2147483648
    return a + b;
}
💡 수정 가이드 (KISA 가이드)
1. 연산 전 범위 확인

덧셈 연산 결과가 Integer의 최대값을 초과할지 미리 검사합니다.

if (b > 0 && a > Integer.MAX_VALUE - b) { throw new ArithmeticException("Overflow"); } return a + b;
📊 분석 결과 및 설명
🎯 목표

정수 연산 시 결과값이 자료형의 허용 범위를 벗어나 의도치 않은 작은 값(또는 음수)이 되는 것을 방지해야 합니다.

⚠️ 현재 취약점

Integer Overflow

오버플로우는 재고 수량 조작, 버퍼 크기 오계산 등 심각한 논리적 오류를 유발할 수 있습니다.

✅ 학습 진행도
  • ⬜ 진단 시작
  • ⬜ 비즈니스 로직 한계 식별
  • ⬜ 최대값 제한 로직 적용
🐍 Python 코드 에디터 취약한 코드
order_service.py 💡 수량에 대한 최대 제한(MAX_QTY)을 두세요.
def calculate_total(price, quantity):
    # [취약한 코드] 파이썬은 정수 오버플로우가 없지만, 
    # 비즈니스 로직상 비정상적으로 큰 값은 제한해야 함
    total = price * quantity
    return total
💡 수정 가이드 (파이썬 가이드)
1. 논리적 임계값 검증

시스템이 처리 가능한 최대 수량 등을 정의하고 검사하여 리소스 고갈 등을 방지합니다.

MAX_LIMIT = 1000000 if quantity > MAX_LIMIT: raise ValueError("Quantity too large") total = price * quantity
📊 분석 결과 및 설명
🎯 목표

Python은 임의 정밀도를 지원하여 전통적인 오버플로우는 없으나, 과도한 자원 사용이나 DB 필드 허용 범위를 넘어서는 것을 방지해야 합니다.

⚠️ 현재 취약점

Business Logic Error

제한 없는 큰 수는 DoS 공격이나 데이터베이스 오류를 유발할 수 있습니다.

📰 실제 사고사례 & 표준 매핑
2018년 다수 스마트컨트랙트가 정수 오버플로우(batchOverflow 등)로 토큰이 무단 발행·탈취됐습니다.
🏷️ CWE-190
※ 공개적으로 알려진 사례 기반 교육용 요약 · CWE/OWASP는 공개 표준 분류