Skip to content

MediaTek kernel driver OOB read/write — patch-gap LPE (CVE-2023-32837)

Project Zero tarafından analiz edilen bir MediaTek kernel driver'ında out-of-bounds read/write — bir array içindeki struct member'lara bounds dışında erişiliyor; partial fix'ten çok sonra bile bazı cihazlarda canlı kalan bir "patch gap" bug'ı.

Attribution caveat

Bu CVE (CVE-2023-32837) bir MediaTek driver problemi (JPEG decoding accelerator); Google Project Zero'dan Seth Jenkins tarafından Driving forward in Android drivers (Haziran 2024) yazısında belgelendi. Etkilenen kod MediaTek'e ait, Samsung'un NPU'suna değil — bu KB atom'unun slug'ı tarihsel nedenlerle "samsung-npu-..." olarak kalsa da içerik ve başlık MediaTek attribution'ını yansıtır.

Mechanism

Note

Bu bug, bir array of structs üzerinde ders kitabı niteliğinde bir out-of-bounds access: bir index doğru şekilde bounds'lanmıyor, dolayısıyla driver kernel .data bölgesinde attacker'ın etkilediği offset'lerde struct member'larını okuyup yazıyor. Struct'ın birkaç farklı member'ına erişilip bunlar değiştirildiği için birden fazla aday exploitation path'i var — ki bu da herhangi birini sonuna kadar sürmeyi belirgin şekilde zorlaştırıyor.

Coverity static analysis sorunu başta işaretlemişti ve MediaTek Temmuz 2021'de bazı kernel tree'lerinde partial bir fix uyguladı — ama commit mesajından anlaşıldığı kadarıyla o sırada security etkisi fark edilmemiş, bu yüzden fix her yere yayılmadı.

Walkthrough

Project Zero analizi OOB write'ı hedef alıyor ve kısıtlı ama kullanışlı bir primitive'e doğru ilerliyor:

uncontrolled OOB read/write in kernel .data (array-of-structs index not bounded)
    -> shape into: a racy write of NULL bytes
       at a predetermined offset in a kernel task stack
       used by an attacker-controlled process

"Bir kernel task stack'inde önceden belirlenmiş bir offset'te racy bir NULL byte write'ı" asıl mühendislik edilen primitive. Yazı, bu güvenlik açığının tek başına temiz bir uçtan uca exploit chain'i vermediği konusunda açık sözlü — dokunulan struct member'ların çokluğu stabil exploitation'ı zorlaştırdı.

Asıl ders patch gap

Aynı driver bazı MediaTek kernel tree'lerinde düzeltildi ama diğerlerinde savunmasız bırakıldı. Somut olarak: Asus ROG 6D (kernel 5.10) patch'i almıştı, oysa diğer her açıdan tamamen patch'li ve security-supported Xiaomi 11T (kernel 4.14) almamıştı. Bir bug'ın "upstream'de fix'lenmiş" olması, sahaya çıkan cihazlarda fix'lendiği anlamına gelmez.

Detection

  • Buradaki savunma çıkarımı bir runtime signature değil, supply-chain/patch-management: herhangi bir tree patch'lendiğinde CVE'nin her yerde kapandığını varsaymak yerine, bir cihazın gerçekte hangi kernel branch'iyle çıktığını ve driver fix'lerinin back-port edilip edilmediğini takip et.

Mitigation

  • MediaTek driver fix'ini, sadece Temmuz 2021'de alanlara değil, etkilenen her kernel tree'sine (4.14, 5.10, vb.) uygula.
  • Security açısından önemli driver'lardaki Coverity/static-analysis bulgularını potansiyel güvenlik sorunu olarak ele al ve bunları bakımı yapılan tüm branch'lere yay.

References