Skip to content

Heap buffer overflow

Heap'te allocate edilmiş bir buffer'ın ötesine yazarak komşu heap data'sını, allocator metadata'sını veya komşu object'leri corrupt etme.

Mechanism

MITRE'ye göre: "Bir heap overflow koşulu, overwrite edilebilen buffer'ın memory'nin heap kısmında allocate edildiği bir buffer overflow'dur; genellikle buffer'ın malloc() gibi bir rutin kullanılarak allocate edildiği anlamına gelir." Chunk'ın sınırlarının ötesine yazmak, komşu heap data'sını corrupt eden bir out-of-bounds write'tır.

Note

CWE-122 hem CWE-787'nin (Out-of-bounds Write) hem de CWE-788'in ChildOf'udur. Corruption komşu bir object'in function pointer'larını, C++ virtual method table'larını veya GOT entry'lerini, ya da allocator'ın kendi inline metadata'sını (chunk size, prev_size, fd/bk) overwrite edebilir; bu da tüm house-of-force/unlink ailesinin giriş noktasıdır.

Walkthrough

MITRE'nin 1. Örneği (C):

#define BUFSIZE 256
int main(int argc, char **argv) {
  char *buf;
  buf = (char *)malloc(sizeof(char)*BUFSIZE);
  strcpy(buf, argv[1]);   // no check that argv[1] fits in 256 bytes
}

İkinci bir MITRE örneği bir encoding-expansion bug'ıdır: 4*sizeof(char)*MAX_SIZE allocate edilirken bir ampersand-encoding'in input'u 4 değil 5 karakter genişletmesi, çok sayıda & içeren input'ta overflow verir. ASan altında böyle bir copy, bir redzone READ veya WRITE teşhisiyle bir heap-buffer-overflow raporlar. Overflow'u kontrole çevirmek için saldırgan önce heap layout'unu düzenler (bkz. heap-grooming-feng-shui), böylece overflow seçilen bir hedefe düşer.

Detection

AddressSanitizer (heap chunk'larının etrafında poisoned redzone'lar → "heap-buffer-overflow"); hardened allocator'lar ve guard page'ler; static analysis. glibc'nin kendi integrity check'leri (malloc(): corrupted top size, corrupted size vs. prev_size) metadata corruption'da abort eder.

Mitigation

Memory-safe / bounds-checked diller; compiler korumaları (/GS, _FORTIFY_SOURCE); ASLR ve PIE; strcpy/sprintf yerine length-bounded API'ler (snprintf, strlcpy); input sınırlarını validate et.

References