초기화되지 않은 메모리 노출

초기화되지 않은 메모리가 사용자에게 보이는 출력으로 복사됩니다.

설명

초기화되지 않은 스택 또는 풀 버퍼가 사용자 출력, 커널-사용자 복사, 파일 출력 등에 복사될 때 발생하는 정보 노출 취약점입니다.

잠재적 영향

  • 이전 스택 또는 힙 내용이 외부로 노출될 수 있습니다.
  • 노출된 주소, 토큰, 키 조각이 다른 공격을 보조할 수 있습니다.

해결 방법

  1. 출력 버퍼는 사용 전에 전체 범위를 초기화합니다.
  2. 구조체나 배열의 일부 필드만 채우는 경우 패딩과 미사용 영역도 지웁니다.
  3. 커널 코드에서는 사용자에게 복사하기 전 memset, zero-allocation API, 또는 복사되는 모든 바이트를 초기화하는 방법을 사용합니다.

예시

변경 전

c
void run(char *user) {
    char kernel_buffer[64];
    copy_to_user(user, kernel_buffer, sizeof(kernel_buffer));
}

변경 후

c
void run(char *user) {
    char kernel_buffer[64];
    memset(kernel_buffer, 0, sizeof(kernel_buffer));
    copy_to_user(user, kernel_buffer, sizeof(kernel_buffer));
}

설명:

  • 변경 전: kernel_buffer가 초기화되지 않은 상태로 사용자 영역에 복사됩니다.
  • 변경 후: 복사 전에 전체 버퍼를 0으로 초기화합니다.

참조