C/C++ 등 low-level 언어에서 변수, 포인터, 배열, 구조체 등이 선언만 되고 값이 대입되지 않은 상태(“uninitialized”)에서 접근할 때 발생.
컴파일러는 자동으로 메모리를 0으로 초기화하지 않는다(성능 이유).
→ 실제 값은 이전에 해당 메모리 영역에 존재하던 임의 데이터(“garbage value”)가 남아 있음.
공격자는 이 “쓰레기 값”의 내용을 예측하거나 조작할 수 있음.
CVE-2015-2411:
Internet Explorer uninitialized memory disclosure.
공격자는 uninitialized memory에 남아있는 정보를 추출 가능.
CVE-2009-1721 (libpng):
부적절하게 초기화된 힙 메모리 노출, crafted 이미지 파일로 익스플로잇.
이미지/폰트 파서:
공격자가 설계한 파일(이미지, 폰트, etc.)을 읽게 하여 uninitialized pointer를 통한 크래시, 임의코드 실행 유발.
c
CopyEdit
typedef struct {
int isAdmin;
char password[32];
} User;
User u; // 선언만 하고 초기화 X
printf("%d %s", u.isAdmin, u.password);
// 이전 프로세스 또는 사용자의 데이터가 노출될 수 있음
memset
, 생성자(constructor) 활용.