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:
- PowerVR device node'una erişimi olan local bir app, aralık dışı bir OSid / priority parametresi gönderir.
- Eksik bounds check, kernel heap'e kontrollü bir OOB write verir.
- 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). - 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.