Qualcomm DSP driver vulnerability (CVE-2025-47394)¶
Yanlış offset hesaplamalarıyla örtüşen buffer'ların kopyalanmasından kaynaklanan, daha düşük privileged bir context'ten erişilebilen bir Qualcomm subsystem'inde memory corruption.
Mechanism¶
Note
CVE-2025-47394, Qualcomm/NVD tarafından "yanlış offset hesaplamaları nedeniyle memory operasyonları sırasında örtüşen buffer'ların kopyalanmasında memory corruption" olarak tanımlanır (CWE-120, size validation olmadan klasik buffer copy). Güvenlik sınırı aşılır çünkü bir copy rutini, kopyanın destination sınırları içinde kalmasını zorlamadan ve source/destination örtüşmesini hesaba katmadan, saldırgan etkisindeki girdilerden source/destination offset'leri ya da bir length hesaplar. İki bölge örtüştüğünde ve length yanlış türetildiğinde, kopya komşu kernel/firmware memory'sini ezer.
Bu bug sınıfı, Qualcomm'un fastrpc'si (Application Processor ile Hexagon DSP arasında Remote Procedure Call'ları marshal eden kernel driver'ı) gibi mobile SoC DSP offload path'lerinde yaygındır. fastrpc, user space'ten buffer descriptor'ları ve length'leri kabul eder, bunları bir trust boundary boyunca map'ler/kopyalar ve firmware'e teslim eder. Bir offset, count ya da size'ın olduğu gibi alınıp sonra bir memcpy tarzı operasyonu sürmek için kullanıldığı her yer, out-of-bounds ya da overlapping-copy corruption için bir adaydır. DSP cihaz node'una bir handle tutan yerel bir app, vulnerable kopyaya ulaşmak için hazırlanmış descriptor'lar sağlayabilir.
Walkthrough¶
Qualcomm DSP / fastrpc attack surface'inin, cihaz node'ları app'lere geniş ölçüde erişilebilir olduğu için unprivileged ya da yarı-privileged Android context'lerinden tekrar tekrar erişilebilir olduğu gösterildi.
Kavramsal fastrpc invocation şekli
// High-level: open the DSP RPC device and invoke a remote method
int fd = open("/dev/adsprpc-smd", O_RDONLY);
// Build an invocation with input/output buffer descriptors
// (pointer + length pairs) that the driver copies across the AP<->DSP boundary.
struct fastrpc_invoke inv = { .handle = ..., .sc = ..., .args = descriptors };
ioctl(fd, FASTRPC_IOCTL_INVOKE, &inv);
Kavramsal olarak, yanlış-offset bir overlapping copy'nin exploitation'ı şu mantıksal adımları izler:
- Daha düşük privileged context'ten etkilenen subsystem'e bir handle edin (örn. bir DSP RPC cihaz node'u).
- Buffer descriptor'u, driver'ın gerçek destination size'a karşı yeniden validate etmediği bir length ya da offset kodlayan ve source ile destination bölgelerinin örtüştüğü bir istek gönderin.
- Yanlış hesaplanan kopya hedeflenen bölgeyi aşarak yazar, komşu heap ya da firmware ile paylaşılan memory'yi corrupt eder.
- Ortaya çıkan corruption (genellikle heap grooming üzerinden) daha genel bir primitive'e şekillendirilir. Kısıtlı bir overflow'un nasıl yükseltildiği için use-after-free ve arbitrary-write-primitive'e bakın.
Bu kayıt kavramsal kalır: tam ioctl numaraları, struct layout'ları ve offset matematiği SoC'ye ve firmware'e özgüdür ve bilinçli olarak çıkarılmıştır.
Detection¶
- Meşru bir audio/camera/ML offload nedeni olmayan process'lerin DSP RPC cihaz node'larına (örn.
/dev/*rpc*, adsprpc/cdsprpc) erişimini izleyin. - Android'de, fastrpc node'larına karşı SELinux denial'larını ve olağandışı
ioctldesenlerini auditd/logcatüzerinden ilişkilendirin. - Tek bir app çevresinde kümelenen memory corruption, KASAN/slab-redzone splat'ları ya da DSP subsystem restart'ları (SSR) belirten kernel loglarını izleyin — tekrarlanan DSP crash'leri fuzzing ya da başarısız exploitation'a işaret edebilir.
- EDR/MDM telemetrisi: büyük ya da tuhaf boyutlu DSP DMA buffer'ları map'leyen veya fault'lardan sonra tekrar tekrar yeniden çağıran app'leri işaretleyin.
Mitigation¶
Warning
Vendor düzeltmesini uygulayın. CVE-2025-47394, Qualcomm güvenlik bülteninde (Ocak 2026) ve downstream OEM yamalarında ele alınmıştır; düzeltme kopyadan önce doğru bounds/offset validation ekler. Privileged bir copy path'indeki bir memory-corruption bug'ı için sağlam, yalnızca-yapılandırma bir çözüm yoktur.
- Cihazı, Qualcomm bültenini içeren en son OEM güvenlik patch level'ında tutun.
- DSP RPC cihaz node'larına hangi app'lerin/context'lerin ulaşabileceğini kısıtlayın (platformun izin verdiği yerde SELinux policy'yi sıkılaştırın).
- Defense-in-depth: slab-freelist-hardening, CFI ve KASLR gibi kernel hardening, kısıtlı bir overflow'u code execution'a çevirmenin maliyetini yükseltir.
- Fleet'ler için minimum patch level'ları MDM üzerinden zorunlu kılın ve güncellenemeyen cihazları karantinaya alın.