Skip to content

Imagination GPU Driver Vulnerabilities advisory (PowerVR DDK)

Imagination Technologies PowerVR/Rogue DDK security advisory sınıfının kavramsal kataloğu — eksik bounds check'lerden kaynaklanan kernel out-of-bounds write'ları ve kernel exception'ları, CVE-2024-23698 (RGXFWChangeOSidPriority) ile örneklenir.

Mechanism

Kök neden

PowerVR DDK kernel modülü (pvrsrvkm), güvenilmeyen app sandbox'ından erişilebilen bir GPU device node'u açar. Birkaç advisory girdisi ortak bir pattern paylaşır: user'ın sağladığı bir parametre (örn. bir OSid / priority index'i) bir bounds check olmadan kullanılır. CVE-2024-23698'de RGXFWChangeOSidPriority function'ı (rgxfwutils.c, ref PP-159016), OSid index'i aralık dışı olduğunda bir kernel-heap out-of-bounds write (CWE-787) gerçekleştirir ve local privilege escalation'ı mümkün kılar.

Aşılan sınır app→kernel'dir: GPU driver'ları tercih edilen bir LPE surface'idir çünkü device node sandboxed app'lerden doğrudan erişilebilir.

Kavramsal akış (eksik bounds check → kernel-heap OOB write). Boyutlar/adresler kernel ve DDK sürümüne göre değişir, gösterim sadece şematiktir:

   sandboxed app                pvrsrvkm (kernel)
   -------------                ------------------
   ioctl(GPU node,              OSid index'i array sınırına karşı
     OSid = N)  ───────────────▶ DOĞRULANMAZ (missing bounds check)
                             priority[N] ◀── N aralık dışı
                          ┌───────────────────────────────┐
   kernel heap            │ priority[0..max-1]  (in-bounds) │
   array object           ├───────────────────────────────┤
                          │ ░░ komşu kernel object ░░       │ ◀─ OOB write (CWE-787)
                          └───────────────────────────────┘
                          komşu object'in security-relevant
                          field'ı bozulur → R/W primitive yolu

Walkthrough

Üst seviye, Imagination advisory'sinden ve Android bulletin'inden:

  1. PowerVR device node'una erişimi olan local bir app, aralık dışı bir OSid / priority parametresi gönderir.
  2. Eksik bounds check, kernel heap'e kontrollü bir OOB write verir.
  3. Attacker komşu kernel object'lerini groom eder ki overwrite security açısından önemli bir field'ı bozsun ve bir kernel R/W primitive'i kursun (bkz. out-of-bounds-write).
  4. Privilege escalation için process credential'larını overwrite et.

Detection

  • PowerVR device node'larını açan ve anormal OSid / priority argümanlarıyla GPU ioctl'leri gönderen güvenilmeyen app'ler.
  • pvrsrvkm / PowerVR DDK function'larında kernel exception'ları / oops veya KASAN raporları; tek bir non-system app ile ilişkilendirilen GPU driver crash'leri.
  • İlgili Android patch seviyesinin altında olup hâlâ DDK ≤ 23.3 çalıştıran cihazlar.
  • GPU-driver instability'sini izleyen privilege transition'ları.

Mitigation

  • Yanlış user-mode parametrelerini reddeden düzeltilmiş bir DDK'ye (23.3 sonrası) güncelle; Android için 2024-06-05 (veya sonrası) security patch seviyesini uygula (CVE-2024-23698, ref A-331239675).
  • GPU node erişimini sınırlamak için SELinux; mümkün olduğunda GPU ioctl'lerinin seccomp filtering'i.

References