범위를 벗어난 쓰기
Out-of-bounds Write
설명
의도된 버퍼의 끝을 넘어가거나 시작 지점 앞에 데이터를 기록하는 취약점입니다.
잠재적 영향
DoS: Crash, Exit, or Restart (서비스 거부: 크래시, 종료 또는 재시작): 범위를 벗어난 메모리를 접근하려는 시도가 제품의 크래시를 유발할 수 있습니다.
Unexpected State (예상치 못한 상태): 이후의 쓰기 작업이 정의되지 않은 결과를 초래할 수 있습니다.
해결 방법
배열이나 컬렉션에 접근할 때는 항상 경계를 확인합니다.
Java의 경우 ArrayIndexOutOfBoundsException을 사용하여 경계를 초과한 접근을 방지합니다.
사용자의 입력이 있는 경우, 입력 검증을 통해 버퍼의 경계를 넘어서는 데이터가 입력되지 않도록 합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
@GetMapping("/update")
public void updateData(@RequestParam int index, @RequestParam int value) {
int[] data = new int[10];
data[index] = value; // 경계 검증이 없는 코드
}안전한 코드
설명:
취약한 코드: 위의 코드에서는 'index' 값에 대한 경계 검증이 없어 'index'가 배열의 범위를 벗어난 값을 가질 경우, ArrayIndexOutOfBoundsException이 발생하거나 메모리 손상이 발생할 수 있습니다.
안전한 코드: 수정된 코드에서는 'index'가 배열의 범위를 벗어나지 않도록 조건문을 추가하였습니다. 이로 인해, 경계를 넘어서는 쓰기 작업이 발생하지 않으며, 유효하지 않은 'index' 값이 들어올 경우 예외를 통해 적절히 처리합니다.
관련 CVE
참조
Last updated