Skip to content

timer_list spray

Bir kernel timer'ı embed eden (function pointer'ı sonradan overwrite edilen) heap object'leri spray ederek free edilmiş bir slab slot'unu reclaim et ve heap'i öngörülebilir bir layout'a groom et.

Mechanism

Note

Çıplak bir struct timer_list (veya struct hrtimer) nadiren tek başına duran bir heap allocation'ıdır — neredeyse her zaman daha büyük bir object'in içine embed edilmiştir. Yani pratikte "timer_list spray", function pointer'ı overwrite edilebilen bir timer'ı embed eden bir container object'i spray etmek anlamına gelir (örneğin bir hrtimer embed eden timerfd_ctx ya da POSIX-timer k_itimer object'leri). Reclaim invariant'ı herhangi bir SLUB spray ile aynıdır: victim'i free et, sonra aynı boyutta çok sayıda object allocate et ki biri free edilmiş slot'a düşsün; o object bir timer embed ediyorsa, artık kernel'in sonradan çağıracağı bir callback pointer'ını kontrol edersin.

Walkthrough

Güvenilir bir layout "dig and fence" grooming yöntemiyle (CVE-2022-1786 writeup'ından) kurulur, ardından timer taşıyan bir object kontrollü bir hole'a bırakılır:

  1. Dig + fence — hedef bir slab page'ini attacker'ın kontrol ettiği object'lerle tamamen doldur (örneğin kmalloc-256 page başına 16 msg_msgseg object'i), sonra ortadan bir object'i free ederek kontrollü bir hole oluştur; her biri fence object'leriyle çevrili çok sayıda hole üretmek için bunu ~64 kez tekrarla.
  2. Bir timer object'i ile reclaim et — timer taşıyan container'ı bir hole'a allocate et, örn.:
int tfd = timerfd_create(CLOCK_REALTIME, 0);  /* allocates timerfd_ctx (embeds hrtimer) */
  1. Reclaim edilen object'in embedded timer function'ı (ve object'in kendi heap adresi) overwrite edildiğinde bir KASLR leak kaynağı ve bir control-flow primitive haline gelir (bkz. timer-list-hrtimer-function-pointer-hijack).

Warning

Ayrı bir "çıplak timer_list spray et" primitive'i standart, dokümante edilmiş bir teknik değildir — exploitation, bir timer embed eden container'ları spray eder. Tek başına duran timer çerçevesini kavramsal olarak ele al.

Mitigation

  • CONFIG_SLAB_FREELIST_RANDOM, freelist hardening ve slab quarantine spray güvenilirliğini azaltır.
  • Dedicated/segregated cache'ler, bir timer taşıyan object'in cross-type reclaim'ini zorlaştırır.

References