Skip to content

B-PUAF universal rooting (CVE-2024-46740)

CVE-2024-46740'ın kavramsal kataloğu: bir use-after-free'ye çöken ve public "B-PUAF" universal-root chain'lerinde kullanılan bir Android binder out-of-bounds-write.

B-PUAF nedir

"B-PUAF" burada bir proje codename'idir (binder physical/page use-after-free chain'leri için); bu bir binder (drivers/android/binder.c) bug'ıdır, bir GPU bug'ı değildir. CVE-2024-46740'ın bir GPU bileşeni yoktur.

Mechanism

Root cause

drivers/android/binder.c içinde, binder_transaction'da binder objeleri arasındaki raw-data kopyası bir bounds check'ten yoksundur. Raw data, data section boyutunu aştığında, kopya bitişik offsets section'ını overwrite eder. Transaction cleanup sırasında bozuk offset'ler walk edilir ve arbitrary binder node refcount'larını decrement etmek için kullanılır — node'ları erkenden release eder ve diğer holder'ları dangling pointer'larla bırakır. OOB write (CWE-787) tetikleyicidir; ortaya çıkan use-after-free (CWE-416) exploit edilebilir state'tir.

Aşılan security boundary app sandbox → kernel'dır: binder her untrusted Android app'ten erişilebilir, dolayısıyla buradaki bir refcount-confusion UAF doğrudan bir local privilege escalation yüzeyidir.

Kavramsal buffer layout (şematik; boyutlar/sıralama kernel'e göre değişir):

binder transaction buffer
+------------------------+------------------------+
|     data section       |    offsets section     |
| (raw transaction data) | (binder object indices)|
+------------------------+------------------------+
        |                 ^
        |  bounds check   |  bitişik (adjacent)
        |  yok / eksik    |
        v                 |
   raw-data kopyası ──────┘
   data section'ı aşar ve offsets array'ine taşar (OOB write, CWE-787)

cleanup walk:
   bozuk offset  ──► yanlış binder node  ──► refcount-- (premature)
                                       node erken release edilir,
                                       holder'da dangling pointer kalır
                                           use-after-free (CWE-416)

Walkthrough

Üst-seviye, public advisory ve "B-PUAF" tanımlarından:

  1. Offset'leri boz. Raw data'sı data section'ı aşıp offsets array'ine taşan crafted bir BINDER_WRITE_READ transaction submit et.
  2. Premature free. Cleanup bir node refcount'unu erkenden decrement eder ve bir kernel objesini, dangling bir pointer kalırken free eder.
  3. Reclaim. Free edilmiş slab slot'unu attacker etkili bir objeyle yeniden allocate et; bu bir type confusion üretir.
  4. R/W → root kur. Confusion'ı bir kernel read/write'a dönüştür, credentials/task state'ini overwrite et ve SELinux'u yen. (Bkz. use-after-free, dirtycred-credential-swap.)

Detection

  • Tutarsız data vs. offsets boyutlarıyla bozuk BINDER_WRITE_READ ioctl'leri issue eden untrusted app'ler.
  • Kernel logları: binder oops'ları, binder path'lerinde KASAN: use-after-free, beklenmedik node-release mesajları, etkilenen build'lerde panic'ler.
  • Sandboxed bir app UID'sinden anormal credential geçişleri / SELinux enforcing→permissive flip'leri; bir app UID'ye parent olan yeni root process'ler.
  • Filo görünümü: 2024-11-05 patch seviyesinin altındaki cihazlar.

Mitigation

  • Android Security Bulletin — November 2024 (2024-11-05 SPL) fix'ini uygula; fix 5.4 / 5.10 / 5.15 / 6.1 / 6.6 / 6.10 stable branch'lerine backport edildi (kesin point-release sürümleri için kernel.org stable changelog'a / linux-cve duyurusuna bakın).
  • SELinux'u enforcing tut; app install kaynaklarını kısıtla.
  • Test cihazlarında OOB'yi yüzeye çıkarmak için build-time KASAN / kernel hardening.

References