io_uring io_defer_entry double free (CVE-2023-21400)¶
CVE-2023-21400'ün kavramsal kataloğu: io_uring
io_defer_entryobject'inin improper-locking bir double free'si, Android'de local privilege escalation için exploit edildi.
Mechanism¶
Kök neden
NVD'ye göre: "io_uring.c'nin birden fazla function'ında, improper locking
nedeniyle olası bir kernel memory corruption vardır" (CWE-667). Red Hat
tracker'ı bunu io_defer_entry object'inin bir double free'sine sabitler;
locking kusuru IOPOLL kullanan ring'leri içerir.
Sınır aşılır çünkü bir double free, tek bir freed allocation'a iki referans verir — cross-cache / page-level corruption için klasik tohum.
Walkthrough¶
Üst seviye (NVD, Red Hat tracker):
- IOPOLL kullanan ve deferred (drain) operation'lara sahip bir io_uring ring oluştur.
- Locking kusurunu tetikle ki
io_defer_entryallocation'ı iki kez free edilsin. - Double free'yi bir page-level / cross-cache corruption tohumu olarak kullan.
Araştırmacılar bunu, fully-updated bir Pixel 7'de mitigation'ları bypass etmek
ve LPE elde etmek için Dirty Pagetable tekniği ile exploit ettiklerini
raporladılar (bkz.
cross-cache-attack,dirty-pagetable-page-table-data-only-attack).
Detection¶
- IOPOLL artı deferred (drain) operation'larla io_uring ring'leri oluşturan unprivileged/local process'ler — çoğu app için atipik.
- io_uring path'lerinde kernel double-free / KASAN "double-free or invalid-free" raporları; slab corruption oops'ları.
- Android/mobil filolarda, güvenilmeyen app'lerin io_uring kullanımı kendi başına güçlü bir anomalidir.
Mitigation¶
- Temmuz 2023 Android Security Bulletin (2023-07-01) düzeltmesini uygula; stable
fix commit
fb348857e7b67eefe365052f1423427b66dedbf3(linux-5.15.y). - Güvenilmeyen workload'lar için io_uring'i kısıtla veya disable et.
- CVSS 3.1 6.7 (Medium),
AV:L/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H.