설명
외부 입력에서 온 크기 값을 검증하지 않고 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에 사용하면, 공격자가 매우 큰 값을 전달해 과도한 메모리 사용과 서비스 거부를 유발할 수 있습니다. - 변경 후: 할당 크기에 명시적인 상한을 두세요.