사용자 입력 기반 과도한 메모리 할당

사용자 입력 기반 과도한 메모리 할당

설명

외부 입력에서 온 크기 값을 검증하지 않고 make, bytes.Repeat, strings.Repeat 등에 사용하면 과도한 메모리 할당이 발생할 수 있습니다.

잠재적 영향

  • 메모리 고갈 또는 런타임 패닉으로 서비스 거부가 발생할 수 있습니다.
  • 작은 요청으로 큰 리소스 사용을 유발할 수 있습니다.

해결 방법

  • 할당 전에 숫자 변환에 성공했고 0 이상, 최대 허용 크기 이하인지 명시적으로 검사하세요.
  • 요청 본문, 업로드, 반복 횟수에도 별도 상한을 두세요.

예시

변경 전

go
size, _ := strconv.Atoi(r.FormValue("n"))
buf := make([]byte, size)

변경 후

go
size, err := strconv.Atoi(r.FormValue("n"))
if err != nil || size < 0 || size > 4096 {
    return nil
}
buf := make([]byte, size)

설명:

  • 변경 전: 외부 입력에서 온 크기 값을 제한하지 않고 make 또는 반복 기반 할당 API에 사용하면, 공격자가 매우 큰 값을 전달해 과도한 메모리 사용과 서비스 거부를 유발할 수 있습니다.
  • 변경 후: 할당 크기에 명시적인 상한을 두세요.

참조