Skip to content

Filesystem object data-only attack

Control flow'u hijack etmek yerine file-subsystem objelerindeki data alanlarını (credentials, file mode flag'leri, page reference'ları) bozarak ya da swap'leyerek privilege escalation; böylece CFI/KASLR/SMAP devre dışı bırakılır.

Mechanism

Data-only (data-oriented programming) saldırısı execution'ı asla yönlendirmez. Bunun yerine, security-relevant bir data alanı ile o alandan türetilen privilege kararı arasındaki bağı ihlal eder — örneğin write izni file->f_mode'dan bir kez belirlenir, dolayısıyla check'ten sonra FMODE_WRITE'ı flip'lemek, policy'nin hiç niyet etmediği write'ları mümkün kılar.

Note

"Beyond Control" çalışması (arXiv:2401.17618) exploit edilebilir file-system alanlarını üç aileye ayırır: Flags (inode.i_mode, file.f_mode, posix_acl.e_perm, vm_area_struct.vm_flags, pipe_buffer.flags), References (file.f_mapping, address_space.i_pages, bio.bi_iter.bi_sector, buffer_head.b_blocknr) ve Operations (bio.bi_opf, request.cmd_flags, iomap_dio.flags). Bunlardan herhangi birini bozmak, bir function pointer'a dokunmadan bir I/O'yu yeniden yönlendirir veya yeniden yetkilendirir; bu yüzden CFI, KASLR ve SMAP büyük ölçüde devre dışı kalır.

Warning

Attacker kontrolü altında hiçbir kernel pointer dereference edilmediği için, bu saldırılar çoğu zaman hiç KASLR leak'i gerektirmez ve klasik bir ROP chain'i bloklayacak control-flow-integrity mitigation'larını atlatır.

Walkthrough

Bu prensip üzerine kurulu temsili somut teknikler:

  • DirtyCred (Lin, Wu, Xing; ACM CCS 2022): heap reuse'u kötüye kullanarak aynı tipteki low-privilege bir objeyi high-privilege biriyle swap'ler. Permission check'inden sonra ama write'tan önce yazılabilir bir struct file'ı free et, slot'u read-only bir dosyanın struct file'ıyla reclaim et; böylece uçuştaki write read-only dosyaya düşer. Bkz. DirtyCred credential swap ve DirtyCred file exploitation.
  • Dirty Pagetable (Nicolas Wu): bir page-table page'ine dangling reference tut ve arbitrary physical read/write için PTE'leri düzenle — saf bir data-only primitive. Bkz. Dirty PageTable.
  • Bridge objects ("Beyond Control"): struct page * tutan objeler (örn. pipe_buffer.page, bio_vec.bv_page) slab-cache sınırlarını aşan page-granularity dangling reference'lar oluşturur ve cross-cache'ten kaçınır. Makale 282 alandan 23'ünün exploit edilebilir olduğunu ve mitigation'lar açıkken 10 end-to-end exploit gerçekleştirildiğini bildiriyor.

Swap adımı için window kontrolü genellikle FUSE ya da filesystem lock'larıyla elde edilir; kernel permission check ile write arasında tutulur.

DirtyCred-tarzı bir credential swap'in kavramsal zaman çizgisi (boyutlar/adresler/timing kernel'e göre değişir; sıralama filozofiktir):

  kernel write path                    attacker (paralel thread / FUSE stall)
  -----------------                    --------------------------------------
  t0  permission check OK
      (writable file -> izin verildi)
                                        t1  hedef writable `struct file` free
                                            edilir, slab slot serbest kalır
                                        t2  aynı slab slot read-only bir
                                            dosyanın `struct file`'ı ile
                                            reclaim edilir (heap reuse)
  t3  write devam eder, AMA artık
      slot read-only objeyi tutuyor
      => write read-only dosyaya düşer
         (control flow hiç hijack edilmedi)

Saldırının özü: check ve use arasındaki pencerede, policy kararını besleyen data objesi sessizce başka bir objeyle değiştirilir; hiçbir pointer dereference attacker'a yönlendirilmediği için CFI/KASLR devre dışı kalır.

Mitigation

DirtyCred'in önerdiği savunma, privileged objeleri (cred, file) ayrı bir virtual-memory bölgesine izole eder; böylece aynı tipteki attacker kontrollü objelerle bir slab'ı paylaşamazlar. Slab hardening (CONFIG_SLAB_FREELIST_HARDENED, dedicated cache'ler, cross-cache mitigation'ları) çıtayı yükseltir, ama page-level bridge-object UAF'leri slab isolation'ı yener ve page-granularity savunmaları gerektirir.

References