잘못된 메모리 해제

힙에 할당되지 않은 저장소를 대상으로 메모리 해제가 수행됩니다.

설명

동적으로 할당되지 않은 메모리, 스택 변수, 이미 범위를 벗어난 지역 객체 주소 등을 free, delete, 또는 커널 풀 해제 함수에 전달할 때 발생하는 취약점입니다.

잠재적 영향

  • 프로세스 크래시 또는 커널 패닉과 같은 서비스 거부가 발생할 수 있습니다.
  • 힙 메타데이터 손상으로 인해 예측하기 어려운 동작이나 보안 취약점으로 이어질 수 있습니다.

해결 방법

  1. malloc/calloc/realloc으로 할당한 메모리만 free로 해제합니다.
  2. new로 할당한 객체만 delete로 해제합니다.
  3. 스택 변수나 전역 변수의 주소를 해제 함수에 전달하지 않습니다.

예시

변경 전

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로 해제합니다.

참조