설명
동적으로 할당되지 않은 메모리, 스택 변수, 이미 범위를 벗어난 지역 객체 주소 등을 free, delete, 또는 커널 풀 해제 함수에 전달할 때 발생하는 취약점입니다.
잠재적 영향
- 프로세스 크래시 또는 커널 패닉과 같은 서비스 거부가 발생할 수 있습니다.
- 힙 메타데이터 손상으로 인해 예측하기 어려운 동작이나 보안 취약점으로 이어질 수 있습니다.
해결 방법
malloc/calloc/realloc으로 할당한 메모리만free로 해제합니다.new로 할당한 객체만delete로 해제합니다.- 스택 변수나 전역 변수의 주소를 해제 함수에 전달하지 않습니다.
예시
변경 전
c
void run(void) {
int value = 0;
int *p = &value;
free(p);
}
변경 후
c
void run(void) {
int *p = malloc(sizeof(int));
if (p == NULL) {
return;
}
free(p);
}
설명:
- 변경 전:
p는 스택 변수value의 주소를 가리키므로free(p)는 잘못된 해제입니다. - 변경 후:
p는malloc으로 할당된 힙 메모리만 가리키며 같은 할당 계열의free로 해제합니다.