할당/해제 방식 불일치

메모리가 서로 맞지 않는 할당자 계열로 해제됩니다.

설명

메모리를 할당한 방식과 다른 해제 함수를 사용할 때 발생하는 취약점입니다. 예를 들어 new[]로 할당한 배열을 delete로 해제하거나, 커널 풀 할당을 일반 free로 해제하는 경우가 포함됩니다.

잠재적 영향

  • 힙 또는 풀 메타데이터 손상으로 인해 크래시가 발생할 수 있습니다.
  • 객체 소멸자가 올바르게 호출되지 않아 리소스 누수나 정의되지 않은 동작이 발생할 수 있습니다.

해결 방법

  1. malloc 계열 할당은 free로 해제합니다.
  2. new는 delete, new[]는 delete[]로 해제합니다.
  3. 플랫폼 또는 커널 전용 할당 API는 대응되는 전용 해제 API를 사용합니다.

예시

변경 전

cpp
void run() {
    int *items = new int[16];
    delete items;
}

변경 후

cpp
void run() {
    int *items = new int[16];
    delete[] items;
}

설명:

  • 변경 전: 배열 할당에 delete를 사용하여 할당/해제 계열이 맞지 않습니다.
  • 변경 후: new[]와 대응되는 delete[]를 사용합니다.

참조