📥 메모리 버퍼 오버플로우 - 실습 시뮬레이터

CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer

✅ 학습 진행도
  • 진단 시작
  • 범위 검사 누락 식별
  • 경계값 검증 적용
✏️ Java 코드 에디터 취약한 코드
ArrayUtils.java 💡 index가 배열 길이(array.length)보다 작은지 확인하세요.
public String getValue(String[] array, int index) {
    // [취약한 코드] 입력받은 index가 유효한 범위인지 확인하지 않음
    // index가 음수이거나 배열 길이보다 크면 ArrayIndexOutOfBoundsException 발생
    return array[index];
}
💡 수정 가이드
1. 배열 인덱스 유효성 검사

배열에 접근하기 전 인덱스가 0 이상이고 배열 길이보다 작은지 검사합니다.

if (index >= 0 && index < array.length) { return array[index]; } else { return "Index out of bounds"; }
📊 분석 결과 및 설명
🎯 목표

메모리 관리 언어(Java 등)에서는 버퍼 오버플로우가 직접 발생하지 않지만, 배열 인덱스 초과 등으로 인한 예외 발생 및 서비스 거부(DoS)를 방지해야 합니다.

⚠️ 현재 취약점

Improper Index Validation

입력값 검증 부재로 인해 런타임 에러가 발생하여 프로그램이 비정상 종료될 수 있습니다.

✅ 학습 진행도
  • 진단 시작
  • IndexError 위험 식별
  • 길이 체크 로직 적용
🐍 Python 코드 에디터 취약한 코드
data_processor.py 💡 len(data_list)를 사용하여 인덱스 범위를 확인하세요.
def get_item(data_list, index):
    # [취약한 코드] 인덱스 범위를 확인하지 않음
    # index가 리스트 크기를 벗어나면 IndexError 발생
    return data_list[index]
💡 수정 가이드
1. 리스트 길이 검증

인덱스가 리스트의 유효 범위 내에 있는지 확인합니다.

if 0 <= index < len(data_list): return data_list[index] else: return None
📊 분석 결과 및 설명
🎯 목표

외부 입력값으로 메모리 버퍼(리스트, 문자열 등)에 접근할 때, 유효 범위를 벗어나지 않도록 통제해야 합니다.

⚠️ 현재 취약점

Index Error / Buffer Overread

경계값 검증 부재는 프로그램 충돌이나 의도치 않은 메모리 접근 시도로 이어질 수 있습니다.