설명
초기화되지 않은 스택 또는 풀 버퍼가 사용자 출력, 커널-사용자 복사, 파일 출력 등에 복사될 때 발생하는 정보 노출 취약점입니다.
잠재적 영향
- 이전 스택 또는 힙 내용이 외부로 노출될 수 있습니다.
- 노출된 주소, 토큰, 키 조각이 다른 공격을 보조할 수 있습니다.
해결 방법
- 출력 버퍼는 사용 전에 전체 범위를 초기화합니다.
- 구조체나 배열의 일부 필드만 채우는 경우 패딩과 미사용 영역도 지웁니다.
- 커널 코드에서는 사용자에게 복사하기 전
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으로 초기화합니다.